├── ruoyi-ui ├── public │ ├── robots.txt │ └── favicon.ico ├── src │ ├── views │ │ ├── system │ │ │ └── log │ │ │ │ └── index.vue │ │ ├── redirect.vue │ │ ├── components │ │ │ └── icons │ │ │ │ └── svg-icons.js │ │ ├── tool │ │ │ └── swagger │ │ │ │ └── index.vue │ │ └── monitor │ │ │ └── druid │ │ │ └── index.vue │ ├── assets │ │ ├── logo │ │ │ └── logo.png │ │ ├── 401_images │ │ │ └── 401.gif │ │ ├── 404_images │ │ │ ├── 404.png │ │ │ └── 404_cloud.png │ │ ├── image │ │ │ ├── profile.jpg │ │ │ ├── login-background.jpg │ │ │ └── login-background2.png │ │ ├── logo_bak │ │ │ └── logo.png │ │ ├── icons │ │ │ ├── svg │ │ │ │ ├── chart.svg │ │ │ │ ├── size.svg │ │ │ │ ├── link.svg │ │ │ │ ├── guide.svg │ │ │ │ ├── money.svg │ │ │ │ ├── email.svg │ │ │ │ ├── drag.svg │ │ │ │ ├── documentation.svg │ │ │ │ ├── fullscreen.svg │ │ │ │ ├── user.svg │ │ │ │ ├── lock.svg │ │ │ │ ├── excel.svg │ │ │ │ ├── example.svg │ │ │ │ ├── star.svg │ │ │ │ ├── slider.svg │ │ │ │ ├── table.svg │ │ │ │ ├── search.svg │ │ │ │ ├── education.svg │ │ │ │ ├── tab.svg │ │ │ │ ├── message.svg │ │ │ │ ├── switch.svg │ │ │ │ ├── theme.svg │ │ │ │ ├── druid.svg │ │ │ │ ├── code.svg │ │ │ │ ├── peoples.svg │ │ │ │ ├── input.svg │ │ │ │ ├── server.svg │ │ │ │ ├── textarea.svg │ │ │ │ ├── time.svg │ │ │ │ ├── edit.svg │ │ │ │ ├── nested.svg │ │ │ │ ├── row.svg │ │ │ │ ├── monitor.svg │ │ │ │ ├── tree-table.svg │ │ │ │ ├── eye.svg │ │ │ │ ├── build.svg │ │ │ │ ├── clipboard.svg │ │ │ │ ├── list.svg │ │ │ │ ├── download.svg │ │ │ │ ├── icon.svg │ │ │ │ ├── international.svg │ │ │ │ ├── question.svg │ │ │ │ ├── wechat.svg │ │ │ │ ├── skill.svg │ │ │ │ ├── people.svg │ │ │ │ ├── post.svg │ │ │ │ ├── checkbox.svg │ │ │ │ ├── language.svg │ │ │ │ ├── eye-open.svg │ │ │ │ ├── validCode.svg │ │ │ │ ├── radio.svg │ │ │ │ ├── select.svg │ │ │ │ ├── upload.svg │ │ │ │ ├── 404.svg │ │ │ │ ├── zip.svg │ │ │ │ ├── phone.svg │ │ │ │ ├── log.svg │ │ │ │ └── bug.svg │ │ │ ├── index.js │ │ │ └── svgo.yml │ │ └── styles │ │ │ ├── variables.scss │ │ │ ├── element-variables.scss │ │ │ ├── transition.scss │ │ │ └── element-ui.scss │ ├── utils │ │ ├── errorCode.js │ │ ├── auth.js │ │ ├── generator │ │ │ ├── css.js │ │ │ └── drawingDefalut.js │ │ ├── base.js │ │ ├── jsencrypt.js │ │ ├── permission.js │ │ └── zipdownload.js │ ├── App.vue │ ├── api │ │ ├── menu.js │ │ ├── monitor │ │ │ ├── server.js │ │ │ ├── online.js │ │ │ ├── operlog.js │ │ │ ├── jobLog.js │ │ │ ├── logininfor.js │ │ │ └── job.js │ │ ├── login.js │ │ ├── system │ │ │ ├── notice.js │ │ │ ├── menu.js │ │ │ ├── company.js │ │ │ ├── dict │ │ │ │ ├── data.js │ │ │ │ └── type.js │ │ │ ├── template.js │ │ │ └── config.js │ │ ├── selfcom │ │ │ ├── post.js │ │ │ ├── dept.js │ │ │ └── role.js │ │ └── tool │ │ │ └── gen.js │ ├── layout │ │ ├── components │ │ │ ├── index.js │ │ │ ├── Sidebar │ │ │ │ ├── Item.vue │ │ │ │ ├── FixiOSBug.js │ │ │ │ └── Link.vue │ │ │ └── AppMain.vue │ │ └── mixin │ │ │ └── ResizeHandler.js │ ├── components │ │ ├── IconSelect │ │ │ └── requireIcons.js │ │ ├── RuoYi │ │ │ ├── Doc │ │ │ │ └── index.vue │ │ │ └── Git │ │ │ │ └── index.vue │ │ ├── Screenfull │ │ │ └── index.vue │ │ ├── Hamburger │ │ │ └── index.vue │ │ └── SvgIcon │ │ │ └── index.vue │ ├── directive │ │ └── permission │ │ │ ├── index.js │ │ │ ├── hasRole.js │ │ │ └── hasPermi.js │ ├── store │ │ ├── index.js │ │ ├── getters.js │ │ └── modules │ │ │ ├── settings.js │ │ │ ├── app.js │ │ │ └── permission.js │ └── settings.js ├── babel.config.js ├── .env.production ├── .env.staging ├── .env.development ├── .eslintignore ├── .gitignore ├── .editorconfig └── build │ └── index.js ├── ruoyi ├── uploadPath │ └── avatar │ │ └── 2023 │ │ └── 03 │ │ ├── 11 │ │ └── b64706760cf8459377fc4f04307a8dd7.jpeg │ │ └── 01 │ │ ├── 0fb4b68cf18ae2f5838776bbf1109924.jpeg │ │ ├── 5e183666f3c78685cf3a25e75a5a1fe8.jpeg │ │ ├── bb36028debf328575b7acbcd5b2a1ec7.jpeg │ │ ├── e47529ad2fa35bd4409630bc229965be.jpeg │ │ ├── 2e48cdce098935e88591964d9a39c7fa.jpeg │ │ └── b6633df2b323c128a21c84c99dfc3cc4.jpeg ├── src │ └── main │ │ ├── resources │ │ ├── META-INF │ │ │ └── spring-devtools.properties │ │ ├── mybatis │ │ │ ├── mybatis-config.xml │ │ │ └── system │ │ │ │ ├── SysRoleMenuMapper.xml │ │ │ │ ├── SysUserPostMapper.xml │ │ │ │ └── SysRoleDeptMapper.xml │ │ ├── i18n │ │ │ └── messages.properties │ │ └── vm │ │ │ └── js │ │ │ └── api.js.vm │ │ └── java │ │ └── com │ │ └── ruoyi │ │ ├── framework │ │ ├── aspectj │ │ │ └── lang │ │ │ │ ├── enums │ │ │ │ ├── DataSourceType.java │ │ │ │ ├── BusinessStatus.java │ │ │ │ ├── OperatorType.java │ │ │ │ └── BusinessType.java │ │ │ │ └── annotation │ │ │ │ ├── Excels.java │ │ │ │ ├── DataScope.java │ │ │ │ ├── DataSource.java │ │ │ │ └── Log.java │ │ ├── interceptor │ │ │ └── annotation │ │ │ │ └── RepeatSubmit.java │ │ ├── task │ │ │ └── RyTask.java │ │ ├── datasource │ │ │ ├── DynamicDataSource.java │ │ │ └── DynamicDataSourceContextHolder.java │ │ ├── manager │ │ │ ├── ShutdownManager.java │ │ │ └── AsyncManager.java │ │ ├── security │ │ │ ├── handle │ │ │ │ └── NotFoundHandle.java │ │ │ └── satoken │ │ │ │ └── StpInterfaceImpl.java │ │ ├── config │ │ │ ├── ServerConfig.java │ │ │ ├── ApplicationConfig.java │ │ │ ├── GenConfig.java │ │ │ └── ResourcesConfig.java │ │ └── web │ │ │ ├── domain │ │ │ └── server │ │ │ │ └── Mem.java │ │ │ └── page │ │ │ └── TableSupport.java │ │ ├── common │ │ ├── exception │ │ │ ├── DemoModeException.java │ │ │ ├── user │ │ │ │ ├── CaptchaException.java │ │ │ │ ├── CaptchaExpireException.java │ │ │ │ ├── UserPasswordNotMatchException.java │ │ │ │ └── UserException.java │ │ │ ├── file │ │ │ │ ├── FileException.java │ │ │ │ ├── FileSizeLimitExceededException.java │ │ │ │ └── FileNameLengthLimitExceededException.java │ │ │ ├── UtilException.java │ │ │ ├── job │ │ │ │ └── TaskException.java │ │ │ └── CustomException.java │ │ ├── utils │ │ │ ├── LogUtils.java │ │ │ ├── job │ │ │ │ ├── QuartzJobExecution.java │ │ │ │ └── QuartzDisallowConcurrentExecution.java │ │ │ ├── KeyUtils.java │ │ │ ├── idworker │ │ │ │ └── AbstractClock.java │ │ │ ├── MessageUtils.java │ │ │ ├── sql │ │ │ │ └── SqlUtil.java │ │ │ ├── ExceptionUtil.java │ │ │ └── IdUtils.java │ │ ├── enums │ │ │ ├── UserStatus.java │ │ │ ├── BillType.java │ │ │ ├── SmsType.java │ │ │ └── HttpMethod.java │ │ ├── domain │ │ │ └── ResultCode.java │ │ └── constant │ │ │ ├── ScheduleConstants.java │ │ │ └── UserConstants.java │ │ ├── RuoYiServletInitializer.java │ │ ├── project │ │ ├── business │ │ │ └── job │ │ │ │ └── RedisConnRefreshJob.java │ │ ├── system │ │ │ ├── domain │ │ │ │ ├── SysTemplate.java │ │ │ │ ├── SysTempMenu.java │ │ │ │ ├── vo │ │ │ │ │ └── MetaVo.java │ │ │ │ ├── SysRoleDept.java │ │ │ │ ├── SysRoleMenu.java │ │ │ │ ├── SysUserPost.java │ │ │ │ └── SysUserRole.java │ │ │ ├── mapper │ │ │ │ ├── SysRoleMenuMapper.java │ │ │ │ ├── SysUserPostMapper.java │ │ │ │ ├── SysRoleDeptMapper.java │ │ │ │ ├── SysNoticeMapper.java │ │ │ │ ├── SysTempMenuMapper.java │ │ │ │ ├── SysTemplateMapper.java │ │ │ │ ├── SysUserRoleMapper.java │ │ │ │ └── SysConfigMapper.java │ │ │ └── service │ │ │ │ ├── SysTempMenuService.java │ │ │ │ ├── ISysNoticeService.java │ │ │ │ ├── ISysTemplateService.java │ │ │ │ ├── ISysDictDataService.java │ │ │ │ ├── ISysUserOnlineService.java │ │ │ │ └── ISysCompanyService.java │ │ ├── monitor │ │ │ ├── service │ │ │ │ ├── ISysLogininforService.java │ │ │ │ ├── ISysOperLogService.java │ │ │ │ └── ISysJobLogService.java │ │ │ ├── controller │ │ │ │ └── ServerController.java │ │ │ └── mapper │ │ │ │ ├── SysLogininforMapper.java │ │ │ │ ├── SysOperLogMapper.java │ │ │ │ ├── SysJobMapper.java │ │ │ │ └── SysJobLogMapper.java │ │ └── tool │ │ │ └── gen │ │ │ ├── util │ │ │ └── VelocityInitializer.java │ │ │ ├── service │ │ │ └── IGenTableColumnService.java │ │ │ └── mapper │ │ │ └── GenTableColumnMapper.java │ │ └── RuoYiApplication.java └── bin │ ├── clean.bat │ ├── package.bat │ └── run-tomcat.bat ├── screenshot ├── img.png ├── comimg.png ├── menu.jpg └── tenant.png ├── .gitignore └── LICENSE /ruoyi-ui/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / -------------------------------------------------------------------------------- /ruoyi/uploadPath/avatar/2023/03/01/0fb4b68cf18ae2f5838776bbf1109924.jpeg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/uploadPath/avatar/2023/03/01/5e183666f3c78685cf3a25e75a5a1fe8.jpeg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/uploadPath/avatar/2023/03/01/bb36028debf328575b7acbcd5b2a1ec7.jpeg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/uploadPath/avatar/2023/03/01/e47529ad2fa35bd4409630bc229965be.jpeg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/views/system/log/index.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /ruoyi-ui/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /ruoyi/src/main/resources/META-INF/spring-devtools.properties: -------------------------------------------------------------------------------- 1 | restart.include.json=/com.alibaba.fastjson.*.jar -------------------------------------------------------------------------------- /screenshot/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/screenshot/img.png -------------------------------------------------------------------------------- /ruoyi/bin/clean.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi/bin/clean.bat -------------------------------------------------------------------------------- /ruoyi/bin/package.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi/bin/package.bat -------------------------------------------------------------------------------- /screenshot/comimg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/screenshot/comimg.png -------------------------------------------------------------------------------- /screenshot/menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/screenshot/menu.jpg -------------------------------------------------------------------------------- /screenshot/tenant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/screenshot/tenant.png -------------------------------------------------------------------------------- /ruoyi-ui/.env.production: -------------------------------------------------------------------------------- 1 | # 生产环境配置 2 | ENV = 'production' 3 | 4 | # wytest管理系统/生产环境 5 | VUE_APP_BASE_API = '/prod-api' 6 | -------------------------------------------------------------------------------- /ruoyi/bin/run-tomcat.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi/bin/run-tomcat.bat -------------------------------------------------------------------------------- /ruoyi-ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/public/favicon.ico -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/logo/logo.png -------------------------------------------------------------------------------- /ruoyi-ui/.env.staging: -------------------------------------------------------------------------------- 1 | NODE_ENV = production 2 | 3 | # 测试环境配置 4 | ENV = 'staging' 5 | 6 | # wytest管理系统/测试环境 7 | VUE_APP_BASE_API = '/stage-api' 8 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/401_images/401.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/401_images/401.gif -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/404_images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/404_images/404.png -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/image/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/image/profile.jpg -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/logo_bak/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/logo_bak/logo.png -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/404_images/404_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/404_images/404_cloud.png -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/image/login-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/image/login-background.jpg -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/image/login-background2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi-ui/src/assets/image/login-background2.png -------------------------------------------------------------------------------- /ruoyi-ui/src/utils/errorCode.js: -------------------------------------------------------------------------------- 1 | export default { 2 | '401': '认证失败,无法访问系统资源', 3 | '403': '当前操作没有权限', 4 | '404': '访问资源不存在', 5 | 'default': '系统未知错误,请反馈给管理员' 6 | } 7 | -------------------------------------------------------------------------------- /ruoyi-ui/.env.development: -------------------------------------------------------------------------------- 1 | # 开发环境配置 2 | ENV = 'development' 3 | 4 | # wytest管理系统/开发环境 5 | VUE_APP_BASE_API = '/dev-api' 6 | 7 | # 路由懒加载 8 | VUE_CLI_BABEL_TRANSPILE_MODULES = true 9 | -------------------------------------------------------------------------------- /ruoyi-ui/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /ruoyi-ui/src/api/menu.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 获取路由 4 | export const getRouters = () => { 5 | return request({ 6 | url: '/getRouters', 7 | method: 'get' 8 | }) 9 | } -------------------------------------------------------------------------------- /ruoyi-ui/src/api/monitor/server.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询服务器详细 4 | export function getServer() { 5 | return request({ 6 | url: '/monitor/server', 7 | method: 'get' 8 | }) 9 | } -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/.eslintignore: -------------------------------------------------------------------------------- 1 | # 忽略build目录下类型为js的文件的语法检查 2 | build/*.js 3 | # 忽略src/assets目录下文件的语法检查 4 | src/assets 5 | # 忽略public目录下文件的语法检查 6 | public 7 | # 忽略当前目录下为js的文件的语法检查 8 | *.js 9 | # 忽略当前目录下为vue的文件的语法检查 10 | *.vue -------------------------------------------------------------------------------- /ruoyi/uploadPath/avatar/2023/03/01/2e48cdce098935e88591964d9a39c7fa.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi/uploadPath/avatar/2023/03/01/2e48cdce098935e88591964d9a39c7fa.jpeg -------------------------------------------------------------------------------- /ruoyi/uploadPath/avatar/2023/03/01/b6633df2b323c128a21c84c99dfc3cc4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi/uploadPath/avatar/2023/03/01/b6633df2b323c128a21c84c99dfc3cc4.jpeg -------------------------------------------------------------------------------- /ruoyi/uploadPath/avatar/2023/03/11/b64706760cf8459377fc4f04307a8dd7.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/u3breeze/Springboot-Multi-Tenant-SaToken/HEAD/ruoyi/uploadPath/avatar/2023/03/11/b64706760cf8459377fc4f04307a8dd7.jpeg -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/size.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/layout/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as AppMain } from './AppMain' 2 | export { default as Navbar } from './Navbar' 3 | export { default as Settings } from './Settings' 4 | export { default as Sidebar } from './Sidebar/index.vue' 5 | export { default as TagsView } from './TagsView/index.vue' 6 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/views/redirect.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /ruoyi-ui/src/components/IconSelect/requireIcons.js: -------------------------------------------------------------------------------- 1 | 2 | const req = require.context('../../assets/icons/svg', false, /\.svg$/) 3 | const requireAll = requireContext => requireContext.keys() 4 | 5 | const re = /\.\/(.*)\.svg/ 6 | 7 | const icons = requireAll(req).map(i => { 8 | return i.match(re)[1] 9 | }) 10 | 11 | export default icons 12 | -------------------------------------------------------------------------------- /ruoyi-ui/src/views/components/icons/svg-icons.js: -------------------------------------------------------------------------------- 1 | const req = require.context('../../../assets/icons/svg', false, /\.svg$/) 2 | const requireAll = requireContext => requireContext.keys() 3 | 4 | const re = /\.\/(.*)\.svg/ 5 | 6 | const svgIcons = requireAll(req).map(i => { 7 | return i.match(re)[1] 8 | }) 9 | 10 | export default svgIcons 11 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/guide.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import SvgIcon from '@/components/SvgIcon'// svg component 3 | 4 | // register globally 5 | Vue.component('svg-icon', SvgIcon) 6 | 7 | const req = require.context('./svg', false, /\.svg$/) 8 | const requireAll = requireContext => requireContext.keys().map(requireContext) 9 | requireAll(req) 10 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/DataSourceType.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.framework.aspectj.lang.enums; 2 | 3 | /** 4 | * 数据源 5 | * 6 | * @author ruoyi 7 | */ 8 | public enum DataSourceType 9 | { 10 | /** 11 | * 主库 12 | */ 13 | MASTER, 14 | 15 | /** 16 | * 从库 17 | */ 18 | SLAVE 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-ui/src/utils/auth.js: -------------------------------------------------------------------------------- 1 | import Cookies from 'js-cookie' 2 | 3 | const TokenKey = 'Admin-Token' 4 | 5 | export function getToken() { 6 | return Cookies.get(TokenKey) 7 | } 8 | 9 | export function setToken(token) { 10 | return Cookies.set(TokenKey, token) 11 | } 12 | 13 | export function removeToken() { 14 | return Cookies.remove(TokenKey) 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/money.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/DemoModeException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception; 2 | 3 | /** 4 | * 演示模式异常 5 | * 6 | * @author ruoyi 7 | */ 8 | public class DemoModeException extends RuntimeException 9 | { 10 | private static final long serialVersionUID = 1L; 11 | 12 | public DemoModeException() 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessStatus.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.framework.aspectj.lang.enums; 2 | 3 | /** 4 | * 操作状态 5 | * 6 | * @author ruoyi 7 | * 8 | */ 9 | public enum BusinessStatus 10 | { 11 | /** 12 | * 成功 13 | */ 14 | SUCCESS, 15 | 16 | /** 17 | * 失败 18 | */ 19 | FAIL, 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | **/*.log 8 | 9 | tests/**/coverage/ 10 | tests/e2e/reports 11 | selenium-debug.log 12 | 13 | # Editor directories and files 14 | .idea 15 | .vscode 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.local 21 | 22 | package-lock.json 23 | yarn.lock 24 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svgo.yml: -------------------------------------------------------------------------------- 1 | # replace default config 2 | 3 | # multipass: true 4 | # full: true 5 | 6 | plugins: 7 | 8 | # - name 9 | # 10 | # or: 11 | # - name: false 12 | # - name: true 13 | # 14 | # or: 15 | # - name: 16 | # param1: 1 17 | # param2: 2 18 | 19 | - removeAttrs: 20 | attrs: 21 | - 'fill' 22 | - 'fill-rule' 23 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/drag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/utils/LogUtils.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.utils; 2 | 3 | /** 4 | * 处理并记录日志文件 5 | * 6 | * @author ruoyi 7 | */ 8 | public class LogUtils 9 | { 10 | public static String getBlock(Object msg) 11 | { 12 | if (msg == null) 13 | { 14 | msg = ""; 15 | } 16 | return "[" + msg.toString() + "]"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception.user; 2 | 3 | /** 4 | * 验证码错误异常类 5 | * 6 | * @author ruoyi 7 | */ 8 | public class CaptchaException extends UserException 9 | { 10 | private static final long serialVersionUID = 1L; 11 | 12 | public CaptchaException() 13 | { 14 | super("user.jcaptcha.error", null); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/OperatorType.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.framework.aspectj.lang.enums; 2 | 3 | /** 4 | * 操作人类别 5 | * 6 | * @author ruoyi 7 | */ 8 | public enum OperatorType 9 | { 10 | /** 11 | * 其它 12 | */ 13 | OTHER, 14 | 15 | /** 16 | * 后台用户 17 | */ 18 | MANAGE, 19 | 20 | /** 21 | * 手机端用户 22 | */ 23 | MOBILE 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-ui/src/components/RuoYi/Doc/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /ruoyi-ui/src/components/RuoYi/Git/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /ruoyi-ui/src/directive/permission/index.js: -------------------------------------------------------------------------------- 1 | import hasRole from './hasRole' 2 | import hasPermi from './hasPermi' 3 | 4 | const install = function(Vue) { 5 | Vue.directive('hasRole', hasRole) 6 | Vue.directive('hasPermi', hasPermi) 7 | } 8 | 9 | if (window.Vue) { 10 | window['hasRole'] = hasRole 11 | window['hasPermi'] = hasPermi 12 | Vue.use(install); // eslint-disable-line 13 | } 14 | 15 | export default install 16 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception.user; 2 | 3 | /** 4 | * 验证码失效异常类 5 | * 6 | * @author ruoyi 7 | */ 8 | public class CaptchaExpireException extends UserException 9 | { 10 | private static final long serialVersionUID = 1L; 11 | 12 | public CaptchaExpireException() 13 | { 14 | super("user.jcaptcha.expire", null); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-ui/src/api/monitor/online.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询在线用户列表 4 | export function list(query) { 5 | return request({ 6 | url: '/monitor/online/list', 7 | method: 'get', 8 | params: query 9 | }) 10 | } 11 | 12 | // 强退用户 13 | export function forceLogout(userId, device) { 14 | return request({ 15 | url: '/monitor/online/' + userId + '/' + device, 16 | method: 'delete' 17 | }) 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/documentation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/.editorconfig: -------------------------------------------------------------------------------- 1 | # 告诉EditorConfig插件,这是根文件,不用继续往上查找 2 | root = true 3 | 4 | # 匹配全部文件 5 | [*] 6 | # 设置字符集 7 | charset = utf-8 8 | # 缩进风格,可选space、tab 9 | indent_style = space 10 | # 缩进的空格数 11 | indent_size = 2 12 | # 结尾换行符,可选lf、cr、crlf 13 | end_of_line = lf 14 | # 在文件结尾插入新行 15 | insert_final_newline = true 16 | # 删除一行中的前后空格 17 | trim_trailing_whitespace = true 18 | 19 | # 匹配md结尾的文件 20 | [*.md] 21 | insert_final_newline = false 22 | trim_trailing_whitespace = false 23 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception.user; 2 | 3 | /** 4 | * 用户密码不正确或不符合规范异常类 5 | * 6 | * @author ruoyi 7 | */ 8 | public class UserPasswordNotMatchException extends UserException 9 | { 10 | private static final long serialVersionUID = 1L; 11 | 12 | public UserPasswordNotMatchException() 13 | { 14 | super("user.password.not.match", null); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/excel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/user/UserException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception.user; 2 | 3 | import com.ruoyi.common.exception.BaseException; 4 | 5 | /** 6 | * 用户信息异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class UserException extends BaseException 11 | { 12 | private static final long serialVersionUID = 1L; 13 | 14 | public UserException(String code, Object[] args) 15 | { 16 | super("user", code, args, null); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/file/FileException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception.file; 2 | 3 | import com.ruoyi.common.exception.BaseException; 4 | 5 | /** 6 | * 文件信息异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class FileException extends BaseException 11 | { 12 | private static final long serialVersionUID = 1L; 13 | 14 | public FileException(String code, Object[] args) 15 | { 16 | super("file", code, args, null); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception.file; 2 | 3 | /** 4 | * 文件名大小限制异常类 5 | * 6 | * @author ruoyi 7 | */ 8 | public class FileSizeLimitExceededException extends FileException 9 | { 10 | private static final long serialVersionUID = 1L; 11 | 12 | public FileSizeLimitExceededException(long defaultMaxSize) 13 | { 14 | super("upload.exceed.maxSize", new Object[] { defaultMaxSize }); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excels.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.framework.aspectj.lang.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 | * Excel注解集 10 | * 11 | * @author ruoyi 12 | */ 13 | @Target(ElementType.FIELD) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | public @interface Excels 16 | { 17 | Excel[] value(); 18 | } -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/example.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/utils/job/QuartzJobExecution.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.utils.job; 2 | 3 | import org.quartz.JobExecutionContext; 4 | import com.ruoyi.project.monitor.domain.SysJob; 5 | 6 | /** 7 | * 定时任务处理(允许并发执行) 8 | * 9 | * @author ruoyi 10 | * 11 | */ 12 | public class QuartzJobExecution extends AbstractQuartzJob 13 | { 14 | @Override 15 | protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception 16 | { 17 | JobInvokeUtil.invokeMethod(sysJob); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception.file; 2 | 3 | /** 4 | * 文件名称超长限制异常类 5 | * 6 | * @author ruoyi 7 | */ 8 | public class FileNameLengthLimitExceededException extends FileException 9 | { 10 | private static final long serialVersionUID = 1L; 11 | 12 | public FileNameLengthLimitExceededException(int defaultFileNameLength) 13 | { 14 | super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-ui/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import app from './modules/app' 4 | import user from './modules/user' 5 | import tagsView from './modules/tagsView' 6 | import permission from './modules/permission' 7 | import settings from './modules/settings' 8 | import getters from './getters' 9 | 10 | Vue.use(Vuex) 11 | 12 | const store = new Vuex.Store({ 13 | modules: { 14 | app, 15 | user, 16 | tagsView, 17 | permission, 18 | settings 19 | }, 20 | getters 21 | }) 22 | 23 | export default store 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # maven ignore 2 | target/ 3 | *.class 4 | *.jar 5 | *.war 6 | *.zip 7 | *.tar 8 | *.tar.gz 9 | dependency-reduced-pom.xml 10 | 11 | # maven plugin ignore 12 | release.properties 13 | cobertura.ser 14 | *.gpg 15 | 16 | # eclipse ignore 17 | .settings/ 18 | .project 19 | .classpath 20 | 21 | # idea ignore 22 | .idea/ 23 | *.ipr 24 | *.iml 25 | *.iws 26 | 27 | # temp ignore 28 | logs/ 29 | *.log 30 | *.doc 31 | *.cache 32 | *.diff 33 | *.patch 34 | *.tmp 35 | 36 | # system ignore 37 | .DS_Store 38 | Thumbs.db 39 | 40 | # agent build ignore 41 | /agent/ 42 | 43 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/utils/KeyUtils.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.utils; 2 | 3 | 4 | import java.util.Random; 5 | 6 | public class KeyUtils { 7 | 8 | 9 | /** 10 | * 主键生成,雪花ID 11 | * 12 | * @return String 13 | */ 14 | public static synchronized String genUniqueKey() { 15 | return IdUtils.snowflakeId().toString(); 16 | } 17 | 18 | 19 | public static synchronized Integer genComCode() { 20 | Random random = new Random(); 21 | return random.nextInt(90000) + 10000; 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/slider.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/utils/generator/css.js: -------------------------------------------------------------------------------- 1 | const styles = { 2 | 'el-rate': '.el-rate{display: inline-block; vertical-align: text-top;}', 3 | 'el-upload': '.el-upload__tip{line-height: 1.2;}' 4 | } 5 | 6 | function addCss(cssList, el) { 7 | const css = styles[el.tag] 8 | css && cssList.indexOf(css) === -1 && cssList.push(css) 9 | if (el.children) { 10 | el.children.forEach(el2 => addCss(cssList, el2)) 11 | } 12 | } 13 | 14 | export function makeUpCss(conf) { 15 | const cssList = [] 16 | conf.fields.forEach(el => addCss(cssList, el)) 17 | return cssList.join('\n') 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/RuoYiServletInitializer.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 5 | 6 | /** 7 | * web容器中进行部署 8 | * 9 | * @author ruoyi 10 | */ 11 | public class RuoYiServletInitializer extends SpringBootServletInitializer 12 | { 13 | @Override 14 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 15 | { 16 | return application.sources(RuoYiApplication.class); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-ui/src/store/getters.js: -------------------------------------------------------------------------------- 1 | const getters = { 2 | sidebar: state => state.app.sidebar, 3 | size: state => state.app.size, 4 | device: state => state.app.device, 5 | visitedViews: state => state.tagsView.visitedViews, 6 | cachedViews: state => state.tagsView.cachedViews, 7 | avatar: state => state.user.avatar, 8 | name: state => state.user.name, 9 | introduction: state => state.user.introduction, 10 | roles: state => state.user.roles, 11 | permissions: state => state.user.permissions, 12 | permission_routes: state => state.permission.routes 13 | } 14 | export default getters 15 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/enums/UserStatus.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.enums; 2 | 3 | /** 4 | * 用户状态 5 | * 6 | * @author ruoyi 7 | */ 8 | public enum UserStatus 9 | { 10 | OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); 11 | 12 | private final String code; 13 | private final String info; 14 | 15 | UserStatus(String code, String info) 16 | { 17 | this.code = code; 18 | this.info = info; 19 | } 20 | 21 | public String getCode() 22 | { 23 | return code; 24 | } 25 | 26 | public String getInfo() 27 | { 28 | return info; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/framework/interceptor/annotation/RepeatSubmit.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.framework.interceptor.annotation; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Inherited; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | /** 11 | * 自定义注解防止表单重复提交 12 | * 13 | * @author ruoyi 14 | * 15 | */ 16 | @Inherited 17 | @Target(ElementType.METHOD) 18 | @Retention(RetentionPolicy.RUNTIME) 19 | @Documented 20 | public @interface RepeatSubmit 21 | { 22 | 23 | } -------------------------------------------------------------------------------- /ruoyi-ui/src/layout/components/Sidebar/Item.vue: -------------------------------------------------------------------------------- 1 | 30 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/project/business/job/RedisConnRefreshJob.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.project.business.job; 2 | 3 | import com.ruoyi.framework.redis.RedisCache; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component("RedisConnRefreshJob") 8 | public class RedisConnRefreshJob { 9 | 10 | @Autowired 11 | private RedisCache redisCache; 12 | 13 | /** 14 | * 刷新redis连接 15 | * 16 | * @throws Exception 17 | */ 18 | public void doExecute() throws Exception { 19 | redisCache.getCacheMap("1"); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/education.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/exception/UtilException.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.exception; 2 | 3 | /** 4 | * 工具类异常 5 | * 6 | * @author ruoyi 7 | */ 8 | public class UtilException extends RuntimeException 9 | { 10 | private static final long serialVersionUID = 8247610319171014183L; 11 | 12 | public UtilException(Throwable e) 13 | { 14 | super(e.getMessage(), e); 15 | } 16 | 17 | public UtilException(String message) 18 | { 19 | super(message); 20 | } 21 | 22 | public UtilException(String message, Throwable throwable) 23 | { 24 | super(message, throwable); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/utils/job/QuartzDisallowConcurrentExecution.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.utils.job; 2 | 3 | import org.quartz.DisallowConcurrentExecution; 4 | import org.quartz.JobExecutionContext; 5 | import com.ruoyi.project.monitor.domain.SysJob; 6 | 7 | /** 8 | * 定时任务处理(禁止并发执行) 9 | * 10 | * @author ruoyi 11 | * 12 | */ 13 | @DisallowConcurrentExecution 14 | public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob 15 | { 16 | @Override 17 | protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception 18 | { 19 | JobInvokeUtil.invokeMethod(sysJob); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/utils/base.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | install(Vue) { 4 | 5 | // 全局域名 6 | // Vue.prototype.domainSite = 'http://127.0.0.1/dev-api' 7 | Vue.prototype.domainSite = 'https://www.njntyl.com/prod-api' 8 | 9 | /** 10 | * 根据url参数名取参数值 11 | * 12 | * @param name 13 | * @returns {string} 14 | */ 15 | Vue.prototype.getQueryString = function(name) { 16 | const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 17 | const r = window.location.search.substr(1).match(reg); 18 | if (r != null) { 19 | return unescape(r[2]); 20 | } 21 | return ""; 22 | }; 23 | 24 | } 25 | }; 26 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/utils/idworker/AbstractClock.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.utils.idworker; 2 | 3 | /** 4 | * 时钟抽象类. 5 | * @author will 6 | */ 7 | public abstract class AbstractClock { 8 | 9 | /** 10 | * 创建系统时钟. 11 | * 12 | * @return 系统时钟 13 | */ 14 | public static AbstractClock systemClock() { 15 | return new SystemClock(); 16 | } 17 | 18 | /** 19 | * 返回从纪元开始的毫秒数. 20 | * 21 | * @return 从纪元开始的毫秒数 22 | */ 23 | public abstract long millis(); 24 | 25 | private static final class SystemClock extends AbstractClock { 26 | 27 | @Override 28 | public long millis() { 29 | return System.currentTimeMillis(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/RuoYiApplication.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 6 | 7 | /** 8 | * 启动程序 9 | * 10 | * @author ruoyi 11 | */ 12 | @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) 13 | public class RuoYiApplication 14 | { 15 | public static void main(String[] args) 16 | { 17 | SpringApplication.run(RuoYiApplication.class, args); 18 | System.out.println("(♥◠‿◠)ノ゙ 启动成功,Thanks for RuoYi ლ(´ڡ`ლ)゙ "); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/message.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/settings.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | title: 'Multi-tenant', 3 | 4 | /** 5 | * 是否系统布局配置 6 | */ 7 | showSettings: false, 8 | 9 | /** 10 | * 是否显示 tagsView 11 | */ 12 | tagsView: true, 13 | 14 | /** 15 | * 是否固定头部 16 | */ 17 | fixedHeader: false, 18 | 19 | /** 20 | * 是否显示logo 21 | */ 22 | sidebarLogo: true, 23 | 24 | /** 25 | * @type {string | array} 'production' | ['production', 'development'] 26 | * @description Need show err logs component. 27 | * The default is only used in the production env 28 | * If you want to also use it in dev, you can pass ['production', 'development'] 29 | */ 30 | errorLog: 'production' 31 | } 32 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/switch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/theme.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js: -------------------------------------------------------------------------------- 1 | export default { 2 | computed: { 3 | device() { 4 | return this.$store.state.app.device 5 | } 6 | }, 7 | mounted() { 8 | // In order to fix the click on menu on the ios device will trigger the mouseleave bug 9 | this.fixBugIniOS() 10 | }, 11 | methods: { 12 | fixBugIniOS() { 13 | const $subMenu = this.$refs.subMenu 14 | if ($subMenu) { 15 | const handleMouseleave = $subMenu.handleMouseleave 16 | $subMenu.handleMouseleave = (e) => { 17 | if (this.device === 'mobile') { 18 | return 19 | } 20 | handleMouseleave(e) 21 | } 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi/src/main/resources/mybatis/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/druid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/common/enums/BillType.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.common.enums; 2 | 3 | /** 4 | * 单据类型 5 | */ 6 | public enum BillType { 7 | 8 | WXGD("GD", "维修工单"), 9 | SBBH("BH", "设备编号"); 10 | 11 | private String code; 12 | 13 | private String desc; 14 | 15 | BillType(String code, String desc) { 16 | this.code = code; 17 | this.desc = desc; 18 | } 19 | 20 | public String getCode() { 21 | return code; 22 | } 23 | 24 | public void setCode(String code) { 25 | this.code = code; 26 | } 27 | 28 | public String getDesc() { 29 | return desc; 30 | } 31 | 32 | public void setDesc(String desc) { 33 | this.desc = desc; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/peoples.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/utils/generator/drawingDefalut.js: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | layout: 'colFormItem', 4 | tagIcon: 'input', 5 | label: '手机号', 6 | vModel: 'mobile', 7 | formId: 6, 8 | tag: 'el-input', 9 | placeholder: '请输入手机号', 10 | defaultValue: '', 11 | span: 24, 12 | style: { width: '100%' }, 13 | clearable: true, 14 | prepend: '', 15 | append: '', 16 | 'prefix-icon': 'el-icon-mobile', 17 | 'suffix-icon': '', 18 | maxlength: 11, 19 | 'show-word-limit': true, 20 | readonly: false, 21 | disabled: false, 22 | required: true, 23 | changeTag: true, 24 | regList: [{ 25 | pattern: '/^1(3|4|5|7|8|9)\\d{9}$/', 26 | message: '手机号格式错误' 27 | }] 28 | } 29 | ] 30 | -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataScope.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.framework.aspectj.lang.annotation; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * 数据权限过滤注解 11 | * 12 | * @author ruoyi 13 | */ 14 | @Target(ElementType.METHOD) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Documented 17 | public @interface DataScope 18 | { 19 | /** 20 | * 部门表的别名 21 | */ 22 | public String deptAlias() default ""; 23 | 24 | /** 25 | * 用户表的别名 26 | */ 27 | public String userAlias() default ""; 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/input.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/directive/permission/hasRole.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 角色权限处理 3 | * Copyright (c) 2019 ruoyi 4 | */ 5 | 6 | import store from '@/store' 7 | 8 | export default { 9 | inserted(el, binding, vnode) { 10 | const { value } = binding 11 | const super_admin = "admin"; 12 | const roles = store.getters && store.getters.roles 13 | 14 | if (value && value instanceof Array && value.length > 0) { 15 | const roleFlag = value 16 | 17 | const hasRole = roles.some(role => { 18 | return super_admin === role || roleFlag.includes(role) 19 | }) 20 | 21 | if (!hasRole) { 22 | el.parentNode && el.parentNode.removeChild(el) 23 | } 24 | } else { 25 | throw new Error(`请设置角色权限标签值"`) 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-ui/src/api/monitor/operlog.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询操作日志列表 4 | export function list(query) { 5 | return request({ 6 | url: '/monitor/operlog/list', 7 | method: 'get', 8 | params: query 9 | }) 10 | } 11 | 12 | // 删除操作日志 13 | export function delOperlog(operId) { 14 | return request({ 15 | url: '/monitor/operlog/' + operId, 16 | method: 'delete' 17 | }) 18 | } 19 | 20 | // 清空操作日志 21 | export function cleanOperlog() { 22 | return request({ 23 | url: '/monitor/operlog/clean', 24 | method: 'delete' 25 | }) 26 | } 27 | 28 | // 导出操作日志 29 | export function exportOperlog(query) { 30 | return request({ 31 | url: '/monitor/operlog/export', 32 | method: 'get', 33 | params: query 34 | }) 35 | } -------------------------------------------------------------------------------- /ruoyi/src/main/java/com/ruoyi/framework/task/RyTask.java: -------------------------------------------------------------------------------- 1 | package com.ruoyi.framework.task; 2 | 3 | import org.springframework.stereotype.Component; 4 | import com.ruoyi.common.utils.StringUtils; 5 | 6 | /** 7 | * 定时任务调度测试 8 | * 9 | * @author ruoyi 10 | */ 11 | @Component("ryTask") 12 | public class RyTask 13 | { 14 | public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) 15 | { 16 | System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); 17 | } 18 | 19 | public void ryParams(String params) 20 | { 21 | System.out.println("执行有参方法:" + params); 22 | } 23 | 24 | public void ryNoParams() 25 | { 26 | System.out.println("执行无参方法"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-ui/src/api/monitor/jobLog.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询调度日志列表 4 | export function listJobLog(query) { 5 | return request({ 6 | url: '/monitor/jobLog/list', 7 | method: 'get', 8 | params: query 9 | }) 10 | } 11 | 12 | // 删除调度日志 13 | export function delJobLog(jobLogId) { 14 | return request({ 15 | url: '/monitor/jobLog/' + jobLogId, 16 | method: 'delete' 17 | }) 18 | } 19 | 20 | // 清空调度日志 21 | export function cleanJobLog() { 22 | return request({ 23 | url: '/monitor/jobLog/clean', 24 | method: 'delete' 25 | }) 26 | } 27 | 28 | // 导出调度日志 29 | export function exportJobLog(query) { 30 | return request({ 31 | url: '/monitor/jobLog/export', 32 | method: 'get', 33 | params: query 34 | }) 35 | } -------------------------------------------------------------------------------- /ruoyi-ui/src/assets/icons/svg/server.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruoyi-ui/src/api/monitor/logininfor.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 查询登录日志列表 4 | export function list(query) { 5 | return request({ 6 | url: '/monitor/logininfor/list', 7 | method: 'get', 8 | params: query 9 | }) 10 | } 11 | 12 | // 删除登录日志 13 | export function delLogininfor(infoId) { 14 | return request({ 15 | url: '/monitor/logininfor/' + infoId, 16 | method: 'delete' 17 | }) 18 | } 19 | 20 | // 清空登录日志 21 | export function cleanLogininfor() { 22 | return request({ 23 | url: '/monitor/logininfor/clean', 24 | method: 'delete' 25 | }) 26 | } 27 | 28 | // 导出登录日志 29 | export function exportLogininfor(query) { 30 | return request({ 31 | url: '/monitor/logininfor/export', 32 | method: 'get', 33 | params: query 34 | }) 35 | } -------------------------------------------------------------------------------- /ruoyi-ui/src/views/tool/swagger/index.vue: -------------------------------------------------------------------------------- 1 |