├── 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 |
2 |
3 |
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 |
2 |
3 |
4 |
5 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/components/RuoYi/Git/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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 |
2 |
3 |
4 |
5 |
6 |
27 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/assets/icons/svg/textarea.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/views/monitor/druid/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
27 |
--------------------------------------------------------------------------------
/ruoyi/src/main/java/com/ruoyi/common/utils/MessageUtils.java:
--------------------------------------------------------------------------------
1 | package com.ruoyi.common.utils;
2 |
3 | import org.springframework.context.MessageSource;
4 | import org.springframework.context.i18n.LocaleContextHolder;
5 | import com.ruoyi.common.utils.spring.SpringUtils;
6 |
7 | /**
8 | * 获取i18n资源文件
9 | *
10 | * @author ruoyi
11 | */
12 | public class MessageUtils
13 | {
14 | /**
15 | * 根据消息键和参数 获取消息 委托给spring messageSource
16 | *
17 | * @param code 消息键
18 | * @param args 参数
19 | * @return 获取国际化翻译值
20 | */
21 | public static String message(String code, Object... args)
22 | {
23 | MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
24 | return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/assets/icons/svg/time.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/assets/icons/svg/edit.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/directive/permission/hasPermi.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 all_permission = "*:*:*";
12 | const permissions = store.getters && store.getters.permissions
13 |
14 | if (value && value instanceof Array && value.length > 0) {
15 | const permissionFlag = value
16 |
17 | const hasPermissions = permissions.some(permission => {
18 | return all_permission === permission || permissionFlag.includes(permission)
19 | })
20 |
21 | if (!hasPermissions) {
22 | el.parentNode && el.parentNode.removeChild(el)
23 | }
24 | } else {
25 | throw new Error(`请设置操作权限标签值`)
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/store/modules/settings.js:
--------------------------------------------------------------------------------
1 | import variables from '@/assets/styles/element-variables.scss'
2 | import defaultSettings from '@/settings'
3 |
4 | const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings
5 |
6 | const state = {
7 | theme: variables.theme,
8 | showSettings: showSettings,
9 | tagsView: tagsView,
10 | fixedHeader: fixedHeader,
11 | sidebarLogo: sidebarLogo
12 | }
13 |
14 | const mutations = {
15 | CHANGE_SETTING: (state, { key, value }) => {
16 | if (state.hasOwnProperty(key)) {
17 | state[key] = value
18 | }
19 | }
20 | }
21 |
22 | const actions = {
23 | changeSetting({ commit }, data) {
24 | commit('CHANGE_SETTING', data)
25 | }
26 | }
27 |
28 | export default {
29 | namespaced: true,
30 | state,
31 | mutations,
32 | actions
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/assets/icons/svg/nested.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ruoyi-ui/src/api/login.js:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | // 登录方法
4 | export function login(comcode, username, password, code, uuid) {
5 | const data = {
6 | comcode: comcode,
7 | username: username,
8 | password: password,
9 | code: code,
10 | uuid: uuid,
11 | }
12 | return request({
13 | url: '/login',
14 | method: 'post',
15 | data: data
16 | })
17 | }
18 |
19 | // 获取用户详细信息
20 | export function getInfo() {
21 | return request({
22 | url: '/getInfo',
23 | method: 'get'
24 | })
25 | }
26 |
27 | // 退出方法
28 | export function logout() {
29 | return request({
30 | url: '/logout',
31 | method: 'post'
32 | })
33 | }
34 |
35 | // 获取验证码
36 | export function getCodeImg() {
37 | return request({
38 | url: '/captchaImage',
39 | method: 'get'
40 | })
41 | }
42 |
--------------------------------------------------------------------------------
/ruoyi/src/main/java/com/ruoyi/common/exception/job/TaskException.java:
--------------------------------------------------------------------------------
1 | package com.ruoyi.common.exception.job;
2 |
3 | /**
4 | * 计划策略异常
5 | *
6 | * @author ruoyi
7 | */
8 | public class TaskException extends Exception
9 | {
10 | private static final long serialVersionUID = 1L;
11 |
12 | private Code code;
13 |
14 | public TaskException(String msg, Code code)
15 | {
16 | this(msg, code, null);
17 | }
18 |
19 | public TaskException(String msg, Code code, Exception nestedEx)
20 | {
21 | super(msg, nestedEx);
22 | this.code = code;
23 | }
24 |
25 | public Code getCode()
26 | {
27 | return code;
28 | }
29 |
30 | public enum Code
31 | {
32 | TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
33 | }
34 | }
--------------------------------------------------------------------------------
/ruoyi/src/main/java/com/ruoyi/project/system/domain/SysTemplate.java:
--------------------------------------------------------------------------------
1 | package com.ruoyi.project.system.domain;
2 |
3 | import lombok.Data;
4 | import org.apache.commons.lang3.builder.ToStringBuilder;
5 | import org.apache.commons.lang3.builder.ToStringStyle;
6 | import com.ruoyi.framework.aspectj.lang.annotation.Excel;
7 | import com.ruoyi.framework.web.domain.BaseEntity;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * 权限模板对象 sys_template
13 | *
14 | * @author ruoyi
15 | * @date 2020-07-09
16 | */
17 | @Data
18 | public class SysTemplate extends BaseEntity
19 | {
20 | private static final long serialVersionUID = 1L;
21 |
22 | /** $column.columnComment */
23 | private String id;
24 |
25 | /** 模板名称 */
26 | @Excel(name = "模板名称")
27 | private String name;
28 |
29 | private List menuIds;
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/ruoyi/src/main/java/com/ruoyi/common/enums/SmsType.java:
--------------------------------------------------------------------------------
1 | package com.ruoyi.common.enums;
2 |
3 | /**
4 | * 工单短信类型
5 | */
6 | public enum SmsType {
7 |
8 | CREATE(1, "创建工单提醒"),
9 | ALLOCATION(2, "分配工单提醒"),
10 | FINISH(3, "完成工单提醒"),
11 | TIME_OUT(4, "工单超时提醒");
12 |
13 | // 类型
14 | private Integer smsType;
15 |
16 | private String desc;
17 |
18 | SmsType(Integer smsType, String desc) {
19 | this.smsType = smsType;
20 | this.desc = desc;
21 | }
22 |
23 | public Integer getSmsType() {
24 | return smsType;
25 | }
26 |
27 | public void setSmsType(Integer smsType) {
28 | this.smsType = smsType;
29 | }
30 |
31 | public String getDesc() {
32 | return desc;
33 | }
34 |
35 | public void setDesc(String desc) {
36 | this.desc = desc;
37 | }
38 | }
--------------------------------------------------------------------------------
/ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessType.java:
--------------------------------------------------------------------------------
1 | package com.ruoyi.framework.aspectj.lang.enums;
2 |
3 | /**
4 | * 业务操作类型
5 | *
6 | * @author ruoyi
7 | */
8 | public enum BusinessType
9 | {
10 | /**
11 | * 其它
12 | */
13 | OTHER,
14 |
15 | /**
16 | * 新增
17 | */
18 | INSERT,
19 |
20 | /**
21 | * 修改
22 | */
23 | UPDATE,
24 |
25 | /**
26 | * 删除
27 | */
28 | DELETE,
29 |
30 | /**
31 | * 授权
32 | */
33 | GRANT,
34 |
35 | /**
36 | * 导出
37 | */
38 | EXPORT,
39 |
40 | /**
41 | * 导入
42 | */
43 | IMPORT,
44 |
45 | /**
46 | * 强退
47 | */
48 | FORCE,
49 |
50 | /**
51 | * 生成代码
52 | */
53 | GENCODE,
54 |
55 | /**
56 | * 清空数据
57 | */
58 | CLEAN,
59 | }
60 |
--------------------------------------------------------------------------------
/ruoyi/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java:
--------------------------------------------------------------------------------
1 | package com.ruoyi.framework.datasource;
2 |
3 | import java.util.Map;
4 | import javax.sql.DataSource;
5 | import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
6 |
7 | /**
8 | * 动态数据源
9 | *
10 | * @author ruoyi
11 | */
12 | public class DynamicDataSource extends AbstractRoutingDataSource
13 | {
14 | public DynamicDataSource(DataSource defaultTargetDataSource, Map