Full Code of yangzongzhuan/RuoYi for AI

master 428043e83502 cached
574 files
5.4 MB
1.4M tokens
3531 symbols
1 requests
Download .txt
Showing preview only (5,777K chars total). Download the full file or copy to clipboard to get everything.
Repository: yangzongzhuan/RuoYi
Branch: master
Commit: 428043e83502
Files: 574
Total size: 5.4 MB

Directory structure:
gitextract_8cqv8t7r/

├── .github/
│   └── FUNDING.yml
├── .gitignore
├── LICENSE
├── README.md
├── bin/
│   ├── clean.bat
│   ├── package.bat
│   └── run.bat
├── doc/
│   └── 若依环境使用手册.docx
├── pom.xml
├── ruoyi-admin/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           ├── RuoYiApplication.java
│           │           ├── RuoYiServletInitializer.java
│           │           └── web/
│           │               ├── controller/
│           │               │   ├── common/
│           │               │   │   └── CommonController.java
│           │               │   ├── demo/
│           │               │   │   ├── controller/
│           │               │   │   │   ├── DemoDialogController.java
│           │               │   │   │   ├── DemoFormController.java
│           │               │   │   │   ├── DemoIconController.java
│           │               │   │   │   ├── DemoOperateController.java
│           │               │   │   │   ├── DemoReportController.java
│           │               │   │   │   └── DemoTableController.java
│           │               │   │   └── domain/
│           │               │   │       ├── CustomerModel.java
│           │               │   │       ├── GoodsModel.java
│           │               │   │       └── UserOperateModel.java
│           │               │   ├── monitor/
│           │               │   │   ├── CacheController.java
│           │               │   │   ├── DruidController.java
│           │               │   │   ├── ServerController.java
│           │               │   │   ├── SysLogininforController.java
│           │               │   │   ├── SysOperlogController.java
│           │               │   │   └── SysUserOnlineController.java
│           │               │   ├── system/
│           │               │   │   ├── SysCaptchaController.java
│           │               │   │   ├── SysConfigController.java
│           │               │   │   ├── SysDeptController.java
│           │               │   │   ├── SysDictDataController.java
│           │               │   │   ├── SysDictTypeController.java
│           │               │   │   ├── SysIndexController.java
│           │               │   │   ├── SysLoginController.java
│           │               │   │   ├── SysMenuController.java
│           │               │   │   ├── SysNoticeController.java
│           │               │   │   ├── SysPostController.java
│           │               │   │   ├── SysProfileController.java
│           │               │   │   ├── SysRegisterController.java
│           │               │   │   ├── SysRoleController.java
│           │               │   │   └── SysUserController.java
│           │               │   └── tool/
│           │               │       ├── BuildController.java
│           │               │       ├── SwaggerController.java
│           │               │       └── TestController.java
│           │               └── core/
│           │                   └── config/
│           │                       └── SwaggerConfig.java
│           └── resources/
│               ├── application-druid.yml
│               ├── application.yml
│               ├── banner.txt
│               ├── ehcache/
│               │   └── ehcache-shiro.xml
│               ├── logback.xml
│               ├── mybatis/
│               │   └── mybatis-config.xml
│               ├── static/
│               │   ├── ajax/
│               │   │   └── libs/
│               │   │       ├── beautifyhtml/
│               │   │       │   └── beautifyhtml.js
│               │   │       ├── blockUI/
│               │   │       │   └── jquery.blockUI.js
│               │   │       ├── bootstrap-fileinput/
│               │   │       │   ├── fileinput.css
│               │   │       │   └── fileinput.js
│               │   │       ├── bootstrap-select/
│               │   │       │   ├── bootstrap-select.css
│               │   │       │   └── bootstrap-select.js
│               │   │       ├── bootstrap-table/
│               │   │       │   ├── extensions/
│               │   │       │   │   ├── auto-refresh/
│               │   │       │   │   │   └── bootstrap-table-auto-refresh.js
│               │   │       │   │   ├── columns/
│               │   │       │   │   │   └── bootstrap-table-fixed-columns.js
│               │   │       │   │   ├── cookie/
│               │   │       │   │   │   └── bootstrap-table-cookie.js
│               │   │       │   │   ├── custom-view/
│               │   │       │   │   │   └── bootstrap-table-custom-view.js
│               │   │       │   │   ├── editable/
│               │   │       │   │   │   ├── bootstrap-editable.css
│               │   │       │   │   │   └── bootstrap-table-editable.js
│               │   │       │   │   ├── export/
│               │   │       │   │   │   └── bootstrap-table-export.js
│               │   │       │   │   ├── mobile/
│               │   │       │   │   │   └── bootstrap-table-mobile.js
│               │   │       │   │   ├── print/
│               │   │       │   │   │   └── bootstrap-table-print.js
│               │   │       │   │   ├── reorder-columns/
│               │   │       │   │   │   ├── bootstrap-table-reorder-columns.js
│               │   │       │   │   │   └── jquery.dragtable.js
│               │   │       │   │   ├── reorder-rows/
│               │   │       │   │   │   ├── bootstrap-table-reorder-rows.js
│               │   │       │   │   │   └── jquery.tablednd.js
│               │   │       │   │   ├── resizable/
│               │   │       │   │   │   └── bootstrap-table-resizable.js
│               │   │       │   │   └── tree/
│               │   │       │   │       └── bootstrap-table-tree.js
│               │   │       │   └── locale/
│               │   │       │       └── bootstrap-table-zh-CN.js
│               │   │       ├── cropper/
│               │   │       │   ├── cropper.css
│               │   │       │   └── cropper.js
│               │   │       ├── cxselect/
│               │   │       │   └── jquery.cxselect.js
│               │   │       ├── datapicker/
│               │   │       │   ├── bootstrap-datetimepicker.css
│               │   │       │   └── bootstrap-datetimepicker.js
│               │   │       ├── duallistbox/
│               │   │       │   ├── bootstrap-duallistbox.css
│               │   │       │   └── bootstrap-duallistbox.js
│               │   │       ├── flot/
│               │   │       │   ├── curvedLines.js
│               │   │       │   ├── jquery.flot.js
│               │   │       │   ├── jquery.flot.pie.js
│               │   │       │   ├── jquery.flot.resize.js
│               │   │       │   ├── jquery.flot.spline.js
│               │   │       │   └── jquery.flot.symbol.js
│               │   │       ├── fullscreen/
│               │   │       │   └── jquery.fullscreen.js
│               │   │       ├── iCheck/
│               │   │       │   └── custom.css
│               │   │       ├── jasny/
│               │   │       │   ├── jasny-bootstrap.css
│               │   │       │   └── jasny-bootstrap.js
│               │   │       ├── jquery-layout/
│               │   │       │   ├── jquery.layout-latest.css
│               │   │       │   └── jquery.layout-latest.js
│               │   │       ├── jquery-ztree/
│               │   │       │   └── 3.5/
│               │   │       │       ├── css/
│               │   │       │       │   ├── default/
│               │   │       │       │   │   └── zTreeStyle.css
│               │   │       │       │   ├── metro/
│               │   │       │       │   │   └── zTreeStyle.css
│               │   │       │       │   └── simple/
│               │   │       │       │       └── zTreeStyle.css
│               │   │       │       ├── js/
│               │   │       │       │   ├── jquery.ztree.all-3.5.js
│               │   │       │       │   ├── jquery.ztree.core-3.5.js
│               │   │       │       │   ├── jquery.ztree.excheck-3.5.js
│               │   │       │       │   ├── jquery.ztree.exedit-3.5.js
│               │   │       │       │   └── jquery.ztree.exhide-3.5.js
│               │   │       │       └── log v3.x.txt
│               │   │       ├── jsonview/
│               │   │       │   ├── jquery.jsonview.css
│               │   │       │   └── jquery.jsonview.js
│               │   │       ├── layer/
│               │   │       │   ├── css/
│               │   │       │   │   └── layer.css
│               │   │       │   └── theme/
│               │   │       │       └── moon/
│               │   │       │           └── style.css
│               │   │       ├── layui/
│               │   │       │   ├── css/
│               │   │       │   │   └── modules/
│               │   │       │   │       └── laydate.css
│               │   │       │   └── modules/
│               │   │       │       └── laydate.js
│               │   │       ├── select2/
│               │   │       │   ├── select2.css
│               │   │       │   └── select2.js
│               │   │       ├── suggest/
│               │   │       │   └── bootstrap-suggest.js
│               │   │       ├── summernote/
│               │   │       │   ├── summernote-zh-CN.js
│               │   │       │   ├── summernote.css
│               │   │       │   └── summernote.js
│               │   │       ├── typeahead/
│               │   │       │   └── bootstrap-typeahead.js
│               │   │       └── validate/
│               │   │           ├── jquery.validate.extend.js
│               │   │           └── messages_zh.js
│               │   ├── css/
│               │   │   ├── login.css
│               │   │   ├── skins.css
│               │   │   ├── style.css
│               │   │   └── zen-checkbox.css
│               │   ├── file/
│               │   │   └── rml.txt
│               │   ├── fonts/
│               │   │   └── FontAwesome.otf
│               │   ├── html/
│               │   │   └── ie.html
│               │   ├── i18n/
│               │   │   └── messages.properties
│               │   ├── js/
│               │   │   ├── cron.js
│               │   │   ├── jquery.tmpl.js
│               │   │   ├── plugins/
│               │   │   │   └── metisMenu/
│               │   │   │       └── jquery.metisMenu.js
│               │   │   └── resize-tabs.js
│               │   └── ruoyi/
│               │       ├── css/
│               │       │   └── ry-ui.css
│               │       ├── index.js
│               │       ├── js/
│               │       │   ├── common.js
│               │       │   └── ry-ui.js
│               │       ├── login.js
│               │       └── register.js
│               └── templates/
│                   ├── demo/
│                   │   ├── form/
│                   │   │   ├── autocomplete.html
│                   │   │   ├── basic.html
│                   │   │   ├── button.html
│                   │   │   ├── cards.html
│                   │   │   ├── cxselect.html
│                   │   │   ├── datetime.html
│                   │   │   ├── duallistbox.html
│                   │   │   ├── grid.html
│                   │   │   ├── invoice.html
│                   │   │   ├── jasny.html
│                   │   │   ├── labels_tips.html
│                   │   │   ├── localrefresh.html
│                   │   │   ├── progress_bars.html
│                   │   │   ├── select.html
│                   │   │   ├── sortable.html
│                   │   │   ├── summernote.html
│                   │   │   ├── tabs_panels.html
│                   │   │   ├── timeline.html
│                   │   │   ├── upload.html
│                   │   │   ├── validate.html
│                   │   │   └── wizard.html
│                   │   ├── icon/
│                   │   │   ├── fontawesome.html
│                   │   │   └── glyphicons.html
│                   │   ├── modal/
│                   │   │   ├── dialog.html
│                   │   │   ├── form.html
│                   │   │   ├── layer.html
│                   │   │   ├── table/
│                   │   │   │   ├── check.html
│                   │   │   │   ├── frame1.html
│                   │   │   │   ├── frame2.html
│                   │   │   │   ├── parent.html
│                   │   │   │   └── radio.html
│                   │   │   └── table.html
│                   │   ├── operate/
│                   │   │   ├── add.html
│                   │   │   ├── detail.html
│                   │   │   ├── edit.html
│                   │   │   ├── other.html
│                   │   │   └── table.html
│                   │   ├── report/
│                   │   │   ├── echarts.html
│                   │   │   ├── metrics.html
│                   │   │   ├── peity.html
│                   │   │   └── sparkline.html
│                   │   └── table/
│                   │       ├── asynTree.html
│                   │       ├── button.html
│                   │       ├── child.html
│                   │       ├── cookie.html
│                   │       ├── curd.html
│                   │       ├── customView.html
│                   │       ├── data.html
│                   │       ├── detail.html
│                   │       ├── dynamicColumns.html
│                   │       ├── editable.html
│                   │       ├── event.html
│                   │       ├── export.html
│                   │       ├── exportSelected.html
│                   │       ├── fixedColumns.html
│                   │       ├── footer.html
│                   │       ├── groupHeader.html
│                   │       ├── headerStyle.html
│                   │       ├── image.html
│                   │       ├── multi.html
│                   │       ├── other.html
│                   │       ├── pageGo.html
│                   │       ├── params.html
│                   │       ├── print.html
│                   │       ├── refresh.html
│                   │       ├── remember.html
│                   │       ├── reorderColumns.html
│                   │       ├── reorderRows.html
│                   │       ├── resizable.html
│                   │       ├── search.html
│                   │       ├── subdata.html
│                   │       ├── textSearch.html
│                   │       └── virtualScroll.html
│                   ├── error/
│                   │   ├── 404.html
│                   │   ├── 500.html
│                   │   ├── service.html
│                   │   └── unauth.html
│                   ├── include.html
│                   ├── index-topnav.html
│                   ├── index.html
│                   ├── lock.html
│                   ├── login.html
│                   ├── main.html
│                   ├── main_v1.html
│                   ├── monitor/
│                   │   ├── cache/
│                   │   │   └── cache.html
│                   │   ├── logininfor/
│                   │   │   └── logininfor.html
│                   │   ├── online/
│                   │   │   └── online.html
│                   │   ├── operlog/
│                   │   │   ├── detail.html
│                   │   │   └── operlog.html
│                   │   └── server/
│                   │       └── server.html
│                   ├── register.html
│                   ├── skin.html
│                   ├── system/
│                   │   ├── config/
│                   │   │   ├── add.html
│                   │   │   ├── config.html
│                   │   │   └── edit.html
│                   │   ├── dept/
│                   │   │   ├── add.html
│                   │   │   ├── dept.html
│                   │   │   ├── edit.html
│                   │   │   └── tree.html
│                   │   ├── dict/
│                   │   │   ├── data/
│                   │   │   │   ├── add.html
│                   │   │   │   ├── data.html
│                   │   │   │   └── edit.html
│                   │   │   └── type/
│                   │   │       ├── add.html
│                   │   │       ├── edit.html
│                   │   │       ├── tree.html
│                   │   │       └── type.html
│                   │   ├── menu/
│                   │   │   ├── add.html
│                   │   │   ├── edit.html
│                   │   │   ├── icon.html
│                   │   │   ├── menu.html
│                   │   │   └── tree.html
│                   │   ├── notice/
│                   │   │   ├── add.html
│                   │   │   ├── edit.html
│                   │   │   ├── notice.html
│                   │   │   └── view.html
│                   │   ├── post/
│                   │   │   ├── add.html
│                   │   │   ├── edit.html
│                   │   │   └── post.html
│                   │   ├── role/
│                   │   │   ├── add.html
│                   │   │   ├── authUser.html
│                   │   │   ├── dataScope.html
│                   │   │   ├── edit.html
│                   │   │   ├── role.html
│                   │   │   ├── selectUser.html
│                   │   │   └── view.html
│                   │   └── user/
│                   │       ├── add.html
│                   │       ├── authRole.html
│                   │       ├── deptTree.html
│                   │       ├── edit.html
│                   │       ├── profile/
│                   │       │   ├── avatar.html
│                   │       │   ├── profile.html
│                   │       │   └── resetPwd.html
│                   │       ├── resetPwd.html
│                   │       ├── user.html
│                   │       └── view.html
│                   └── tool/
│                       └── build/
│                           └── build.html
├── ruoyi-common/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── ruoyi/
│                       └── common/
│                           ├── annotation/
│                           │   ├── Anonymous.java
│                           │   ├── DataScope.java
│                           │   ├── DataSource.java
│                           │   ├── Excel.java
│                           │   ├── Excels.java
│                           │   ├── Log.java
│                           │   ├── RepeatSubmit.java
│                           │   └── Sensitive.java
│                           ├── config/
│                           │   ├── RuoYiConfig.java
│                           │   ├── ServerConfig.java
│                           │   ├── datasource/
│                           │   │   └── DynamicDataSourceContextHolder.java
│                           │   ├── serializer/
│                           │   │   └── SensitiveJsonSerializer.java
│                           │   └── thread/
│                           │       └── ThreadPoolConfig.java
│                           ├── constant/
│                           │   ├── Constants.java
│                           │   ├── GenConstants.java
│                           │   ├── PermissionConstants.java
│                           │   ├── ScheduleConstants.java
│                           │   ├── ShiroConstants.java
│                           │   └── UserConstants.java
│                           ├── core/
│                           │   ├── context/
│                           │   │   └── PermissionContextHolder.java
│                           │   ├── controller/
│                           │   │   └── BaseController.java
│                           │   ├── domain/
│                           │   │   ├── AjaxResult.java
│                           │   │   ├── BaseEntity.java
│                           │   │   ├── CxSelect.java
│                           │   │   ├── R.java
│                           │   │   ├── TreeEntity.java
│                           │   │   ├── Ztree.java
│                           │   │   └── entity/
│                           │   │       ├── SysDept.java
│                           │   │       ├── SysDictData.java
│                           │   │       ├── SysDictType.java
│                           │   │       ├── SysMenu.java
│                           │   │       ├── SysRole.java
│                           │   │       └── SysUser.java
│                           │   ├── page/
│                           │   │   ├── PageDomain.java
│                           │   │   ├── TableDataInfo.java
│                           │   │   └── TableSupport.java
│                           │   ├── session/
│                           │   │   └── OnlineSession.java
│                           │   └── text/
│                           │       ├── CharsetKit.java
│                           │       ├── Convert.java
│                           │       └── StrFormatter.java
│                           ├── enums/
│                           │   ├── BusinessStatus.java
│                           │   ├── BusinessType.java
│                           │   ├── DataSourceType.java
│                           │   ├── DesensitizedType.java
│                           │   ├── OnlineStatus.java
│                           │   ├── OperatorType.java
│                           │   └── UserStatus.java
│                           ├── exception/
│                           │   ├── DemoModeException.java
│                           │   ├── GlobalException.java
│                           │   ├── ServiceException.java
│                           │   ├── UtilException.java
│                           │   ├── base/
│                           │   │   └── BaseException.java
│                           │   ├── file/
│                           │   │   ├── FileException.java
│                           │   │   ├── FileNameLengthLimitExceededException.java
│                           │   │   ├── FileSizeLimitExceededException.java
│                           │   │   ├── FileUploadException.java
│                           │   │   └── InvalidExtensionException.java
│                           │   ├── job/
│                           │   │   └── TaskException.java
│                           │   └── user/
│                           │       ├── BlackListException.java
│                           │       ├── CaptchaException.java
│                           │       ├── RoleBlockedException.java
│                           │       ├── UserBlockedException.java
│                           │       ├── UserDeleteException.java
│                           │       ├── UserException.java
│                           │       ├── UserNotExistsException.java
│                           │       ├── UserPasswordNotMatchException.java
│                           │       ├── UserPasswordRetryLimitCountException.java
│                           │       └── UserPasswordRetryLimitExceedException.java
│                           ├── json/
│                           │   ├── JSON.java
│                           │   └── JSONObject.java
│                           ├── utils/
│                           │   ├── AddressUtils.java
│                           │   ├── Arith.java
│                           │   ├── CacheUtils.java
│                           │   ├── CookieUtils.java
│                           │   ├── DateUtils.java
│                           │   ├── DesensitizedUtil.java
│                           │   ├── DictUtils.java
│                           │   ├── ExceptionUtil.java
│                           │   ├── IpUtils.java
│                           │   ├── LogUtils.java
│                           │   ├── MapDataUtil.java
│                           │   ├── MessageUtils.java
│                           │   ├── PageUtils.java
│                           │   ├── ServletUtils.java
│                           │   ├── ShiroUtils.java
│                           │   ├── StringUtils.java
│                           │   ├── Threads.java
│                           │   ├── bean/
│                           │   │   ├── BeanUtils.java
│                           │   │   └── BeanValidators.java
│                           │   ├── file/
│                           │   │   ├── FileTypeUtils.java
│                           │   │   ├── FileUploadUtils.java
│                           │   │   ├── FileUtils.java
│                           │   │   ├── ImageUtils.java
│                           │   │   └── MimeTypeUtils.java
│                           │   ├── html/
│                           │   │   ├── EscapeUtil.java
│                           │   │   └── HTMLFilter.java
│                           │   ├── http/
│                           │   │   ├── HttpUtils.java
│                           │   │   └── UserAgentUtils.java
│                           │   ├── poi/
│                           │   │   ├── ExcelHandlerAdapter.java
│                           │   │   └── ExcelUtil.java
│                           │   ├── reflect/
│                           │   │   └── ReflectUtils.java
│                           │   ├── security/
│                           │   │   ├── CipherUtils.java
│                           │   │   ├── Md5Utils.java
│                           │   │   └── PermissionUtils.java
│                           │   ├── spring/
│                           │   │   └── SpringUtils.java
│                           │   ├── sql/
│                           │   │   └── SqlUtil.java
│                           │   └── uuid/
│                           │       ├── IdUtils.java
│                           │       ├── Seq.java
│                           │       └── UUID.java
│                           └── xss/
│                               ├── Xss.java
│                               ├── XssFilter.java
│                               ├── XssHttpServletRequestWrapper.java
│                               └── XssValidator.java
├── ruoyi-framework/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── ruoyi/
│                       └── framework/
│                           ├── aspectj/
│                           │   ├── DataScopeAspect.java
│                           │   ├── DataSourceAspect.java
│                           │   ├── LogAspect.java
│                           │   └── PermissionsAspect.java
│                           ├── config/
│                           │   ├── ApplicationConfig.java
│                           │   ├── CaptchaConfig.java
│                           │   ├── DruidConfig.java
│                           │   ├── FilterConfig.java
│                           │   ├── I18nConfig.java
│                           │   ├── KaptchaTextCreator.java
│                           │   ├── MyBatisConfig.java
│                           │   ├── ResourcesConfig.java
│                           │   ├── ShiroConfig.java
│                           │   └── properties/
│                           │       └── DruidProperties.java
│                           ├── datasource/
│                           │   └── DynamicDataSource.java
│                           ├── interceptor/
│                           │   ├── RepeatSubmitInterceptor.java
│                           │   └── impl/
│                           │       └── SameUrlDataInterceptor.java
│                           ├── manager/
│                           │   ├── AsyncManager.java
│                           │   ├── ShutdownManager.java
│                           │   └── factory/
│                           │       └── AsyncFactory.java
│                           ├── shiro/
│                           │   ├── realm/
│                           │   │   └── UserRealm.java
│                           │   ├── rememberMe/
│                           │   │   └── CustomCookieRememberMeManager.java
│                           │   ├── service/
│                           │   │   ├── SysLoginService.java
│                           │   │   ├── SysPasswordService.java
│                           │   │   ├── SysRegisterService.java
│                           │   │   └── SysShiroService.java
│                           │   ├── session/
│                           │   │   ├── OnlineSessionDAO.java
│                           │   │   └── OnlineSessionFactory.java
│                           │   ├── util/
│                           │   │   └── AuthorizationUtils.java
│                           │   └── web/
│                           │       ├── CustomShiroFilterFactoryBean.java
│                           │       ├── filter/
│                           │       │   ├── LogoutFilter.java
│                           │       │   ├── captcha/
│                           │       │   │   └── CaptchaValidateFilter.java
│                           │       │   ├── csrf/
│                           │       │   │   └── CsrfValidateFilter.java
│                           │       │   ├── kickout/
│                           │       │   │   └── KickoutSessionFilter.java
│                           │       │   ├── online/
│                           │       │   │   └── OnlineSessionFilter.java
│                           │       │   └── sync/
│                           │       │       └── SyncOnlineSessionFilter.java
│                           │       └── session/
│                           │           ├── OnlineWebSessionManager.java
│                           │           └── SpringSessionValidationScheduler.java
│                           └── web/
│                               ├── domain/
│                               │   ├── Server.java
│                               │   └── server/
│                               │       ├── Cpu.java
│                               │       ├── Jvm.java
│                               │       ├── Mem.java
│                               │       ├── Sys.java
│                               │       └── SysFile.java
│                               ├── exception/
│                               │   └── GlobalExceptionHandler.java
│                               └── service/
│                                   ├── CacheService.java
│                                   ├── ConfigService.java
│                                   ├── DictService.java
│                                   └── PermissionService.java
├── ruoyi-generator/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           └── generator/
│           │               ├── config/
│           │               │   └── GenConfig.java
│           │               ├── controller/
│           │               │   └── GenController.java
│           │               ├── domain/
│           │               │   ├── GenTable.java
│           │               │   └── GenTableColumn.java
│           │               ├── mapper/
│           │               │   ├── GenTableColumnMapper.java
│           │               │   └── GenTableMapper.java
│           │               ├── service/
│           │               │   ├── IGenTableColumnService.java
│           │               │   ├── IGenTableService.java
│           │               │   └── impl/
│           │               │       ├── GenTableColumnServiceImpl.java
│           │               │       └── GenTableServiceImpl.java
│           │               └── util/
│           │                   ├── GenUtils.java
│           │                   ├── VelocityInitializer.java
│           │                   └── VelocityUtils.java
│           └── resources/
│               ├── generator.yml
│               ├── mapper/
│               │   └── generator/
│               │       ├── GenTableColumnMapper.xml
│               │       └── GenTableMapper.xml
│               ├── templates/
│               │   └── tool/
│               │       └── gen/
│               │           ├── createTable.html
│               │           ├── edit.html
│               │           ├── gen.html
│               │           └── importTable.html
│               └── vm/
│                   ├── html/
│                   │   ├── add.html.vm
│                   │   ├── edit.html.vm
│                   │   ├── list-tree.html.vm
│                   │   ├── list.html.vm
│                   │   └── tree.html.vm
│                   ├── java/
│                   │   ├── controller.java.vm
│                   │   ├── domain.java.vm
│                   │   ├── mapper.java.vm
│                   │   ├── service.java.vm
│                   │   ├── serviceImpl.java.vm
│                   │   └── sub-domain.java.vm
│                   ├── sql/
│                   │   └── sql.vm
│                   └── xml/
│                       └── mapper.xml.vm
├── ruoyi-quartz/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           └── quartz/
│           │               ├── config/
│           │               │   └── ScheduleConfig.java
│           │               ├── controller/
│           │               │   ├── SysJobController.java
│           │               │   └── SysJobLogController.java
│           │               ├── domain/
│           │               │   ├── SysJob.java
│           │               │   └── SysJobLog.java
│           │               ├── mapper/
│           │               │   ├── SysJobLogMapper.java
│           │               │   └── SysJobMapper.java
│           │               ├── service/
│           │               │   ├── ISysJobLogService.java
│           │               │   ├── ISysJobService.java
│           │               │   └── impl/
│           │               │       ├── SysJobLogServiceImpl.java
│           │               │       └── SysJobServiceImpl.java
│           │               ├── task/
│           │               │   └── RyTask.java
│           │               └── util/
│           │                   ├── AbstractQuartzJob.java
│           │                   ├── CronUtils.java
│           │                   ├── JobInvokeUtil.java
│           │                   ├── QuartzDisallowConcurrentExecution.java
│           │                   ├── QuartzJobExecution.java
│           │                   └── ScheduleUtils.java
│           └── resources/
│               ├── mapper/
│               │   └── quartz/
│               │       ├── SysJobLogMapper.xml
│               │       └── SysJobMapper.xml
│               └── templates/
│                   └── monitor/
│                       └── job/
│                           ├── add.html
│                           ├── cron.html
│                           ├── detail.html
│                           ├── edit.html
│                           ├── job.html
│                           └── jobLog.html
├── ruoyi-system/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           └── system/
│           │               ├── domain/
│           │               │   ├── SysConfig.java
│           │               │   ├── SysLogininfor.java
│           │               │   ├── SysNotice.java
│           │               │   ├── SysNoticeRead.java
│           │               │   ├── SysOperLog.java
│           │               │   ├── SysPost.java
│           │               │   ├── SysRoleDept.java
│           │               │   ├── SysRoleMenu.java
│           │               │   ├── SysUserOnline.java
│           │               │   ├── SysUserPost.java
│           │               │   └── SysUserRole.java
│           │               ├── mapper/
│           │               │   ├── SysConfigMapper.java
│           │               │   ├── SysDeptMapper.java
│           │               │   ├── SysDictDataMapper.java
│           │               │   ├── SysDictTypeMapper.java
│           │               │   ├── SysLogininforMapper.java
│           │               │   ├── SysMenuMapper.java
│           │               │   ├── SysNoticeMapper.java
│           │               │   ├── SysNoticeReadMapper.java
│           │               │   ├── SysOperLogMapper.java
│           │               │   ├── SysPostMapper.java
│           │               │   ├── SysRoleDeptMapper.java
│           │               │   ├── SysRoleMapper.java
│           │               │   ├── SysRoleMenuMapper.java
│           │               │   ├── SysUserMapper.java
│           │               │   ├── SysUserOnlineMapper.java
│           │               │   ├── SysUserPostMapper.java
│           │               │   └── SysUserRoleMapper.java
│           │               └── service/
│           │                   ├── ISysConfigService.java
│           │                   ├── ISysDeptService.java
│           │                   ├── ISysDictDataService.java
│           │                   ├── ISysDictTypeService.java
│           │                   ├── ISysLogininforService.java
│           │                   ├── ISysMenuService.java
│           │                   ├── ISysNoticeReadService.java
│           │                   ├── ISysNoticeService.java
│           │                   ├── ISysOperLogService.java
│           │                   ├── ISysPostService.java
│           │                   ├── ISysRoleService.java
│           │                   ├── ISysUserOnlineService.java
│           │                   ├── ISysUserService.java
│           │                   └── impl/
│           │                       ├── SysConfigServiceImpl.java
│           │                       ├── SysDeptServiceImpl.java
│           │                       ├── SysDictDataServiceImpl.java
│           │                       ├── SysDictTypeServiceImpl.java
│           │                       ├── SysLogininforServiceImpl.java
│           │                       ├── SysMenuServiceImpl.java
│           │                       ├── SysNoticeReadServiceImpl.java
│           │                       ├── SysNoticeServiceImpl.java
│           │                       ├── SysOperLogServiceImpl.java
│           │                       ├── SysPostServiceImpl.java
│           │                       ├── SysRoleServiceImpl.java
│           │                       ├── SysUserOnlineServiceImpl.java
│           │                       └── SysUserServiceImpl.java
│           └── resources/
│               └── mapper/
│                   └── system/
│                       ├── SysConfigMapper.xml
│                       ├── SysDeptMapper.xml
│                       ├── SysDictDataMapper.xml
│                       ├── SysDictTypeMapper.xml
│                       ├── SysLogininforMapper.xml
│                       ├── SysMenuMapper.xml
│                       ├── SysNoticeMapper.xml
│                       ├── SysNoticeReadMapper.xml
│                       ├── SysOperLogMapper.xml
│                       ├── SysPostMapper.xml
│                       ├── SysRoleDeptMapper.xml
│                       ├── SysRoleMapper.xml
│                       ├── SysRoleMenuMapper.xml
│                       ├── SysUserMapper.xml
│                       ├── SysUserOnlineMapper.xml
│                       ├── SysUserPostMapper.xml
│                       └── SysUserRoleMapper.xml
├── ry.bat
├── ry.sh
└── sql/
    ├── quartz.sql
    ├── ruoyi.html
    ├── ruoyi.pdm
    └── ry_20260319.sql

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
custom: http://doc.ruoyi.vip/ruoyi/other/donate.html


================================================
FILE: .gitignore
================================================
######################################################################
# Build Tools

.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar

target/
!.mvn/wrapper/maven-wrapper.jar

######################################################################
# IDE

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/

######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp

!*/build/*.java
!*/build/*.html
!*/build/*.xml

================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2018 RuoYi

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================
FILE: README.md
================================================
<p align="center">
	<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-dd77653d7c9f197dd9d93684f3c8dcfbab6.png">
</p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v4.8.2</h1>
<h4 align="center">基于SpringBoot开发的轻量级Java快速开发框架</h4>
<p align="center">
	<a href="https://gitee.com/y_project/RuoYi/stargazers"><img src="https://gitee.com/y_project/RuoYi/badge/star.svg?theme=gvp"></a>
	<a href="https://gitee.com/y_project/RuoYi"><img src="https://img.shields.io/badge/RuoYi-v4.8.2-brightgreen.svg"></a>
	<a href="https://gitee.com/y_project/RuoYi/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
</p>

## 平台简介

一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。

性别男,若依是给女儿取的名字(寓意:你若不离不弃,我必生死相依)

若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。

* 前端基于 [Hplus(H+)](https://gitee.com/hplus_admin/hplus) 后台主题 UI 框架。
* 前后端分离版本,请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;

## 版本分支

RuoYi 框架提供 Spring Boot 2.x / 3.x / 4.x 多版本分支的并行维护。

| 名称              | 说明                      | 地址                                                |
| :---------------- | :------------------------ | :-------------------------------------------------- |
| master 默认分支   | Spring Boot 4.x (JDK 17+) | https://gitee.com/y_project/RuoYi                   |
| springboot3 分支  | Spring Boot 3.x (JDK 17+) | https://gitee.com/y_project/RuoYi/tree/springboot3  |
| springboot2 分支  | Spring Boot 2.x (JDK 8+)  | https://gitee.com/y_project/RuoYi/tree/springboot2  |

## 内置功能

1.  用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2.  部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3.  岗位管理:配置系统用户所属担任职务。
4.  菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5.  角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6.  字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7.  参数管理:对系统动态配置常用参数。
8.  通知公告:系统通知公告信息发布维护。
9.  操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
14. 系统接口:根据业务代码自动生成相关的api接口文档。
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存查询,删除、清空等操作。
17. 在线构建器:拖动表单元素生成相应的HTML代码。
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。

## 在线体验

- admin/admin123  
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。

演示地址:http://ruoyi.vip  
文档地址:http://doc.ruoyi.vip

## 演示图

<table>
    <tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-42e518aa72a24d228427a1261cb3679f395.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-7f20dd0edba25e5187c5c4dd3ec7d3d9797.png"/></td>
    </tr>
    <tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-2dae3d87f6a8ca05057db059cd9a411d51d.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-ea4d98423471e55fba784694e45d12bd4bb.png"/></td>
    </tr>
    <tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-7f6c6e9f5873efca09bd2870ee8468b8fce.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-c708b65f2c382a03f69fe1efa8d341e6cff.png"/></td>
    </tr>
	<tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-9ab586c47dd5c7b92bca0d727962c90e3b8.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-ef954122a2080e02013112db21754b955c6.png"/></td>
    </tr>	 
    <tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-088edb4d531e122415a1e2342bccb1a9691.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-f886fe19bd820c0efae82f680223cac196c.png"/></td>
    </tr>
	<tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-c7a2eb71fa65d6e660294b4bccca613d638.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-e60137fb0787defe613bd83331dc4755a70.png"/></td>
    </tr>
	<tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-7c51c1b5758f0a0f92ed3c60469b7526f9f.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-15181aed45bb2461aa97b594cbf2f86ea5f.png"/></td>
    </tr>
	<tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-83326ad52ea63f67233d126226738054d98.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-3bd6d31e913b70df00107db51d64ef81df7.png"/></td>
    </tr>
	<tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-70a2225836bc82042a6785edf6299e2586a.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-0184d6ab01fdc6667a14327fcaf8b46345d.png"/></td>
    </tr>
	<tr>
        <td><img src="https://oscimg.oschina.net/oscnet/up-64d8086dc2c02c8f71170290482f7640098.png"/></td>
        <td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
    </tr>
</table>


## 若依交流群

QQ群: [![加入QQ群](https://img.shields.io/badge/已满-1389287-blue.svg)](https://jq.qq.com/?_wv=1027&k=5HBAaYN)  [![加入QQ群](https://img.shields.io/badge/已满-1679294-blue.svg)](https://jq.qq.com/?_wv=1027&k=5cHeRVW)  [![加入QQ群](https://img.shields.io/badge/已满-1529866-blue.svg)](https://jq.qq.com/?_wv=1027&k=53R0L5Z)  [![加入QQ群](https://img.shields.io/badge/已满-1772718-blue.svg)](https://jq.qq.com/?_wv=1027&k=5g75dCU)  [![加入QQ群](https://img.shields.io/badge/已满-1366522-blue.svg)](https://jq.qq.com/?_wv=1027&k=58cPoHA)  [![加入QQ群](https://img.shields.io/badge/已满-1382251-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb)  [![加入QQ群](https://img.shields.io/badge/已满-1145125-blue.svg)](https://jq.qq.com/?_wv=1027&k=5yugASz)  [![加入QQ群](https://img.shields.io/badge/已满-86752435-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Rf3d2P)  [![加入QQ群](https://img.shields.io/badge/已满-134072510-blue.svg)](https://jq.qq.com/?_wv=1027&k=5ZIjaeP)  [![加入QQ群](https://img.shields.io/badge/已满-210336300-blue.svg)](https://jq.qq.com/?_wv=1027&k=5CJw1jY)  [![加入QQ群](https://img.shields.io/badge/已满-339522636-blue.svg)](https://jq.qq.com/?_wv=1027&k=5omzbKc)  [![加入QQ群](https://img.shields.io/badge/已满-130035985-blue.svg)](https://jq.qq.com/?_wv=1027&k=qPIKBb7s)  [![加入QQ群](https://img.shields.io/badge/已满-143151071-blue.svg)](https://jq.qq.com/?_wv=1027&k=4NsjKbtU)  [![加入QQ群](https://img.shields.io/badge/已满-158781320-blue.svg)](https://jq.qq.com/?_wv=1027&k=VD2pkz2G)  [![加入QQ群](https://img.shields.io/badge/已满-201531282-blue.svg)](https://jq.qq.com/?_wv=1027&k=HlshFwkJ)  [![加入QQ群](https://img.shields.io/badge/已满-101526938-blue.svg)](https://jq.qq.com/?_wv=1027&k=0ARRrO9V)  [![加入QQ群](https://img.shields.io/badge/已满-264355400-blue.svg)](https://jq.qq.com/?_wv=1027&k=up9k3ZXJ)  [![加入QQ群](https://img.shields.io/badge/已满-298522656-blue.svg)](https://jq.qq.com/?_wv=1027&k=540WfdEr)  [![加入QQ群](https://img.shields.io/badge/已满-139845794-blue.svg)](https://jq.qq.com/?_wv=1027&k=ss91fC4t)  [![加入QQ群](https://img.shields.io/badge/已满-185760789-blue.svg)](https://jq.qq.com/?_wv=1027&k=Cqd66IKe) [![加入QQ群](https://img.shields.io/badge/已满-175104288-blue.svg)](https://jq.qq.com/?_wv=1027&k=7FplYUnR) [![加入QQ群](https://img.shields.io/badge/已满-174942938-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=lqMHu_5Fskm7H2S1vNAQTtzAUokVydwc&authKey=ptw0Fpch5pbNocML3CIJKKqZBaq2DI7cusKuzIgfMNiY3t9Pvd9hP%2BA8WYx3yaY1&noverify=0&group_code=174942938) [![加入QQ群](https://img.shields.io/badge/已满-287843737-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=blYlRDmwZXSXI5pVrPPU7ZJ1stFJ6Q2Q&authKey=ForGBWffHVlPt9NE3d7g4DoOIouBh%2BqvAj2lp1CLReHfZAUaK7SRrdwsChKpRJDJ&noverify=0&group_code=287843737) [![加入QQ群](https://img.shields.io/badge/已满-232896766-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=KTVAIhggR3rR3uZWK9A8kR4yYNREQ4jo&authKey=An4DUV9e7uK8I8VgBbp949z0ypQoDrOoqvVg%2FWOr2vuNNDMZUAMPvqHor6TFMIgz&noverify=0&group_code=232896766) [![加入QQ群](https://img.shields.io/badge/已满-180208928-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XwhV8deuZXt__yteR1clNanVSXzA-ugq&authKey=ezgwKqEZPdP%2FgC9I03OBkJb%2Biii8yvVfwrcQuu0%2FL6ILXcRdHYDBFKCXeoeBT0E6&noverify=0&group_code=180208928) [![加入QQ群](https://img.shields.io/badge/已满-140284548-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=WqsGDxpGkqOPeWGOf3I32f_rXxdhqYNr&authKey=kvdF5df7PO9bzWxmixKhZN6ShsECBiuGUmmzTZBWVr2MVOfJ8%2F4oD0Gws0rbgYfz&noverify=0&group_code=140284548) [![加入QQ群](https://img.shields.io/badge/177203794-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=z9z9jkkkinfAElKZk2FXqlN4XIXlXsMi&authKey=Sm9XMTV%2FFyANBrv9rVpMfMNcX4v1lVah3795O9VclQwU4DNzQcT5BLXTmTBouIkM&noverify=0&group_code=177203794)

================================================
FILE: bin/clean.bat
================================================
@echo off
echo.
echo [Ϣ] target·
echo.

%~d0
cd %~dp0

cd ..
call mvn clean

pause

================================================
FILE: bin/package.bat
================================================
@echo off
echo.
echo [Ϣ] Weḅwar/jarļ
echo.

%~d0
cd %~dp0

cd ..
call mvn clean package -Dmaven.test.skip=true

pause

================================================
FILE: bin/run.bat
================================================
@echo off
echo.
echo [Ϣ] ʹJarWeb̡
echo.

cd %~dp0
cd ../ruoyi-admin/target

set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m

java -jar %JAVA_OPTS% ruoyi-admin.jar

cd bin
pause

================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ruoyi</groupId>
    <artifactId>ruoyi</artifactId>
    <version>4.8.2</version>

    <name>ruoyi</name>
    <url>http://www.ruoyi.vip</url>
    <description>若依管理系统</description>
    
    <properties>
        <ruoyi.version>4.8.2</ruoyi.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>17</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
        <spring-boot.version>4.0.3</spring-boot.version>
        <shiro.version>2.1.0</shiro.version>
        <mybatis-spring-boot.version>4.0.1</mybatis-spring-boot.version>
        <thymeleaf.extras.shiro.version>2.1.0</thymeleaf.extras.shiro.version>
        <druid.version>1.2.28</druid.version>
        <yauaa.version>8.1.0</yauaa.version>
        <kaptcha.version>2.3.3</kaptcha.version>
        <pagehelper.boot.version>2.1.1</pagehelper.boot.version>
        <fastjson.version>1.2.83</fastjson.version>
        <oshi.version>6.10.0</oshi.version>
        <commons.io.version>2.21.0</commons.io.version>
        <poi.version>4.1.2</poi.version>
        <velocity.version>2.3</velocity.version>
        <springdoc.version>3.0.2</springdoc.version>
    </properties>

    <!-- 依赖声明 -->
    <dependencyManagement>
        <dependencies>

            <!-- SpringBoot的依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 阿里数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-4-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            
            <!-- 验证码 -->
            <dependency>
                <groupId>pro.fessional</groupId>
                <artifactId>kaptcha</artifactId>
                <version>${kaptcha.version}</version>
            </dependency>

            <!-- Shiro核心框架 -->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <classifier>jakarta</classifier>
                <version>${shiro.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-web</artifactId>
                <classifier>jakarta</classifier>
                <version>${shiro.version}</version>
            </dependency>

            <!-- Shiro使用Spring框架 -->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <classifier>jakarta</classifier>
                <version>${shiro.version}</version>
                <!-- 排除仍使用了javax.servlet的依赖 -->
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.shiro</groupId>
                        <artifactId>shiro-web</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- Shiro使用EhCache缓存框架 -->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-ehcache</artifactId>
                <version>${shiro.version}</version>
            </dependency>

            <!-- thymeleaf模板引擎和shiro框架的整合 -->
            <dependency>
                <groupId>com.github.theborakompanioni</groupId>
                <artifactId>thymeleaf-extras-shiro</artifactId>
                <version>${thymeleaf.extras.shiro.version}</version>
            </dependency>

            <!-- mybatis依赖 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot.version}</version>
            </dependency>

            <!-- 解析客户端操作系统、浏览器等 -->
            <dependency>
                <groupId>nl.basjes.parse.useragent</groupId>
                <artifactId>yauaa</artifactId>
                <version>${yauaa.version}</version>
            </dependency>

            <!-- pagehelper 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper.boot.version}</version>
            </dependency>

            <!-- 获取系统信息 -->
            <dependency>
                <groupId>com.github.oshi</groupId>
                <artifactId>oshi-core</artifactId>
                <version>${oshi.version}</version>
            </dependency>

            <!-- spring-doc -->
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                <version>${springdoc.version}</version>
            </dependency>

            <!-- io常用工具类 -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons.io.version}</version>
            </dependency>

            <!-- excel工具 -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>${poi.version}</version>
            </dependency>

            <!-- velocity代码生成使用模板 -->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>${velocity.version}</version>
            </dependency>

            <!-- 阿里JSON解析器 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <!-- 定时任务-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-quartz</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>

            <!-- 代码生成-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-generator</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>

            <!-- 核心模块-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-framework</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>

            <!-- 系统模块-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-system</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>

            <!-- 通用工具-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>ruoyi-common</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <modules>
        <module>ruoyi-admin</module>
        <module>ruoyi-framework</module>
        <module>ruoyi-system</module>
        <module>ruoyi-quartz</module>
        <module>ruoyi-generator</module>
        <module>ruoyi-common</module>
    </modules>
    <packaging>pom</packaging>


    <dependencies>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <parameters>true</parameters>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

================================================
FILE: ruoyi-admin/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ruoyi</artifactId>
        <groupId>com.ruoyi</groupId>
        <version>4.8.2</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <artifactId>ruoyi-admin</artifactId>

    <description>
        web服务入口
    </description>

    <dependencies>

        <!-- SpringBoot集成thymeleaf模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 表示依赖不会传递 -->
        </dependency>

        <!-- spring-doc -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
        </dependency>

        <!-- Mysql驱动包 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>

        <!-- 核心模块-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-framework</artifactId>
        </dependency>

        <!-- 定时任务-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-quartz</artifactId>
        </dependency>

        <!-- 代码生成-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-generator</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <addResources>true</addResources>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>   
                <groupId>org.apache.maven.plugins</groupId>   
                <artifactId>maven-war-plugin</artifactId>   
                <version>3.1.0</version>   
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warName>${project.artifactId}</warName>
                </configuration>   
            </plugin>   
            <!-- YUI Compressor (CSS/JS压缩) 
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
                <version>1.5.1</version>
                <executions>
                    <execution>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>compress</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <jswarn>false</jswarn>
                    <nosuffix>true</nosuffix>
                    <linebreakpos>50000</linebreakpos>
                    <sourceDirectory>src/main/resources/static</sourceDirectory>
                    <force>true</force>
                    <includes>
                        <include>**/*.js</include>
                        <include>**/*.css</include>
                    </includes>
                    <excludes>
                        <exclude>**/*.min.js</exclude>
                        <exclude>**/*.min.css</exclude>
                        <exclude>**/fileinput.js</exclude>
                        <exclude>**/validate/**</exclude>
                        <exclude>**/bootstrap-table/**</exclude>
                    </excludes>
                </configuration>
            </plugin> -->
        </plugins>
        <finalName>${project.artifactId}</finalName>
    </build>

</project>

================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
================================================
package com.ruoyi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;

/**
 * 启动程序
 * 
 * @author ruoyi
 */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RuoYiApplication
{
    public static void main(String[] args)
    {
        // System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(RuoYiApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  \n" +
                " .-------.       ____     __        \n" +
                " |  _ _   \\      \\   \\   /  /    \n" +
                " | ( ' )  |       \\  _. /  '       \n" +
                " |(_ o _) /        _( )_ .'         \n" +
                " | (_,_).' __  ___(_ o _)'          \n" +
                " |  |\\ \\  |  ||   |(_,_)'         \n" +
                " |  | \\ `'   /|   `-'  /           \n" +
                " |  |  \\    /  \\      /           \n" +
                " ''-'   `'-'    `-..-'              ");
    }
}

================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
================================================
package com.ruoyi;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

/**
 * web容器中进行部署
 * 
 * @author ruoyi
 */
public class RuoYiServletInitializer extends SpringBootServletInitializer
{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
    {
        return application.sources(RuoYiApplication.class);
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
================================================
package com.ruoyi.web.controller.common;

import java.util.ArrayList;
import java.util.List;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.config.ServerConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;

/**
 * 通用请求处理
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/common")
public class CommonController
{
    private static final Logger log = LoggerFactory.getLogger(CommonController.class);

    @Autowired
    private ServerConfig serverConfig;

    private static final String FILE_DELIMETER = ",";

    /**
     * 通用下载请求
     * 
     * @param fileName 文件名称
     * @param delete 是否删除
     */
    @GetMapping("/download")
    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
    {
        try
        {
            if (!FileUtils.checkAllowDownload(fileName))
            {
                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
            }
            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
            String filePath = RuoYiConfig.getDownloadPath() + fileName;

            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            FileUtils.setAttachmentResponseHeader(response, realFileName);
            FileUtils.writeBytes(filePath, response.getOutputStream());
            if (delete)
            {
                FileUtils.deleteFile(filePath);
            }
        }
        catch (Exception e)
        {
            log.error("下载文件失败", e);
        }
    }

    /**
     * 通用上传请求(单个)
     */
    @PostMapping("/upload")
    @ResponseBody
    public AjaxResult uploadFile(MultipartFile file) throws Exception
    {
        try
        {
            // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();
            // 上传并返回新文件名称
            String fileName = FileUploadUtils.upload(filePath, file);
            String url = serverConfig.getUrl() + fileName;
            AjaxResult ajax = AjaxResult.success();
            ajax.put("url", url);
            ajax.put("fileName", fileName);
            ajax.put("newFileName", FileUtils.getName(fileName));
            ajax.put("originalFilename", file.getOriginalFilename());
            return ajax;
        }
        catch (Exception e)
        {
            return AjaxResult.error(e.getMessage());
        }
    }

    /**
     * 通用上传请求(多个)
     */
    @PostMapping("/uploads")
    @ResponseBody
    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
    {
        try
        {
            // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();
            List<String> urls = new ArrayList<String>();
            List<String> fileNames = new ArrayList<String>();
            List<String> newFileNames = new ArrayList<String>();
            List<String> originalFilenames = new ArrayList<String>();
            for (MultipartFile file : files)
            {
                // 上传并返回新文件名称
                String fileName = FileUploadUtils.upload(filePath, file);
                String url = serverConfig.getUrl() + fileName;
                urls.add(url);
                fileNames.add(fileName);
                newFileNames.add(FileUtils.getName(fileName));
                originalFilenames.add(file.getOriginalFilename());
            }
            AjaxResult ajax = AjaxResult.success();
            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
            return ajax;
        }
        catch (Exception e)
        {
            return AjaxResult.error(e.getMessage());
        }
    }

    /**
     * 本地资源通用下载
     */
    @GetMapping("/download/resource")
    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) throws Exception
    {
        try
        {
            if (!FileUtils.checkAllowDownload(resource))
            {
                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
            }
            // 本地资源路径
            String localPath = RuoYiConfig.getProfile();
            // 数据库资源地址
            String downloadPath = localPath + FileUtils.stripPrefix(resource);
            // 下载名称
            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            FileUtils.setAttachmentResponseHeader(response, downloadName);
            FileUtils.writeBytes(downloadPath, response.getOutputStream());
        }
        catch (Exception e)
        {
            log.error("下载文件失败", e);
        }
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoDialogController.java
================================================
package com.ruoyi.web.controller.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 模态窗口
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/demo/modal")
public class DemoDialogController
{
    private String prefix = "demo/modal";

    /**
     * 模态窗口
     */
    @GetMapping("/dialog")
    public String dialog()
    {
        return prefix + "/dialog";
    }

    /**
     * 弹层组件
     */
    @GetMapping("/layer")
    public String layer()
    {
        return prefix + "/layer";
    }

    /**
     * 表单
     */
    @GetMapping("/form")
    public String form()
    {
        return prefix + "/form";
    }

    /**
     * 表格
     */
    @GetMapping("/table")
    public String table()
    {
        return prefix + "/table";
    }

    /**
     * 表格check
     */
    @GetMapping("/check")
    public String check()
    {
        return prefix + "/table/check";
    }

    /**
     * 表格radio
     */
    @GetMapping("/radio")
    public String radio()
    {
        return prefix + "/table/radio";
    }

    /**
     * 表格回传父窗体
     */
    @GetMapping("/parent")
    public String parent()
    {
        return prefix + "/table/parent";
    }

    /**
     * 多层窗口frame1
     */
    @GetMapping("/frame1")
    public String frame1()
    {
        return prefix + "/table/frame1";
    }

    /**
     * 多层窗口frame2
     */
    @GetMapping("/frame2")
    public String frame2()
    {
        return prefix + "/table/frame2";
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoFormController.java
================================================
package com.ruoyi.web.controller.demo.controller;

import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.CxSelect;
import com.ruoyi.common.json.JSONObject;
import com.ruoyi.common.json.JSONObject.JSONArray;
import com.ruoyi.common.utils.StringUtils;

/**
 * 表单相关
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/demo/form")
public class DemoFormController
{
    private String prefix = "demo/form";

    private final static List<UserFormModel> users = new ArrayList<UserFormModel>();
    {
        users.add(new UserFormModel(1, "1000001", "测试1", "15888888888"));
        users.add(new UserFormModel(2, "1000002", "测试2", "15666666666"));
        users.add(new UserFormModel(3, "1000003", "测试3", "15666666666"));
        users.add(new UserFormModel(4, "1000004", "测试4", "15666666666"));
        users.add(new UserFormModel(5, "1000005", "测试5", "15666666666"));
    }

    /**
     * 按钮页
     */
    @GetMapping("/button")
    public String button()
    {
        return prefix + "/button";
    }

    /**
     * 下拉框
     */
    @GetMapping("/select")
    public String select()
    {
        return prefix + "/select";
    }

    /**
     * 时间轴
     */
    @GetMapping("/timeline")
    public String timeline()
    {
        return prefix + "/timeline";
    }

    /**
     * 进度条
     */
    @GetMapping("/progress_bars")
    public String progress_bars()
    {
        return prefix + "/progress_bars";
    }

    /**
     * 表单校验
     */
    @GetMapping("/validate")
    public String validate()
    {
        return prefix + "/validate";
    }

    /**
     * 功能扩展(包含文件上传)
     */
    @GetMapping("/jasny")
    public String jasny()
    {
        return prefix + "/jasny";
    }

    /**
     * 拖动排序
     */
    @GetMapping("/sortable")
    public String sortable()
    {
        return prefix + "/sortable";
    }

    /**
     * 单据打印
     */
    @GetMapping("/invoice")
    public String invoice()
    {
        return prefix + "/invoice";
    }

    /**
     * 标签 & 提示
     */
    @GetMapping("/labels_tips")
    public String labels_tips()
    {
        return prefix + "/labels_tips";
    }

    /**
     * 选项卡 & 面板
     */
    @GetMapping("/tabs_panels")
    public String tabs_panels()
    {
        return prefix + "/tabs_panels";
    }

    /**
     * 栅格
     */
    @GetMapping("/grid")
    public String grid()
    {
        return prefix + "/grid";
    }

    /**
     * 表单向导
     */
    @GetMapping("/wizard")
    public String wizard()
    {
        return prefix + "/wizard";
    }

    /**
     * 文件上传
     */
    @GetMapping("/upload")
    public String upload()
    {
        return prefix + "/upload";
    }

    /**
     * 日期和时间页
     */
    @GetMapping("/datetime")
    public String datetime()
    {
        return prefix + "/datetime";
    }

    /**
     * 左右互选组件
     */
    @GetMapping("/duallistbox")
    public String duallistbox()
    {
        return prefix + "/duallistbox";
    }

    /**
     * 基本表单
     */
    @GetMapping("/basic")
    public String basic()
    {
        return prefix + "/basic";
    }

    /**
     * 卡片列表
     */
    @GetMapping("/cards")
    public String cards()
    {
        return prefix + "/cards";
    }

    /**
     * summernote 富文本编辑器
     */
    @GetMapping("/summernote")
    public String summernote()
    {
        return prefix + "/summernote";
    }

    /**
     * 搜索自动补全
     */
    @GetMapping("/autocomplete")
    public String autocomplete()
    {
        return prefix + "/autocomplete";
    }

    /**
     * 多级联动下拉
     */
    @GetMapping("/cxselect")
    public String cxselect(ModelMap mmap)
    {
        CxSelect cxSelectTB = new CxSelect();
        cxSelectTB.setN("淘宝");
        cxSelectTB.setV("taobao");
        CxSelect cxSelectTm = new CxSelect();
        cxSelectTm.setN("天猫");
        cxSelectTm.setV("tm");
        CxSelect cxSelectJhs = new CxSelect();
        cxSelectJhs.setN("聚划算");
        cxSelectJhs.setV("jhs");
        List<CxSelect> tmList = new ArrayList<CxSelect>();
        tmList.add(cxSelectTm);
        tmList.add(cxSelectJhs);
        cxSelectTB.setS(tmList);

        CxSelect cxSelectJD = new CxSelect();
        cxSelectJD.setN("京东");
        cxSelectJD.setV("jd");
        CxSelect cxSelectCs = new CxSelect();
        cxSelectCs.setN("京东超市");
        cxSelectCs.setV("jdcs");
        CxSelect cxSelectSx = new CxSelect();
        cxSelectSx.setN("京东生鲜");
        cxSelectSx.setV("jdsx");
        List<CxSelect> jdList = new ArrayList<CxSelect>();
        jdList.add(cxSelectCs);
        jdList.add(cxSelectSx);
        cxSelectJD.setS(jdList);

        List<CxSelect> cxList = new ArrayList<CxSelect>();
        cxList.add(cxSelectTB);
        cxList.add(cxSelectJD);

        mmap.put("data", JSON.toJSON(cxList));
        return prefix + "/cxselect";
    }

    /**
     * 局部刷新
     */
    @GetMapping("/localrefresh")
    public String localRefresh(ModelMap mmap)
    {
        JSONArray list = new JSONArray();
        JSONObject item = new JSONObject();
        item.put("name", "这条任务数据是由ModelMap传递到页面的,点击添加按钮后会将这条数据替换为新数据");
        item.put("type", "默认");
        item.put("date", "2020.06.10");
        list.add(item);
        mmap.put("tasks", list);
        mmap.put("min", 2);
        mmap.put("max", 10);
        return prefix + "/localrefresh";
    }

    /**
     * 局部刷新-添加任务
     * 
     * @param fragment 页面中的模板名称
     * @param taskName 任务名称
     */
    @PostMapping("/localrefresh/task")
    public String localRefreshTask(String taskName, ModelMap mmap)
    {
        JSONArray list = new JSONArray();
        JSONObject item = new JSONObject();
        item.put("name", StringUtils.defaultIfBlank(taskName, "通过电话销售过程中了解各盛市的设备仪器使用、采购情况及相关重要追踪人"));
        item.put("type", "新增");
        item.put("date", "2018.06.10");
        list.add(item);
        item = new JSONObject();
        item.put("name", "提高自己电话营销技巧,灵活专业地与客户进行电话交流");
        item.put("type", "新增");
        item.put("date", "2018.06.12");
        list.add(item);
        mmap.put("tasks", list);
        return prefix + "/localrefresh::fragment-tasklist";
    }

    /**
     * 模拟数据
     */
    @GetMapping("/cityData")
    @ResponseBody
    public String cityData()
    {
        String data = "[{\"n\":\"湖南省\",\"s\":[{\"n\":\"长沙市\",\"s\":[{\"n\":\"芙蓉区\"},{\"n\":\"天心区\"},{\"n\":\"岳麓区\"},{\"n\":\"开福区\"},{\"n\":\"雨花区\"},{\"n\":\"望城区\"},{\"n\":\"长沙县\"},{\"n\":\"宁乡县\"},{\"n\":\"浏阳市\"}]},{\"n\":\"株洲市\",\"s\":[{\"n\":\"荷塘区\"},{\"n\":\"芦淞区\"},{\"n\":\"石峰区\"},{\"n\":\"天元区\"},{\"n\":\"株洲县\"},{\"n\":\"攸县\"},{\"n\":\"茶陵县\"},{\"n\":\"炎陵县\"},{\"n\":\"醴陵市\"}]},{\"n\":\"湘潭市\",\"s\":[{\"n\":\"雨湖区\"},{\"n\":\"岳塘区\"},{\"n\":\"湘潭县\"},{\"n\":\"湘乡市\"},{\"n\":\"韶山市\"}]},{\"n\":\"衡阳市\",\"s\":[{\"n\":\"珠晖区\"},{\"n\":\"雁峰区\"},{\"n\":\"石鼓区\"},{\"n\":\"蒸湘区\"},{\"n\":\"南岳区\"},{\"n\":\"衡阳县\"},{\"n\":\"衡南县\"},{\"n\":\"衡山县\"},{\"n\":\"衡东县\"},{\"n\":\"祁东县\"},{\"n\":\"耒阳市\"},{\"n\":\"常宁市\"}]},{\"n\":\"邵阳市\",\"s\":[{\"n\":\"双清区\"},{\"n\":\"大祥区\"},{\"n\":\"北塔区\"},{\"n\":\"邵东县\"},{\"n\":\"新邵县\"},{\"n\":\"邵阳县\"},{\"n\":\"隆回县\"},{\"n\":\"洞口县\"},{\"n\":\"绥宁县\"},{\"n\":\"新宁县\"},{\"n\":\"城步苗族自治县\"},{\"n\":\"武冈市\"}]},{\"n\":\"岳阳市\",\"s\":[{\"n\":\"岳阳楼区\"},{\"n\":\"云溪区\"},{\"n\":\"君山区\"},{\"n\":\"岳阳县\"},{\"n\":\"华容县\"},{\"n\":\"湘阴县\"},{\"n\":\"平江县\"},{\"n\":\"汨罗市\"},{\"n\":\"临湘市\"}]},{\"n\":\"常德市\",\"s\":[{\"n\":\"武陵区\"},{\"n\":\"鼎城区\"},{\"n\":\"安乡县\"},{\"n\":\"汉寿县\"},{\"n\":\"澧县\"},{\"n\":\"临澧县\"},{\"n\":\"桃源县\"},{\"n\":\"石门县\"},{\"n\":\"津市市\"}]},{\"n\":\"张家界市\",\"s\":[{\"n\":\"永定区\"},{\"n\":\"武陵源区\"},{\"n\":\"慈利县\"},{\"n\":\"桑植县\"}]},{\"n\":\"益阳市\",\"s\":[{\"n\":\"资阳区\"},{\"n\":\"赫山区\"},{\"n\":\"南县\"},{\"n\":\"桃江县\"},{\"n\":\"安化县\"},{\"n\":\"沅江市\"}]},{\"n\":\"郴州市\",\"s\":[{\"n\":\"北湖区\"},{\"n\":\"苏仙区\"},{\"n\":\"桂阳县\"},{\"n\":\"宜章县\"},{\"n\":\"永兴县\"},{\"n\":\"嘉禾县\"},{\"n\":\"临武县\"},{\"n\":\"汝城县\"},{\"n\":\"桂东县\"},{\"n\":\"安仁县\"},{\"n\":\"资兴市\"}]},{\"n\":\"永州市\",\"s\":[{\"n\":\"零陵区\"},{\"n\":\"冷水滩区\"},{\"n\":\"祁阳县\"},{\"n\":\"东安县\"},{\"n\":\"双牌县\"},{\"n\":\"道县\"},{\"n\":\"江永县\"},{\"n\":\"宁远县\"},{\"n\":\"蓝山县\"},{\"n\":\"新田县\"},{\"n\":\"江华瑶族自治县\"}]},{\"n\":\"怀化市\",\"s\":[{\"n\":\"鹤城区\"},{\"n\":\"中方县\"},{\"n\":\"沅陵县\"},{\"n\":\"辰溪县\"},{\"n\":\"溆浦县\"},{\"n\":\"会同县\"},{\"n\":\"麻阳苗族自治县\"},{\"n\":\"新晃侗族自治县\"},{\"n\":\"芷江侗族自治县\"},{\"n\":\"靖州苗族侗族自治县\"},{\"n\":\"通道侗族自治县\"},{\"n\":\"洪江市\"}]},{\"n\":\"娄底市\",\"s\":[{\"n\":\"娄星区\"},{\"n\":\"双峰县\"},{\"n\":\"新化县\"},{\"n\":\"冷水江市\"},{\"n\":\"涟源市\"}]},{\"n\":\"湘西土家族苗族自治州\",\"s\":[{\"n\":\"吉首市\"},{\"n\":\"泸溪县\"},{\"n\":\"凤凰县\"},{\"n\":\"花垣县\"},{\"n\":\"保靖县\"},{\"n\":\"古丈县\"},{\"n\":\"永顺县\"},{\"n\":\"龙山县\"}]}]},{\"n\":\"广东省\",\"s\":[{\"n\":\"广州市\",\"s\":[{\"n\":\"荔湾区\"},{\"n\":\"越秀区\"},{\"n\":\"海珠区\"},{\"n\":\"天河区\"},{\"n\":\"白云区\"},{\"n\":\"黄埔区\"},{\"n\":\"番禺区\"},{\"n\":\"花都区\"},{\"n\":\"南沙区\"},{\"n\":\"萝岗区\"},{\"n\":\"增城市\"},{\"n\":\"从化市\"}]},{\"n\":\"韶关市\",\"s\":[{\"n\":\"武江区\"},{\"n\":\"浈江区\"},{\"n\":\"曲江区\"},{\"n\":\"始兴县\"},{\"n\":\"仁化县\"},{\"n\":\"翁源县\"},{\"n\":\"乳源瑶族自治县\"},{\"n\":\"新丰县\"},{\"n\":\"乐昌市\"},{\"n\":\"南雄市\"}]},{\"n\":\"深圳市\",\"s\":[{\"n\":\"罗湖区\"},{\"n\":\"福田区\"},{\"n\":\"南山区\"},{\"n\":\"宝安区\"},{\"n\":\"龙岗区\"},{\"n\":\"盐田区\"}]},{\"n\":\"珠海市\",\"s\":[{\"n\":\"香洲区\"},{\"n\":\"斗门区\"},{\"n\":\"金湾区\"}]},{\"n\":\"汕头市\",\"s\":[{\"n\":\"龙湖区\"},{\"n\":\"金平区\"},{\"n\":\"濠江区\"},{\"n\":\"潮阳区\"},{\"n\":\"潮南区\"},{\"n\":\"澄海区\"},{\"n\":\"南澳县\"}]},{\"n\":\"佛山市\",\"s\":[{\"n\":\"禅城区\"},{\"n\":\"南海区\"},{\"n\":\"顺德区\"},{\"n\":\"三水区\"},{\"n\":\"高明区\"}]},{\"n\":\"江门市\",\"s\":[{\"n\":\"蓬江区\"},{\"n\":\"江海区\"},{\"n\":\"新会区\"},{\"n\":\"台山市\"},{\"n\":\"开平市\"},{\"n\":\"鹤山市\"},{\"n\":\"恩平市\"}]},{\"n\":\"湛江市\",\"s\":[{\"n\":\"赤坎区\"},{\"n\":\"霞山区\"},{\"n\":\"坡头区\"},{\"n\":\"麻章区\"},{\"n\":\"遂溪县\"},{\"n\":\"徐闻县\"},{\"n\":\"廉江市\"},{\"n\":\"雷州市\"},{\"n\":\"吴川市\"}]},{\"n\":\"茂名市\",\"s\":[{\"n\":\"茂南区\"},{\"n\":\"茂港区\"},{\"n\":\"电白县\"},{\"n\":\"高州市\"},{\"n\":\"化州市\"},{\"n\":\"信宜市\"}]},{\"n\":\"肇庆市\",\"s\":[{\"n\":\"端州区\"},{\"n\":\"鼎湖区\"},{\"n\":\"广宁县\"},{\"n\":\"怀集县\"},{\"n\":\"封开县\"},{\"n\":\"德庆县\"},{\"n\":\"高要市\"},{\"n\":\"四会市\"}]},{\"n\":\"惠州市\",\"s\":[{\"n\":\"惠城区\"},{\"n\":\"惠阳区\"},{\"n\":\"博罗县\"},{\"n\":\"惠东县\"},{\"n\":\"龙门县\"}]},{\"n\":\"梅州市\",\"s\":[{\"n\":\"梅江区\"},{\"n\":\"梅县\"},{\"n\":\"大埔县\"},{\"n\":\"丰顺县\"},{\"n\":\"五华县\"},{\"n\":\"平远县\"},{\"n\":\"蕉岭县\"},{\"n\":\"兴宁市\"}]},{\"n\":\"汕尾市\",\"s\":[{\"n\":\"城区\"},{\"n\":\"海丰县\"},{\"n\":\"陆河县\"},{\"n\":\"陆丰市\"}]},{\"n\":\"河源市\",\"s\":[{\"n\":\"源城区\"},{\"n\":\"紫金县\"},{\"n\":\"龙川县\"},{\"n\":\"连平县\"},{\"n\":\"和平县\"},{\"n\":\"东源县\"}]},{\"n\":\"阳江市\",\"s\":[{\"n\":\"江城区\"},{\"n\":\"阳西县\"},{\"n\":\"阳东县\"},{\"n\":\"阳春市\"}]},{\"n\":\"清远市\",\"s\":[{\"n\":\"清城区\"},{\"n\":\"清新区\"},{\"n\":\"佛冈县\"},{\"n\":\"阳山县\"},{\"n\":\"连山壮族瑶族自治县\"},{\"n\":\"连南瑶族自治县\"},{\"n\":\"英德市\"},{\"n\":\"连州市\"}]},{\"n\":\"东莞市\"},{\"n\":\"中山市\"},{\"n\":\"潮州市\",\"s\":[{\"n\":\"湘桥区\"},{\"n\":\"潮安区\"},{\"n\":\"饶平县\"}]},{\"n\":\"揭阳市\",\"s\":[{\"n\":\"榕城区\"},{\"n\":\"揭东区\"},{\"n\":\"揭西县\"},{\"n\":\"惠来县\"},{\"n\":\"普宁市\"}]},{\"n\":\"云浮市\",\"s\":[{\"n\":\"云城区\"},{\"n\":\"新兴县\"},{\"n\":\"郁南县\"},{\"n\":\"云安县\"},{\"n\":\"罗定市\"}]}]}]";
        return data;
    }

    /**
     * 获取用户数据
     */
    @GetMapping("/userModel")
    @ResponseBody
    public AjaxResult userModel()
    {
        AjaxResult ajax = new AjaxResult();

        ajax.put("code", 200);
        ajax.put("value", users);
        return ajax;
    }

    /**
     * 获取数据集合
     */
    @GetMapping("/collection")
    @ResponseBody
    public AjaxResult collection()
    {
        String[] array = { "ruoyi 1", "ruoyi 2", "ruoyi 3", "ruoyi 4", "ruoyi 5" };
        AjaxResult ajax = new AjaxResult();
        ajax.put("value", array);
        return ajax;
    }
}

class UserFormModel
{
    /** 用户ID */
    private int userId;

    /** 用户编号 */
    private String userCode;

    /** 用户姓名 */
    private String userName;

    /** 用户手机 */
    private String userPhone;

    public UserFormModel()
    {

    }

    public UserFormModel(int userId, String userCode, String userName, String userPhone)
    {
        this.userId = userId;
        this.userCode = userCode;
        this.userName = userName;
        this.userPhone = userPhone;
    }

    public int getUserId()
    {
        return userId;
    }

    public void setUserId(int userId)
    {
        this.userId = userId;
    }

    public String getUserCode()
    {
        return userCode;
    }

    public void setUserCode(String userCode)
    {
        this.userCode = userCode;
    }

    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String userName)
    {
        this.userName = userName;
    }

    public String getUserPhone()
    {
        return userPhone;
    }

    public void setUserPhone(String userPhone)
    {
        this.userPhone = userPhone;
    }

}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoIconController.java
================================================
package com.ruoyi.web.controller.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 图标相关
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/demo/icon")
public class DemoIconController
{
    private String prefix = "demo/icon";

    /**
     * FontAwesome图标
     */
    @GetMapping("/fontawesome")
    public String fontAwesome()
    {
        return prefix + "/fontawesome";
    }

    /**
     * Glyphicons图标
     */
    @GetMapping("/glyphicons")
    public String glyphicons()
    {
        return prefix + "/glyphicons";
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoOperateController.java
================================================
package com.ruoyi.web.controller.demo.controller;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.web.controller.demo.domain.CustomerModel;
import com.ruoyi.web.controller.demo.domain.UserOperateModel;

/**
 * 操作控制
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/demo/operate")
public class DemoOperateController extends BaseController
{
    private String prefix = "demo/operate";

    private final static Map<Integer, UserOperateModel> users = new LinkedHashMap<Integer, UserOperateModel>();
    {
        users.put(1, new UserOperateModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
        users.put(2, new UserOperateModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
        users.put(3, new UserOperateModel(3, "1000003", "测试3", "0", "15666666666", "ry@qq.com", 110.0, "1"));
        users.put(4, new UserOperateModel(4, "1000004", "测试4", "1", "15666666666", "ry@qq.com", 220.0, "1"));
        users.put(5, new UserOperateModel(5, "1000005", "测试5", "0", "15666666666", "ry@qq.com", 140.0, "1"));
        users.put(6, new UserOperateModel(6, "1000006", "测试6", "1", "15666666666", "ry@qq.com", 330.0, "1"));
        users.put(7, new UserOperateModel(7, "1000007", "测试7", "0", "15666666666", "ry@qq.com", 160.0, "1"));
        users.put(8, new UserOperateModel(8, "1000008", "测试8", "1", "15666666666", "ry@qq.com", 170.0, "1"));
        users.put(9, new UserOperateModel(9, "1000009", "测试9", "0", "15666666666", "ry@qq.com", 180.0, "1"));
        users.put(10, new UserOperateModel(10, "1000010", "测试10", "0", "15666666666", "ry@qq.com", 210.0, "1"));
        users.put(11, new UserOperateModel(11, "1000011", "测试11", "1", "15666666666", "ry@qq.com", 110.0, "1"));
        users.put(12, new UserOperateModel(12, "1000012", "测试12", "0", "15666666666", "ry@qq.com", 120.0, "1"));
        users.put(13, new UserOperateModel(13, "1000013", "测试13", "1", "15666666666", "ry@qq.com", 380.0, "1"));
        users.put(14, new UserOperateModel(14, "1000014", "测试14", "0", "15666666666", "ry@qq.com", 280.0, "1"));
        users.put(15, new UserOperateModel(15, "1000015", "测试15", "0", "15666666666", "ry@qq.com", 570.0, "1"));
        users.put(16, new UserOperateModel(16, "1000016", "测试16", "1", "15666666666", "ry@qq.com", 260.0, "1"));
        users.put(17, new UserOperateModel(17, "1000017", "测试17", "1", "15666666666", "ry@qq.com", 210.0, "1"));
        users.put(18, new UserOperateModel(18, "1000018", "测试18", "1", "15666666666", "ry@qq.com", 340.0, "1"));
        users.put(19, new UserOperateModel(19, "1000019", "测试19", "1", "15666666666", "ry@qq.com", 160.0, "1"));
        users.put(20, new UserOperateModel(20, "1000020", "测试20", "1", "15666666666", "ry@qq.com", 220.0, "1"));
        users.put(21, new UserOperateModel(21, "1000021", "测试21", "1", "15666666666", "ry@qq.com", 120.0, "1"));
        users.put(22, new UserOperateModel(22, "1000022", "测试22", "1", "15666666666", "ry@qq.com", 130.0, "1"));
        users.put(23, new UserOperateModel(23, "1000023", "测试23", "1", "15666666666", "ry@qq.com", 490.0, "1"));
        users.put(24, new UserOperateModel(24, "1000024", "测试24", "1", "15666666666", "ry@qq.com", 570.0, "1"));
        users.put(25, new UserOperateModel(25, "1000025", "测试25", "1", "15666666666", "ry@qq.com", 250.0, "1"));
        users.put(26, new UserOperateModel(26, "1000026", "测试26", "1", "15666666666", "ry@qq.com", 250.0, "1"));
    }

    /**
     * 表格
     */
    @GetMapping("/table")
    public String table()
    {
        return prefix + "/table";
    }

    /**
     * 其他
     */
    @GetMapping("/other")
    public String other()
    {
        return prefix + "/other";
    }

    /**
     * 查询数据
     */
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(UserOperateModel userModel)
    {
        TableDataInfo rspData = new TableDataInfo();
        List<UserOperateModel> userList = new ArrayList<UserOperateModel>(users.values());
        // 查询条件过滤
        if (StringUtils.isNotEmpty(userModel.getSearchValue()))
        {
            userList.clear();
            for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet())
            {
                if (entry.getValue().getUserName().equals(userModel.getSearchValue()))
                {
                    userList.add(entry.getValue());
                }
            }
        }
        else if (StringUtils.isNotEmpty(userModel.getUserName()))
        {
            userList.clear();
            for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet())
            {
                if (entry.getValue().getUserName().equals(userModel.getUserName()))
                {
                    userList.add(entry.getValue());
                }
            }
        }
        PageDomain pageDomain = TableSupport.buildPageRequest();
        if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize())
        {
            rspData.setRows(userList);
            rspData.setTotal(userList.size());
            return rspData;
        }
        Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
        Integer pageSize = pageDomain.getPageNum() * 10;
        if (pageSize > userList.size())
        {
            pageSize = userList.size();
        }
        rspData.setRows(userList.subList(pageNum, pageSize));
        rspData.setTotal(userList.size());
        return rspData;
    }

    /**
     * 新增用户
     */
    @GetMapping("/add")
    public String add(ModelMap mmap)
    {
        return prefix + "/add";
    }

    /**
     * 新增保存用户
     */
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(UserOperateModel user)
    {
        Integer userId = users.size() + 1;
        user.setUserId(userId);
        return AjaxResult.success(users.put(userId, user));
    }

    /**
     * 新增保存主子表信息
     */
    @PostMapping("/customer/add")
    @ResponseBody
    public AjaxResult addSave(CustomerModel customerModel)
    {
        System.out.println(customerModel.toString());
        return AjaxResult.success();
    }

    /**
     * 修改用户
     */
    @GetMapping("/edit/{userId}")
    public String edit(@PathVariable("userId") Integer userId, ModelMap mmap)
    {
        mmap.put("user", users.get(userId));
        return prefix + "/edit";
    }

    /**
     * 修改保存用户
     */
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(UserOperateModel user)
    {
        return AjaxResult.success(users.put(user.getUserId(), user));
    }

    /**
     * 导出
     */
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(UserOperateModel user)
    {
        List<UserOperateModel> list = new ArrayList<UserOperateModel>(users.values());
        ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
        return util.exportExcel(list, "用户数据");
    }

    /**
     * 下载模板
     */
    @GetMapping("/importTemplate")
    @ResponseBody
    public AjaxResult importTemplate()
    {
        ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
        return util.importTemplateExcel("用户数据");
    }

    /**
     * 导入数据
     */
    @PostMapping("/importData")
    @ResponseBody
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
    {
        ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
        List<UserOperateModel> userList = util.importExcel(file.getInputStream());
        String message = importUser(userList, updateSupport);
        return AjaxResult.success(message);
    }

    /**
     * 删除用户
     */
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        Integer[] userIds = Convert.toIntArray(ids);
        for (Integer userId : userIds)
        {
            users.remove(userId);
        }
        return AjaxResult.success();
    }

    /**
     * 查看详细
     */
    @GetMapping("/detail/{userId}")
    public String detail(@PathVariable("userId") Integer userId, ModelMap mmap)
    {
        mmap.put("user", users.get(userId));
        return prefix + "/detail";
    }

    @PostMapping("/clean")
    @ResponseBody
    public AjaxResult clean()
    {
        users.clear();
        return success();
    }

    /**
     * 导入用户数据
     * 
     * @param userList 用户数据列表
     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
     * @return 结果
     */
    public String importUser(List<UserOperateModel> userList, Boolean isUpdateSupport)
    {
        if (StringUtils.isNull(userList) || userList.size() == 0)
        {
            throw new ServiceException("导入用户数据不能为空!");
        }
        int successNum = 0;
        int failureNum = 0;
        StringBuilder successMsg = new StringBuilder();
        StringBuilder failureMsg = new StringBuilder();
        for (UserOperateModel user : userList)
        {
            try
            {
                // 验证是否存在这个用户
                boolean userFlag = false;
                for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet())
                {
                    if (entry.getValue().getUserName().equals(user.getUserName()))
                    {
                        userFlag = true;
                        break;
                    }
                }
                if (!userFlag)
                {
                    Integer userId = users.size() + 1;
                    user.setUserId(userId);
                    users.put(userId, user);
                    successNum++;
                    successMsg.append("<br/>" + successNum + "、用户 " + user.getUserName() + " 导入成功");
                }
                else if (isUpdateSupport)
                {
                    users.put(user.getUserId(), user);
                    successNum++;
                    successMsg.append("<br/>" + successNum + "、用户 " + user.getUserName() + " 更新成功");
                }
                else
                {
                    failureNum++;
                    failureMsg.append("<br/>" + failureNum + "、用户 " + user.getUserName() + " 已存在");
                }
            }
            catch (Exception e)
            {
                failureNum++;
                String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
                failureMsg.append(msg + e.getMessage());
            }
        }
        if (failureNum > 0)
        {
            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
            throw new ServiceException(failureMsg.toString());
        }
        else
        {
            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
        }
        return successMsg.toString();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoReportController.java
================================================
package com.ruoyi.web.controller.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 报表
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/demo/report")
public class DemoReportController
{
    private String prefix = "demo/report";

    /**
     * 百度ECharts
     */
    @GetMapping("/echarts")
    public String echarts()
    {
        return prefix + "/echarts";
    }

    /**
     * 图表插件
     */
    @GetMapping("/peity")
    public String peity()
    {
        return prefix + "/peity";
    }

    /**
     * 线状图插件
     */
    @GetMapping("/sparkline")
    public String sparkline()
    {
        return prefix + "/sparkline";
    }

    /**
     * 图表组合
     */
    @GetMapping("/metrics")
    public String metrics()
    {
        return prefix + "/metrics";
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java
================================================
package com.ruoyi.web.controller.demo.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;

/**
 * 表格相关
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/demo/table")
public class DemoTableController extends BaseController
{
    private String prefix = "demo/table";

    private final static List<UserTableModel> users = new ArrayList<UserTableModel>();
    {
        users.add(new UserTableModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
        users.add(new UserTableModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
        users.add(new UserTableModel(3, "1000003", "测试3", "0", "15666666666", "ry@qq.com", 110.0, "1"));
        users.add(new UserTableModel(4, "1000004", "测试4", "1", "15666666666", "ry@qq.com", 220.0, "1"));
        users.add(new UserTableModel(5, "1000005", "测试5", "0", "15666666666", "ry@qq.com", 140.0, "1"));
        users.add(new UserTableModel(6, "1000006", "测试6", "1", "15666666666", "ry@qq.com", 330.0, "1"));
        users.add(new UserTableModel(7, "1000007", "测试7", "0", "15666666666", "ry@qq.com", 160.0, "1"));
        users.add(new UserTableModel(8, "1000008", "测试8", "1", "15666666666", "ry@qq.com", 170.0, "1"));
        users.add(new UserTableModel(9, "1000009", "测试9", "0", "15666666666", "ry@qq.com", 180.0, "1"));
        users.add(new UserTableModel(10, "1000010", "测试10", "0", "15666666666", "ry@qq.com", 210.0, "1"));
        users.add(new UserTableModel(11, "1000011", "测试11", "1", "15666666666", "ry@qq.com", 110.0, "1"));
        users.add(new UserTableModel(12, "1000012", "测试12", "0", "15666666666", "ry@qq.com", 120.0, "1"));
        users.add(new UserTableModel(13, "1000013", "测试13", "1", "15666666666", "ry@qq.com", 380.0, "1"));
        users.add(new UserTableModel(14, "1000014", "测试14", "0", "15666666666", "ry@qq.com", 280.0, "1"));
        users.add(new UserTableModel(15, "1000015", "测试15", "0", "15666666666", "ry@qq.com", 570.0, "1"));
        users.add(new UserTableModel(16, "1000016", "测试16", "1", "15666666666", "ry@qq.com", 260.0, "1"));
        users.add(new UserTableModel(17, "1000017", "测试17", "1", "15666666666", "ry@qq.com", 210.0, "1"));
        users.add(new UserTableModel(18, "1000018", "测试18", "1", "15666666666", "ry@qq.com", 340.0, "1"));
        users.add(new UserTableModel(19, "1000019", "测试19", "1", "15666666666", "ry@qq.com", 160.0, "1"));
        users.add(new UserTableModel(20, "1000020", "测试20", "1", "15666666666", "ry@qq.com", 220.0, "1"));
        users.add(new UserTableModel(21, "1000021", "测试21", "1", "15666666666", "ry@qq.com", 120.0, "1"));
        users.add(new UserTableModel(22, "1000022", "测试22", "1", "15666666666", "ry@qq.com", 130.0, "1"));
        users.add(new UserTableModel(23, "1000023", "测试23", "1", "15666666666", "ry@qq.com", 490.0, "1"));
        users.add(new UserTableModel(24, "1000024", "测试24", "1", "15666666666", "ry@qq.com", 570.0, "1"));
        users.add(new UserTableModel(25, "1000025", "测试25", "1", "15666666666", "ry@qq.com", 250.0, "1"));
        users.add(new UserTableModel(26, "1000026", "测试26", "1", "15666666666", "ry@qq.com", 250.0, "1"));
    }

    private final static List<AreaModel> areas = new ArrayList<AreaModel>();
    {
        areas.add(new AreaModel(1, 0, "广东省", "440000", "GDS", "GuangDongSheng", 1));
        areas.add(new AreaModel(2, 0, "湖南省", "430000", "HNS", "HuNanSheng", 1));
        areas.add(new AreaModel(3, 0, "河南省", "410000", "HNS", "HeNanSheng", 0));
        areas.add(new AreaModel(4, 0, "湖北省", "420000", "HBS", "HuBeiSheng", 0));
        areas.add(new AreaModel(5, 0, "辽宁省", "210000", "LNS", "LiaoNingSheng", 0));
        areas.add(new AreaModel(6, 0, "山东省", "370000", "SDS", "ShanDongSheng", 0));
        areas.add(new AreaModel(7, 0, "陕西省", "610000", "SXS", "ShanXiSheng", 0));
        areas.add(new AreaModel(8, 0, "贵州省", "520000", "GZS", "GuiZhouSheng", 0));
        areas.add(new AreaModel(9,  0, "上海市", "310000", "SHS", "ShangHaiShi", 0));
        areas.add(new AreaModel(10, 0, "重庆市", "500000", "CQS", "ChongQingShi", 0));
        areas.add(new AreaModel(11, 0, "若依省", "666666", "YYS", "RuoYiSheng", 0));
        areas.add(new AreaModel(12, 0, "安徽省", "340000", "AHS", "AnHuiSheng", 0));
        areas.add(new AreaModel(13, 0, "福建省", "350000", "FJS", "FuJianSheng", 0));
        areas.add(new AreaModel(14, 0, "海南省", "460000", "HNS", "HaiNanSheng", 0));
        areas.add(new AreaModel(15, 0, "江苏省", "320000", "JSS", "JiangSuSheng", 0));
        areas.add(new AreaModel(16, 0, "青海省", "630000", "QHS", "QingHaiSheng", 0));
        areas.add(new AreaModel(17, 0, "广西壮族自治区", "450000", "GXZZZZQ", "GuangXiZhuangZuZiZhiQu", 0));
        areas.add(new AreaModel(18, 0, "宁夏回族自治区", "640000", "NXHZZZQ", "NingXiaHuiZuZiZhiQu", 0));
        areas.add(new AreaModel(19, 0, "内蒙古自治区", "150000", "NMGZZQ", "NeiMengGuZiZhiQu", 0));
        areas.add(new AreaModel(20, 0, "新疆维吾尔自治区", "650000", "XJWWEZZQ", "XinJiangWeiWuErZiZhiQu", 0));
        areas.add(new AreaModel(21, 0, "江西省", "360000", "JXS", "JiangXiSheng", 0));
        areas.add(new AreaModel(22, 0, "浙江省", "330000", "ZJS", "ZheJiangSheng", 0));
        areas.add(new AreaModel(23, 0, "河北省", "130000", "HBS", "HeBeiSheng", 0));
        areas.add(new AreaModel(24, 0, "天津市", "120000", "TJS", "TianJinShi", 0));
        areas.add(new AreaModel(25, 0, "山西省", "140000", "SXS", "ShanXiSheng", 0));
        areas.add(new AreaModel(26, 0, "台湾省", "710000", "TWS", "TaiWanSheng", 0));
        areas.add(new AreaModel(27, 0, "甘肃省", "620000", "GSS", "GanSuSheng", 0));
        areas.add(new AreaModel(28, 0, "四川省", "510000", "SCS", "SiChuanSheng", 0));
        areas.add(new AreaModel(29, 0, "云南省", "530000", "YNS", "YunNanSheng", 0));
        areas.add(new AreaModel(30, 0, "北京市", "110000", "BJS", "BeiJingShi", 0));
        areas.add(new AreaModel(31, 0, "香港特别行政区", "810000", "XGTBXZQ", "XiangGangTeBieXingZhengQu", 0));
        areas.add(new AreaModel(32, 0, "澳门特别行政区", "820000", "AMTBXZQ", "AoMenTeBieXingZhengQu", 0));
        
        areas.add(new AreaModel(100, 1, "深圳市", "440300", "SZS", "ShenZhenShi", 1));
        areas.add(new AreaModel(101, 1, "广州市", "440100", "GZS", "GuangZhouShi", 0));
        areas.add(new AreaModel(102, 1, "东莞市", "441900", "DGS", "DongGuanShi", 0));
        areas.add(new AreaModel(103, 2, "长沙市", "410005", "CSS", "ChangShaShi", 1));
        areas.add(new AreaModel(104, 2, "岳阳市", "414000", "YYS", "YueYangShi", 0));
        
        areas.add(new AreaModel(1000, 100, "龙岗区", "518172", "LGQ", "LongGangQu", 0));
        areas.add(new AreaModel(1001, 100, "南山区", "518051", "NSQ", "NanShanQu", 0));
        areas.add(new AreaModel(1002, 100, "宝安区", "518101", "BAQ", "BaoAnQu", 0));
        areas.add(new AreaModel(1003, 100, "福田区", "518081", "FTQ", "FuTianQu", 0));
        areas.add(new AreaModel(1004, 103, "天心区", "410004", "TXQ", "TianXinQu", 0));
        areas.add(new AreaModel(1005, 103, "开福区", "410008", "KFQ", "KaiFuQu", 0));
        areas.add(new AreaModel(1006, 103, "芙蓉区", "410011", "FRQ", "FuRongQu", 0));
        areas.add(new AreaModel(1007, 103, "雨花区", "410011", "YHQ", "YuHuaQu", 0));
    }

    private final static List<UserTableColumn> columns = new ArrayList<UserTableColumn>();
    {
        columns.add(new UserTableColumn("用户ID", "userId"));
        columns.add(new UserTableColumn("用户编号", "userCode"));
        columns.add(new UserTableColumn("用户姓名", "userName"));
        columns.add(new UserTableColumn("用户手机", "userPhone"));
        columns.add(new UserTableColumn("用户邮箱", "userEmail"));
        columns.add(new UserTableColumn("用户状态", "status"));
    }
    
    private final static List<DocumentModel> documents = new ArrayList<DocumentModel>();
    {
        documents.add(new DocumentModel(1, "247-XW·2024-D10-0001", "新闻热线[2024]000001", "索尼射击游戏《Concord》停止运营,玩家将获全额退款", "索尼宣布多人射击游戏《Concord》将于9月6日停止运营,玩家将获得全额退款。游戏总监Ryan Ellis在给玩家的信中表示,这款游戏首次发布“并没有像我们预期的那样顺利”。《Concord》的开发历时8年,投资超过1.5亿美元。游戏在Steam平台的售价为40美元,采用买断制销售模式。据SteamDB统计,游戏上市后的最高同时在线人数为697人。"));
        documents.add(new DocumentModel(2, "247-XW·2024-D30-0002", "新闻热线[2024]000002", "网红账号被封,央媒:如此炫富毒瘤早就该拔了", "在社交平台上分享自己的生活日常,本来无可厚非。但无底线地展示物欲、宣扬拜金,取笑甚至嘲讽工薪者的烟火生活,就会遮蔽普通人的平凡质朴和坚韧奋斗,在无形中消解芸芸众生脚踏实地、自立自强的社会正气。对这种助长金钱至上、刺激公众焦虑,既污染网络生态,又撕裂社会和谐的炫富“毒瘤”,必须坚决拔除之。在国家有关部门的部署下,近日,多个网络平台开展“不良价值导向内容专项治理”行动,对“奢靡浪费”“炫富拜金”等问题从严打击,倡导理性、文明的消费观和价值观。"));
        documents.add(new DocumentModel(3, "CT01-XW·2024-Y-0003", "新闻热线[2024]000003", "重庆一夫妻被骗至缅甸,家属:两人已被解救,预计很快能回国", "5月25日,重庆一对夫妻在前往泰国后失联,疑被诈骗集团骗至缅甸的消息引发广泛关注。警方已对此事立案调查,而这对夫妻的亲属则每天生活在焦急和不安之中。亲属:家都瘫痪了,事情一经曝光,迅速登上了热搜,成为公众热议的话题。据了解,这对夫妻原计划是去泰国谈生意,但不幸的是,他们的泰国之行变成了一场噩梦。亲属李先生透露,4月14日,他们夫妻二人抵达泰国,不久后便疑似被人以10万元的价格卖到缅甸,目前被困在缅甸妙瓦底的一个电信诈骗园区。"));
        documents.add(new DocumentModel(4, "CT01-XW·2024-Y-0004", "新闻热线[2024]000004", "江滨社区联合派出所、金霞消防站开展电动自行车安全隐患夜查活动", "近日,长沙市开福区江滨社区联合派出所、金霞消防站深入居民小区、单位场所,以电动车自行车火灾防范为重点,开展消防安全夜查行动。此次夜查紧紧围绕老旧居民区、“三合一”场所、沿街门店、夜间经营使用场所等场所开展监督检查,重点检查电动自行车违规停放充电、堵塞疏散通道和安全出口,架空层违规作为电动自行车停放充电场所,电动自行车违规“进楼入户”“飞线充电”,电动自行车擅自改装等五大类问题。"));
        documents.add(new DocumentModel(5, "CT01-XW·2024-Y-0005", "新闻热线[2024]000005", "《黑神话》让海外玩家迷上“悟空”", "备受全球玩家瞩目的首款国产3A游戏《黑神话:悟空》日前正式发布。精美绝伦的东方美学世界、精彩纷呈的中国神话故事、酣畅淋漓的游戏体验,这款游戏为全球玩家带来一场视觉与文化的双重盛宴。从“悟空”成功出海的背后,海外人士看到了中国游戏产业的巨大进步,感受到了中国文化的多元精彩,并对下一个“悟空”的诞生及更多中国文化产品走向世界充满期待。"));
        documents.add(new DocumentModel(6, "CT01-XW·2024-Y-0006", "新闻热线[2024]000006", "市场状况充满挑战!极星宣布裁员全球约15%的员工", "据路透社报道,极星周五以“充满挑战的市场状况”为由,宣布计划在全球范围内裁减约450个职位。此次裁员之际,许多人都对电动汽车需求降温表示担忧,而且极星预计汽车业务最早将在2025年开始实现收支平衡。极星发言人表示:“作为该商业计划的一部分,我们需要调整我们的业务和运营规模。” “这涉及减少外部支出,遗憾的是,还包括我们的员工数量。”该公司还表示,希望减少对沃尔沃及其母公司吉利外部融资的依赖,最近还表示希望削减成本并提高电动汽车的利润率。"));
        documents.add(new DocumentModel(7, "CT01-XW·2024-Y-0007", "新闻热线[2024]000007", "浙江隐秘富豪涉百亿非法集资案,部分资金流入新造车公司", "5月10日、11日,上海北广投资管理有限公司(下称“北广投”)非法集资案在上海黄浦区人民法院一审公开开庭审理,北广投实控人周敏、法定代表人朱江等30余名中高管被控非法吸收公众存款罪。根据财新报道,这一案件中,非法集资的资金有部分流入了两家新能源车企——爱驰汽车、万象汽车。同时,有多位投资人引述与经侦部门沟通时的说法称,该案事发时未兑付金额有130余亿元,其中去往广微控股45亿元、万象汽车63亿元、爱驰汽车15亿元。"));
        documents.add(new DocumentModel(8, "CT01-XW·2024-Y-0008", "新闻热线[2024]000008", "特斯拉宣布Model Y升级:搭载HW4.0硬件,售价仍25.89万元起", "2月1日,特斯拉官方宣布ModelY升级。外观上,新增ModelY专属色“快银车漆”,并采用烈焰红代替中国红、星空灰代替冷光银;性能上,ModelY全系配备全新一代自动辅助驾驶硬件(HW4.0),通过搭载超远距离双目摄像头,ModelY的最远探测距离达424米。由此,特斯拉全系车型均配备了自动辅助驾驶硬件HW4.0。在售价方面,特斯拉中国官网显示,ModelY车型依然保持原价。ModelY后轮驱动版25.89万元起、ModelY长续航版29.99万元起、ModelY高性能版售价36.39万元起。"));
        documents.add(new DocumentModel(9, "CT01-XW·2024-D10-0009", "新闻热线[2024]000009", "华为手机归来,谁最受伤?", "低迷周期下的智能手机市场在2023年下半年迎来了华为的回归,这也给本就竞争激烈的市场环境带来了更大变数。1月29日,有消息称,华为已注册“星耀手机”品牌商标,定位中端手机市场,但上述消息并未获得华为方面确认。“目前星耀的相关信息我们看到了,但是没有获得产品信息以及启动线下铺货的通知。对于和其他品牌的二选一问题,听其他省份的经销商说过,但目前(华为渠道)这边也没有更多动作。”一位广东区域的华为核心经销商对记者说。但华为手机的反扑已经开始。在多家调研机构公布的2023年四季度智能手机出货数据中,华为手机的量正在明显上升,当季增幅在35%到47%之间。不过,从全年数据来看,并未登上前五榜单。"));
        documents.add(new DocumentModel(10, "CT01-XW·2024-D10-0010", "新闻热线[2024]000010", "疯狂裁员的硅谷大厂:除了AI,其它都是将就", "放眼望去,近期科技企业财报形势一片大好,裁员浪潮却仍在不断蔓延。国内职场动态看脉脉,那硅谷裁员情况就得看layoff.fyi了。数据显示,2024年,103家科技企业进行了裁员,28963位员工失去了饭碗。其中,电子支付公司PayPal大笔一挥,裁掉2500人,微软则在开年就裁掉1900人。回望2023年,谷歌、Meta、亚马逊、微软均为裁员重灾区,裁员人数在一万左右。具体而言,谷歌近日披露的财报指出,2023年谷歌解雇了12000多名员工,光是在遣散费和其他费用上就花费了21亿美元。而且裁员费用还在不断增加,2024年刚过去一个月,谷歌就已经花费了7亿美元用来裁员。"));
        documents.add(new DocumentModel(11, "CT01-XW·2024-D30-0011", "新闻热线[2024]000011", "国产手机品牌重新崛起背后:市场正在逐步恢复活力,竞争也愈发激烈", "2024年伊始,随着全球经济的逐渐复苏,手机消费市场也展现出勃勃生机。中国信通院最新数据显示,2023年中国市场手机出货量实现了6.5%的同比增长,其中5G手机增长势头更为强劲,占比高达82.8%。1月25日,国际数据公司(IDC)发布了最新手机季度跟踪报告,揭示了中国智能手机市场在2023年第四季度的出货量情况。报告显示,该季度中国智能手机市场出货量达到了约7363万台,同比增长1.2%。这是在连续十个季度同比下降后,中国智能手机市场首次实现反弹。这一积极信号表明,市场正在逐步恢复活力,各大品牌之间的竞争也愈发激烈。"));
        documents.add(new DocumentModel(12, "CT01-XW·2024-D30-0012", "新闻热线[2024]000012", "SpaceX将于1月31日向国际空间站发射天鹅号货运飞船", "1月29日消息,美国太空探索技术公司SpaceX计划于当地时间1月30日,利用“猎鹰9号”火箭从佛罗里达州肯尼迪航天中心发射诺斯罗普·格鲁曼公司的“天鹅号”货运飞船至国际空间站。此次任务是执行NG-20商业补给,将运送约8200多磅的物资、设备及科学实验器材。"));
    }

    /**
     * 搜索相关
     */
    @GetMapping("/search")
    public String search()
    {
        return prefix + "/search";
    }

    /**
     * 数据汇总
     */
    @GetMapping("/footer")
    public String footer()
    {
        return prefix + "/footer";
    }

    /**
     * 组合表头
     */
    @GetMapping("/groupHeader")
    public String groupHeader()
    {
        return prefix + "/groupHeader";
    }

    /**
     * 表格导出
     */
    @GetMapping("/export")
    public String export()
    {
        return prefix + "/export";
    }

    /**
     * 表格导出选择列
     */
    @GetMapping("/exportSelected")
    public String exportSelected()
    {
        return prefix + "/exportSelected";
    }

    /**
     * 导出数据
     */
    @PostMapping("/exportData")
    @ResponseBody
    public AjaxResult exportSelected(UserTableModel userModel, String userIds)
    {
        List<UserTableModel> userList = new ArrayList<UserTableModel>(Arrays.asList(new UserTableModel[users.size()]));
        Collections.copy(userList, users);

        // 条件过滤
        if (StringUtils.isNotEmpty(userIds))
        {
            userList.clear();
            for (Long userId : Convert.toLongArray(userIds))
            {
                for (UserTableModel user : users)
                {
                    if (user.getUserId() == userId)
                    {
                        userList.add(user);
                    }
                }
            }
        }
        ExcelUtil<UserTableModel> util = new ExcelUtil<UserTableModel>(UserTableModel.class);
        return util.exportExcel(userList, "用户数据");
    }

    /**
     * 翻页记住选择
     */
    @GetMapping("/remember")
    public String remember()
    {
        return prefix + "/remember";
    }

    /**
     * 表格保存状态
     */
    @GetMapping("/cookie")
    public String cookie()
    {
        return prefix + "/cookie";
    }

    /**
     * 跳转至指定页
     */
    @GetMapping("/pageGo")
    public String pageGo()
    {
        return prefix + "/pageGo";
    }

    /**
     * 自定义查询参数
     */
    @GetMapping("/params")
    public String params()
    {
        return prefix + "/params";
    }

    /**
     * 多表格
     */
    @GetMapping("/multi")
    public String multi()
    {
        return prefix + "/multi";
    }

    /**
     * 点击按钮加载表格
     */
    @GetMapping("/button")
    public String button()
    {
        return prefix + "/button";
    }

    /**
     * 直接加载表格数据
     */
    @GetMapping("/data")
    public String data(ModelMap mmap)
    {
        mmap.put("users", users);
        return prefix + "/data";
    }

    /**
     * 表格冻结列
     */
    @GetMapping("/fixedColumns")
    public String fixedColumns()
    {
        return prefix + "/fixedColumns";
    }

    /**
     * 自定义触发事件
     */
    @GetMapping("/event")
    public String event()
    {
        return prefix + "/event";
    }

    /**
     * 表格细节视图
     */
    @GetMapping("/detail")
    public String detail()
    {
        return prefix + "/detail";
    }

    /**
     * 表格父子视图
     */
    @GetMapping("/child")
    public String child()
    {
        return prefix + "/child";
    }

    /**
     * 表格图片预览
     */
    @GetMapping("/image")
    public String image()
    {
        return prefix + "/image";
    }

    /**
     * 动态增删改查
     */
    @GetMapping("/curd")
    public String curd()
    {
        return prefix + "/curd";
    }

    /**
     * 表格行拖拽操作
     */
    @GetMapping("/reorderRows")
    public String reorderRows()
    {
        return prefix + "/reorderRows";
    }

    /**
     * 表格列拖拽操作
     */
    @GetMapping("/reorderColumns")
    public String reorderColumns()
    {
        return prefix + "/reorderColumns";
    }

    /**
     * 表格列宽拖动
     */
    @GetMapping("/resizable")
    public String resizable()
    {
        return prefix + "/resizable";
    }

    /**
     * 表格行内编辑操作
     */
    @GetMapping("/editable")
    public String editable()
    {
        return prefix + "/editable";
    }

    /**
     * 主子表提交
     */
    @GetMapping("/subdata")
    public String subdata()
    {
        return prefix + "/subdata";
    }

    /**
     * 表格自动刷新
     */
    @GetMapping("/refresh")
    public String refresh()
    {
        return prefix + "/refresh";
    }

    /**
     * 表格打印配置
     */
    @GetMapping("/print")
    public String print()
    {
        return prefix + "/print";
    }

    /**
     * 表格标题格式化
     */
    @GetMapping("/headerStyle")
    public String headerStyle()
    {
        return prefix + "/headerStyle";
    }

    /**
     * 表格动态列
     */
    @GetMapping("/dynamicColumns")
    public String dynamicColumns()
    {
        return prefix + "/dynamicColumns";
    }

    /**
     * 表格虚拟滚动
     */
    @GetMapping("/virtualScroll")
    public String virtualScroll()
    {
        return prefix + "/virtualScroll";
    }

    /**
     * 自定义视图分页
     */
    @GetMapping("/customView")
    public String customView()
    {
        return prefix + "/customView";
    }

    /**
     * 全文索引
     */
    @GetMapping("/textSearch")
    public String textSearch()
    {
        return prefix + "/textSearch";
    }

    /**
     * 异步加载表格树
     */
    @GetMapping("/asynTree")
    public String asynTree()
    {
        return prefix + "/asynTree";
    }

    /**
     * 表格其他操作
     */
    @GetMapping("/other")
    public String other()
    {
        return prefix + "/other";
    }

    /**
     * 动态获取列
     */
    @PostMapping("/ajaxColumns")
    @ResponseBody
    public AjaxResult ajaxColumns(UserTableColumn userColumn)
    {
        List<UserTableColumn> columnList = new ArrayList<UserTableColumn>(Arrays.asList(new UserTableColumn[columns.size()]));
        Collections.copy(columnList, columns);
        if (userColumn != null && "userBalance".equals(userColumn.getField()))
        {
            columnList.add(new UserTableColumn("用户余额", "userBalance"));
        }
        return AjaxResult.success(columnList);
    }

    /**
     * 查询数据
     */
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(UserTableModel userModel)
    {
        TableDataInfo rspData = new TableDataInfo();
        List<UserTableModel> userList = new ArrayList<UserTableModel>(Arrays.asList(new UserTableModel[users.size()]));
        Collections.copy(userList, users);
        // 查询条件过滤
        if (StringUtils.isNotEmpty(userModel.getUserName()))
        {
            userList.clear();
            for (UserTableModel user : users)
            {
                if (user.getUserName().equals(userModel.getUserName()))
                {
                    userList.add(user);
                }
            }
        }
        PageDomain pageDomain = TableSupport.buildPageRequest();
        if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize())
        {
            rspData.setRows(userList);
            rspData.setTotal(userList.size());
            return rspData;
        }
        Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
        Integer pageSize = pageDomain.getPageNum() * 10;
        if (pageSize > userList.size())
        {
            pageSize = userList.size();
        }
        rspData.setRows(userList.subList(pageNum, pageSize));
        rspData.setTotal(userList.size());
        return rspData;
    }

    /**
     * 查询全文索引数据
     */
    @PostMapping("/text/list")
    @ResponseBody
    public TableDataInfo textList(BaseEntity baseEntity)
    {
        TableDataInfo rspData = new TableDataInfo();
        List<DocumentModel> documentList = new ArrayList<DocumentModel>(Arrays.asList(new DocumentModel[documents.size()]));
        Collections.copy(documentList, documents);
        // 查询条件过滤
        if (StringUtils.isNotEmpty(baseEntity.getSearchValue()))
        {
            documentList.clear();
            for (DocumentModel document : documents)
            {
                boolean indexFlag = false;
                if (document.getTitle().contains(baseEntity.getSearchValue()))
                {
                    indexFlag = true;
                    document.setTitle(document.getTitle().replace(baseEntity.getSearchValue(), "<font color=\"red\">" + baseEntity.getSearchValue() + "</font>"));
                }
                if (document.getContent().contains(baseEntity.getSearchValue()))
                {
                    indexFlag = true;
                    document.setContent(document.getContent().replace(baseEntity.getSearchValue(), "<font color=\"red\">" + baseEntity.getSearchValue() + "</font>"));
                }
                if (indexFlag)
                {
                    documentList.add(document);
                }
            }
        }
        PageDomain pageDomain = TableSupport.buildPageRequest();
        if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize())
        {
            rspData.setRows(documentList);
            rspData.setTotal(documentList.size());
            return rspData;
        }
        Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
        Integer pageSize = pageDomain.getPageNum() * 10;
        if (pageSize > documentList.size())
        {
            pageSize = documentList.size();
        }
        rspData.setRows(documentList.subList(pageNum, pageSize));
        rspData.setTotal(documentList.size());
        return rspData;
    }

    /**
     * 查询树表数据
     */
    @PostMapping("/tree/list")
    @ResponseBody
    public TableDataInfo treeList(AreaModel areaModel)
    {
        TableDataInfo rspData = new TableDataInfo();
        List<AreaModel> areaList = new ArrayList<AreaModel>(Arrays.asList(new AreaModel[areas.size()]));
        // 默认查询条件 parentId 0
        Collections.copy(areaList, areas);
        areaList.clear();
        if (StringUtils.isNotEmpty(areaModel.getAreaName()))
        {
            for (AreaModel area : areas)
            {
                if (area.getParentId() == 0 && area.getAreaName().equals(areaModel.getAreaName()))
                {
                    areaList.add(area);
                }
            }
        }
        else
        {
            for (AreaModel area : areas)
            {
                if (area.getParentId() == 0)
                {
                    areaList.add(area);
                }
            }
        }
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = (pageDomain.getPageNum() - 1) * pageDomain.getPageSize();
        Integer pageSize = pageDomain.getPageNum() * pageDomain.getPageSize();
        if (pageSize > areaList.size())
        {
            pageSize = areaList.size();
        }
        rspData.setRows(areaList.subList(pageNum, pageSize));
        rspData.setTotal(areaList.size());
        return rspData;
    }

    /**
     * 查询树表子节点数据
     */
    @PostMapping("/tree/listChild")
    @ResponseBody
    public List<AreaModel> listChild(AreaModel areaModel)
    {
        List<AreaModel> areaList = new ArrayList<AreaModel>(Arrays.asList(new AreaModel[areas.size()]));
        // 查询条件 parentId
        Collections.copy(areaList, areas);
        areaList.clear();
        if (StringUtils.isNotEmpty(areaModel.getAreaName()))
        {
            for (AreaModel area : areas)
            {
                if (area.getParentId().intValue() == areaModel.getParentId().intValue() && area.getAreaName().equals(areaModel.getAreaName()))
                {
                    areaList.add(area);
                }
            }
        }
        else
        {
            for (AreaModel area : areas)
            {
                if (area.getParentId().intValue() == areaModel.getParentId().intValue())
                {
                    areaList.add(area);
                }
            }
        }
        return areaList;
    }
}

class UserTableColumn
{
    /** 表头 */
    private String title;
    /** 字段 */
    private String field;

    public UserTableColumn()
    {

    }

    public UserTableColumn(String title, String field)
    {
        this.title = title;
        this.field = field;
    }

    public String getTitle()
    {
        return title;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public String getField()
    {
        return field;
    }

    public void setField(String field)
    {
        this.field = field;
    }
}

class UserTableModel
{
    /** 用户ID */
    private int userId;

    /** 用户编号 */
    @Excel(name = "用户编号", cellType = ColumnType.NUMERIC)
    private String userCode;

    /** 用户姓名 */
    @Excel(name = "用户姓名")
    private String userName;

    /** 用户性别 */
    private String userSex;

    /** 用户手机 */
    @Excel(name = "用户手机")
    private String userPhone;

    /** 用户邮箱 */
    @Excel(name = "用户邮箱")
    private String userEmail;

    /** 用户余额 */
    @Excel(name = "用户余额", cellType = ColumnType.NUMERIC)
    private double userBalance;

    /** 用户状态(0正常 1停用) */
    private String status;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    public UserTableModel()
    {

    }

    public UserTableModel(int userId, String userCode, String userName, String userSex, String userPhone,
            String userEmail, double userBalance, String status)
    {
        this.userId = userId;
        this.userCode = userCode;
        this.userName = userName;
        this.userSex = userSex;
        this.userPhone = userPhone;
        this.userEmail = userEmail;
        this.userBalance = userBalance;
        this.status = status;
        this.createTime = DateUtils.getNowDate();
    }

    public int getUserId()
    {
        return userId;
    }

    public void setUserId(int userId)
    {
        this.userId = userId;
    }

    public String getUserCode()
    {
        return userCode;
    }

    public void setUserCode(String userCode)
    {
        this.userCode = userCode;
    }

    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String userName)
    {
        this.userName = userName;
    }

    public String getUserSex()
    {
        return userSex;
    }

    public void setUserSex(String userSex)
    {
        this.userSex = userSex;
    }

    public String getUserPhone()
    {
        return userPhone;
    }

    public void setUserPhone(String userPhone)
    {
        this.userPhone = userPhone;
    }

    public String getUserEmail()
    {
        return userEmail;
    }

    public void setUserEmail(String userEmail)
    {
        this.userEmail = userEmail;
    }

    public double getUserBalance()
    {
        return userBalance;
    }

    public void setUserBalance(double userBalance)
    {
        this.userBalance = userBalance;
    }

    public String getStatus()
    {
        return status;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public Date getCreateTime()
    {
        return createTime;
    }

    public void setCreateTime(Date createTime)
    {
        this.createTime = createTime;
    }
}
class AreaModel
{
    /** 编号 */
    private Long id;

    /** 父编号 */
    private Long parentId;

    /** 区域名称 */
    private String areaName;

    /** 区域代码 */
    private String areaCode;

    /** 名称首字母 */
    private String simplePy;

    /** 名称全拼 */
    private String pinYin;

    /** 是否有子节点(0无 1有) */
    private Integer isTreeLeaf = 1;

    public AreaModel()
    {

    }

    public AreaModel(int id, int parentId, String areaName, String areaCode, String simplePy, String pinYin, Integer isTreeLeaf)
    {
        this.id = Long.valueOf(id);
        this.parentId = Long.valueOf(parentId);
        this.areaName = areaName;
        this.areaCode = areaCode;
        this.simplePy = simplePy;
        this.pinYin = pinYin;
        this.isTreeLeaf = isTreeLeaf;
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public Long getParentId()
    {
        return parentId;
    }

    public void setParentId(Long parentId)
    {
        this.parentId = parentId;
    }

    public String getAreaName()
    {
        return areaName;
    }

    public void setAreaName(String areaName)
    {
        this.areaName = areaName;
    }

    public String getAreaCode()
    {
        return areaCode;
    }

    public void setAreaCode(String areaCode)
    {
        this.areaCode = areaCode;
    }

    public String getSimplePy()
    {
        return simplePy;
    }

    public void setSimplePy(String simplePy)
    {
        this.simplePy = simplePy;
    }

    public String getPinYin()
    {
        return pinYin;
    }

    public void setPinYin(String pinYin)
    {
        this.pinYin = pinYin;
    }

    public Integer getIsTreeLeaf()
    {
        return isTreeLeaf;
    }

    public void setIsTreeLeaf(Integer isTreeLeaf)
    {
        this.isTreeLeaf = isTreeLeaf;
    }
}

class DocumentModel
{
    /** 编号 */
    private int tableId;

    /** 档号 */
    private String archiveNo;

    /** 文件编号 */
    private String docNo;

    /** 标题 */
    private String title;

    /** 内容 */
    private String content;

    public DocumentModel()
    {

    }

    public DocumentModel(int tableId, String archiveNo, String docNo, String title, String content)
    {
        this.tableId = tableId;
        this.archiveNo = archiveNo;
        this.docNo = docNo;
        this.title = title;
        this.content = content;
    }

    public int getTableId()
    {
        return tableId;
    }

    public String getArchiveNo()
    {
        return archiveNo;
    }

    public String getDocNo()
    {
        return docNo;
    }

    public String getTitle()
    {
        return title;
    }

    public String getContent()
    {
        return content;
    }

    public void setTableId(int tableId)
    {
        this.tableId = tableId;
    }

    public void setArchiveNo(String archiveNo)
    {
        this.archiveNo = archiveNo;
    }

    public void setDocNo(String docNo)
    {
        this.docNo = docNo;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public void setContent(String content)
    {
        this.content = content;
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/CustomerModel.java
================================================
package com.ruoyi.web.controller.demo.domain;

import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 客户测试信息
 * 
 * @author ruoyi
 */
public class CustomerModel
{
    /**
     * 客户姓名
     */
    private String name;

    /**
     * 客户手机
     */
    private String phonenumber;

    /**
     * 客户性别
     */
    private String sex;

    /**
     * 客户生日
     */
    private String birthday;

    /**
     * 客户描述
     */
    private String remark;

    /**
     * 商品信息
     */
    private List<GoodsModel> goods;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getPhonenumber()
    {
        return phonenumber;
    }

    public void setPhonenumber(String phonenumber)
    {
        this.phonenumber = phonenumber;
    }


    public String getSex()
    {
        return sex;
    }

    public void setSex(String sex)
    {
        this.sex = sex;
    }

    public String getBirthday()
    {
        return birthday;
    }

    public void setBirthday(String birthday)
    {
        this.birthday = birthday;
    }

    public String getRemark()
    {
        return remark;
    }

    public void setRemark(String remark)
    {
        this.remark = remark;
    }

    public List<GoodsModel> getGoods()
    {
        return goods;
    }

    public void setGoods(List<GoodsModel> goods)
    {
        this.goods = goods;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("name", getName())
            .append("phonenumber", getPhonenumber())
            .append("sex", getSex())
            .append("birthday", getBirthday())
            .append("goods", getGoods())
            .append("remark", getRemark())
            .toString();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/GoodsModel.java
================================================
package com.ruoyi.web.controller.demo.domain;

import java.util.Date;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 商品测试信息
 * 
 * @author ruoyi
 */
public class GoodsModel
{
    /**
     * 商品名称
     */
    private String name;

    /**
     * 商品重量
     */
    private Integer weight;

    /**
     * 商品价格
     */
    private Double price;
    
    /**
     * 商品日期
     */
    private Date date;

    /**
     * 商品种类
     */
    private String type;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public Integer getWeight()
    {
        return weight;
    }

    public void setWeight(Integer weight)
    {
        this.weight = weight;
    }

    public Double getPrice()
    {
        return price;
    }

    public void setPrice(Double price)
    {
        this.price = price;
    }

    public Date getDate()
    {
        return date;
    }

    public void setDate(Date date)
    {
        this.date = date;
    }

    public String getType()
    {
        return type;
    }

    public void setType(String type)
    {
        this.type = type;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("name", getName())
            .append("weight", getWeight())
            .append("price", getPrice())
            .append("date", getDate())
            .append("type", getType())
            .toString();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/UserOperateModel.java
================================================
package com.ruoyi.web.controller.demo.domain;

import java.util.Date;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.utils.DateUtils;

public class UserOperateModel extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    private int userId;

    @Excel(name = "用户编号")
    private String userCode;

    @Excel(name = "用户姓名")
    private String userName;

    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
    private String userSex;

    @Excel(name = "用户手机")
    private String userPhone;

    @Excel(name = "用户邮箱")
    private String userEmail;

    @Excel(name = "用户余额")
    private double userBalance;

    @Excel(name = "用户状态", readConverterExp = "0=正常,1=停用")
    private String status;

    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    private Date createTime;

    public UserOperateModel()
    {

    }

    public UserOperateModel(int userId, String userCode, String userName, String userSex, String userPhone,
            String userEmail, double userBalance, String status)
    {
        this.userId = userId;
        this.userCode = userCode;
        this.userName = userName;
        this.userSex = userSex;
        this.userPhone = userPhone;
        this.userEmail = userEmail;
        this.userBalance = userBalance;
        this.status = status;
        this.createTime = DateUtils.getNowDate();
    }

    public int getUserId()
    {
        return userId;
    }

    public void setUserId(int userId)
    {
        this.userId = userId;
    }

    public String getUserCode()
    {
        return userCode;
    }

    public void setUserCode(String userCode)
    {
        this.userCode = userCode;
    }

    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String userName)
    {
        this.userName = userName;
    }

    public String getUserSex()
    {
        return userSex;
    }

    public void setUserSex(String userSex)
    {
        this.userSex = userSex;
    }

    public String getUserPhone()
    {
        return userPhone;
    }

    public void setUserPhone(String userPhone)
    {
        this.userPhone = userPhone;
    }

    public String getUserEmail()
    {
        return userEmail;
    }

    public void setUserEmail(String userEmail)
    {
        this.userEmail = userEmail;
    }

    public double getUserBalance()
    {
        return userBalance;
    }

    public void setUserBalance(double userBalance)
    {
        this.userBalance = userBalance;
    }

    public String getStatus()
    {
        return status;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    @Override
    public Date getCreateTime()
    {
        return createTime;
    }

    @Override
    public void setCreateTime(Date createTime)
    {
        this.createTime = createTime;
    }
}

================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
================================================
package com.ruoyi.web.controller.monitor;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.framework.web.service.CacheService;

/**
 * 缓存监控
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/monitor/cache")
public class CacheController extends BaseController
{
    private String prefix = "monitor/cache";

    @Autowired
    private CacheService cacheService;

    @RequiresPermissions("monitor:cache:view")
    @GetMapping()
    public String cache(ModelMap mmap)
    {
        mmap.put("cacheNames", cacheService.getCacheNames());
        return prefix + "/cache";
    }

    @RequiresPermissions("monitor:cache:view")
    @PostMapping("/getNames")
    public String getCacheNames(ModelMap mmap)
    {
        mmap.put("cacheNames", cacheService.getCacheNames());
        return prefix + "/cache::fragment-cache-names";
    }

    @RequiresPermissions("monitor:cache:view")
    @PostMapping("/getKeys")
    public String getCacheKeys(String cacheName, ModelMap mmap)
    {
        mmap.put("cacheName", cacheName);
        mmap.put("cacheKeys", cacheService.getCacheKeys(cacheName));
        return prefix + "/cache::fragment-cache-kyes";
    }

    @RequiresPermissions("monitor:cache:view")
    @PostMapping("/getValue")
    public String getCacheValue(String cacheName, String cacheKey, ModelMap mmap)
    {
        mmap.put("cacheName", cacheName);
        mmap.put("cacheKey", cacheKey);
        mmap.put("cacheValue", cacheService.getCacheValue(cacheName, cacheKey));
        return prefix + "/cache::fragment-cache-value";
    }

    @RequiresPermissions("monitor:cache:view")
    @PostMapping("/clearCacheName")
    @ResponseBody
    public AjaxResult clearCacheName(String cacheName, ModelMap mmap)
    {
        cacheService.clearCacheName(cacheName);
        return AjaxResult.success();
    }

    @RequiresPermissions("monitor:cache:view")
    @PostMapping("/clearCacheKey")
    @ResponseBody
    public AjaxResult clearCacheKey(String cacheName, String cacheKey, ModelMap mmap)
    {
        cacheService.clearCacheKey(cacheName, cacheKey);
        return AjaxResult.success();
    }

    @RequiresPermissions("monitor:cache:view")
    @GetMapping("/clearAll")
    @ResponseBody
    public AjaxResult clearAll(ModelMap mmap)
    {
        cacheService.clearAll();
        return AjaxResult.success();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/DruidController.java
================================================
package com.ruoyi.web.controller.monitor;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.core.controller.BaseController;

/**
 * druid 监控
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/monitor/data")
public class DruidController extends BaseController
{
    private String prefix = "/druid";

    @RequiresPermissions("monitor:data:view")
    @GetMapping()
    public String index()
    {
        return redirect(prefix + "/index.html");
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
================================================
package com.ruoyi.web.controller.monitor;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.framework.web.domain.Server;

/**
 * 服务器监控
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/monitor/server")
public class ServerController extends BaseController
{
    private String prefix = "monitor/server";

    @RequiresPermissions("monitor:server:view")
    @GetMapping()
    public String server(ModelMap mmap) throws Exception
    {
        Server server = new Server();
        server.copyTo();
        mmap.put("server", server);
        return prefix + "/server";
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
================================================
package com.ruoyi.web.controller.monitor;

import java.util.List;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysLogininfor;
import com.ruoyi.system.service.ISysLogininforService;

/**
 * 系统访问记录
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/monitor/logininfor")
public class SysLogininforController extends BaseController
{
    private String prefix = "monitor/logininfor";

    @Autowired
    private ISysLogininforService logininforService;

    @Autowired
    private SysPasswordService passwordService;

    @RequiresPermissions("monitor:logininfor:view")
    @GetMapping()
    public String logininfor()
    {
        return prefix + "/logininfor";
    }

    @RequiresPermissions("monitor:logininfor:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysLogininfor logininfor)
    {
        startPage();
        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
        return getDataTable(list);
    }

    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
    @RequiresPermissions("monitor:logininfor:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysLogininfor logininfor)
    {
        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
        return util.exportExcel(list, "登录日志");
    }

    @RequiresPermissions("monitor:logininfor:remove")
    @Log(title = "登录日志", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        return toAjax(logininforService.deleteLogininforByIds(ids));
    }
    
    @RequiresPermissions("monitor:logininfor:remove")
    @Log(title = "登录日志", businessType = BusinessType.CLEAN)
    @PostMapping("/clean")
    @ResponseBody
    public AjaxResult clean()
    {
        logininforService.cleanLogininfor();
        return success();
    }

    @RequiresPermissions("monitor:logininfor:unlock")
    @Log(title = "账户解锁", businessType = BusinessType.OTHER)
    @PostMapping("/unlock")
    @ResponseBody
    public AjaxResult unlock(String loginName)
    {
        passwordService.clearLoginRecordCache(loginName);
        return success();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
================================================
package com.ruoyi.web.controller.monitor;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.system.service.ISysOperLogService;

/**
 * 操作日志记录
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/monitor/operlog")
public class SysOperlogController extends BaseController
{
    private String prefix = "monitor/operlog";

    @Autowired
    private ISysOperLogService operLogService;

    @RequiresPermissions("monitor:operlog:view")
    @GetMapping()
    public String operlog()
    {
        return prefix + "/operlog";
    }

    @RequiresPermissions("monitor:operlog:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysOperLog operLog)
    {
        startPage();
        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
        return getDataTable(list);
    }

    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
    @RequiresPermissions("monitor:operlog:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysOperLog operLog)
    {
        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
        return util.exportExcel(list, "操作日志");
    }

    @Log(title = "操作日志", businessType = BusinessType.DELETE)
    @RequiresPermissions("monitor:operlog:remove")
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        return toAjax(operLogService.deleteOperLogByIds(ids));
    }

    @RequiresPermissions("monitor:operlog:detail")
    @GetMapping("/detail/{operId}")
    public String detail(@PathVariable("operId") Long operId, ModelMap mmap)
    {
        mmap.put("operLog", operLogService.selectOperLogById(operId));
        return prefix + "/detail";
    }
    
    @Log(title = "操作日志", businessType = BusinessType.CLEAN)
    @RequiresPermissions("monitor:operlog:remove")
    @PostMapping("/clean")
    @ResponseBody
    public AjaxResult clean()
    {
        operLogService.cleanOperLog();
        return success();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
================================================
package com.ruoyi.web.controller.monitor;

import java.util.List;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.session.OnlineSession;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.OnlineStatus;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.service.ISysUserOnlineService;

/**
 * 在线用户监控
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/monitor/online")
public class SysUserOnlineController extends BaseController
{
    private String prefix = "monitor/online";

    @Autowired
    private ISysUserOnlineService userOnlineService;

    @Autowired
    private OnlineSessionDAO onlineSessionDAO;

    @RequiresPermissions("monitor:online:view")
    @GetMapping()
    public String online()
    {
        return prefix + "/online";
    }

    @RequiresPermissions("monitor:online:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysUserOnline userOnline)
    {
        startPage();
        List<SysUserOnline> list = userOnlineService.selectUserOnlineList(userOnline);
        return getDataTable(list);
    }

    @RequiresPermissions(value = { "monitor:online:batchForceLogout", "monitor:online:forceLogout" }, logical = Logical.OR)
    @Log(title = "在线用户", businessType = BusinessType.FORCE)
    @PostMapping("/batchForceLogout")
    @ResponseBody
    public AjaxResult batchForceLogout(String ids)
    {
        for (String sessionId : Convert.toStrArray(ids))
        {
            SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
            if (online == null)
            {
                return error("用户已下线");
            }
            OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
            if (onlineSession == null)
            {
                return error("用户已下线");
            }
            if (sessionId.equals(ShiroUtils.getSessionId()))
            {
                return error("当前登录用户无法强退");
            }
            onlineSessionDAO.delete(onlineSession);
            online.setStatus(OnlineStatus.off_line);
            userOnlineService.saveOnline(online);
            userOnlineService.removeUserCache(online.getLoginName(), sessionId);
        }
        return success();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysCaptchaController.java
================================================
package com.ruoyi.web.controller.system;

import java.awt.image.BufferedImage;
import java.io.IOException;
import jakarta.annotation.Resource;
import javax.imageio.ImageIO;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import com.ruoyi.common.core.controller.BaseController;

/**
 * 图片验证码(支持算术形式)
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/captcha")
public class SysCaptchaController extends BaseController
{
    @Resource(name = "captchaProducer")
    private Producer captchaProducer;

    @Resource(name = "captchaProducerMath")
    private Producer captchaProducerMath;

    /**
     * 验证码生成
     */
    @GetMapping(value = "/captchaImage")
    public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response)
    {
        ServletOutputStream out = null;
        try
        {
            HttpSession session = request.getSession();
            response.setDateHeader("Expires", 0);
            response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
            response.addHeader("Cache-Control", "post-check=0, pre-check=0");
            response.setHeader("Pragma", "no-cache");
            response.setContentType("image/jpeg");

            String type = request.getParameter("type");
            String capStr = null;
            String code = null;
            BufferedImage bi = null;
            if ("math".equals(type))
            {
                String capText = captchaProducerMath.createText();
                capStr = capText.substring(0, capText.lastIndexOf("@"));
                code = capText.substring(capText.lastIndexOf("@") + 1);
                bi = captchaProducerMath.createImage(capStr);
            }
            else if ("char".equals(type))
            {
                capStr = code = captchaProducer.createText();
                bi = captchaProducer.createImage(capStr);
            }
            session.setAttribute(Constants.KAPTCHA_SESSION_KEY, code);
            out = response.getOutputStream();
            ImageIO.write(bi, "jpg", out);
            out.flush();

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if (out != null)
                {
                    out.close();
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        return null;
    }
}

================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;

/**
 * 参数配置 信息操作处理
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/config")
public class SysConfigController extends BaseController
{
    private String prefix = "system/config";

    @Autowired
    private ISysConfigService configService;

    @RequiresPermissions("system:config:view")
    @GetMapping()
    public String config()
    {
        return prefix + "/config";
    }

    /**
     * 查询参数配置列表
     */
    @RequiresPermissions("system:config:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysConfig config)
    {
        startPage();
        List<SysConfig> list = configService.selectConfigList(config);
        return getDataTable(list);
    }

    @Log(title = "参数管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:config:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysConfig config)
    {
        List<SysConfig> list = configService.selectConfigList(config);
        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
        return util.exportExcel(list, "参数数据");
    }

    /**
     * 新增参数配置
     */
    @RequiresPermissions("system:config:add")
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 新增保存参数配置
     */
    @RequiresPermissions("system:config:add")
    @Log(title = "参数管理", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysConfig config)
    {
        if (!configService.checkConfigKeyUnique(config))
        {
            return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
        }
        config.setCreateBy(getLoginName());
        return toAjax(configService.insertConfig(config));
    }

    /**
     * 修改参数配置
     */
    @RequiresPermissions("system:config:edit")
    @GetMapping("/edit/{configId}")
    public String edit(@PathVariable("configId") Long configId, ModelMap mmap)
    {
        mmap.put("config", configService.selectConfigById(configId));
        return prefix + "/edit";
    }

    /**
     * 修改保存参数配置
     */
    @RequiresPermissions("system:config:edit")
    @Log(title = "参数管理", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysConfig config)
    {
        if (!configService.checkConfigKeyUnique(config))
        {
            return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
        }
        config.setUpdateBy(getLoginName());
        return toAjax(configService.updateConfig(config));
    }

    /**
     * 删除参数配置
     */
    @RequiresPermissions("system:config:remove")
    @Log(title = "参数管理", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        configService.deleteConfigByIds(ids);
        return success();
    }

    /**
     * 刷新参数缓存
     */
    @RequiresPermissions("system:config:remove")
    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
    @GetMapping("/refreshCache")
    @ResponseBody
    public AjaxResult refreshCache()
    {
        configService.resetConfigCache();
        return success();
    }

    /**
     * 校验参数键名
     */
    @PostMapping("/checkConfigKeyUnique")
    @ResponseBody
    public boolean checkConfigKeyUnique(SysConfig config)
    {
        return configService.checkConfigKeyUnique(config);
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysDeptService;

/**
 * 部门信息
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/dept")
public class SysDeptController extends BaseController
{
    private String prefix = "system/dept";

    @Autowired
    private ISysDeptService deptService;

    @RequiresPermissions("system:dept:view")
    @GetMapping()
    public String dept()
    {
        return prefix + "/dept";
    }

    @RequiresPermissions("system:dept:list")
    @PostMapping("/list")
    @ResponseBody
    public List<SysDept> list(SysDept dept)
    {
        List<SysDept> deptList = deptService.selectDeptList(dept);
        return deptList;
    }

    /**
     * 新增部门
     */
    @RequiresPermissions("system:dept:add")
    @GetMapping("/add/{parentId}")
    public String add(@PathVariable("parentId") Long parentId, ModelMap mmap)
    {
        if (!getSysUser().isAdmin())
        {
            parentId = getSysUser().getDeptId();
        }
        mmap.put("dept", deptService.selectDeptById(parentId));
        return prefix + "/add";
    }

    /**
     * 新增保存部门
     */
    @Log(title = "部门管理", businessType = BusinessType.INSERT)
    @RequiresPermissions("system:dept:add")
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysDept dept)
    {
        if (!deptService.checkDeptNameUnique(dept))
        {
            return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
        }
        dept.setCreateBy(getLoginName());
        return toAjax(deptService.insertDept(dept));
    }

    /**
     * 修改部门
     */
    @RequiresPermissions("system:dept:edit")
    @GetMapping("/edit/{deptId}")
    public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap)
    {
        deptService.checkDeptDataScope(deptId);
        SysDept dept = deptService.selectDeptById(deptId);
        if (StringUtils.isNotNull(dept) && 100L == deptId)
        {
            dept.setParentName("无");
        }
        mmap.put("dept", dept);
        return prefix + "/edit";
    }

    /**
     * 修改保存部门
     */
    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
    @RequiresPermissions("system:dept:edit")
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysDept dept)
    {
        Long deptId = dept.getDeptId();
        deptService.checkDeptDataScope(deptId);
        if (!deptService.checkDeptNameUnique(dept))
        {
            return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
        }
        else if (dept.getParentId().equals(deptId))
        {
            return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
        }
        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
        {
            return AjaxResult.error("该部门包含未停用的子部门!");
        }
        dept.setUpdateBy(getLoginName());
        return toAjax(deptService.updateDept(dept));
    }

    /**
     * 删除
     */
    @Log(title = "部门管理", businessType = BusinessType.DELETE)
    @RequiresPermissions("system:dept:remove")
    @GetMapping("/remove/{deptId}")
    @ResponseBody
    public AjaxResult remove(@PathVariable("deptId") Long deptId)
    {
        if (deptService.selectDeptCount(deptId) > 0)
        {
            return AjaxResult.warn("存在下级部门,不允许删除");
        }
        if (deptService.checkDeptExistUser(deptId))
        {
            return AjaxResult.warn("部门存在用户,不允许删除");
        }
        deptService.checkDeptDataScope(deptId);
        return toAjax(deptService.deleteDeptById(deptId));
    }

    /**
     * 校验部门名称
     */
    @PostMapping("/checkDeptNameUnique")
    @ResponseBody
    public boolean checkDeptNameUnique(SysDept dept)
    {
        return deptService.checkDeptNameUnique(dept);
    }

    /**
     * 选择部门树
     * 
     * @param deptId 部门ID
     * @param excludeId 排除ID
     */
    @RequiresPermissions("system:dept:list")
    @GetMapping(value = { "/selectDeptTree/{deptId}", "/selectDeptTree/{deptId}/{excludeId}" })
    public String selectDeptTree(@PathVariable("deptId") Long deptId, @PathVariable(value = "excludeId", required = false) Long excludeId, ModelMap mmap)
    {
        mmap.put("dept", deptService.selectDeptById(deptId));
        mmap.put("excludeId", excludeId);
        return prefix + "/tree";
    }

    /**
     * 加载部门列表树(排除下级)
     */
    @RequiresPermissions("system:dept:list")
    @GetMapping("/treeData/{excludeId}")
    @ResponseBody
    public List<Ztree> treeDataExcludeChild(@PathVariable(value = "excludeId", required = false) Long excludeId)
    {
        SysDept dept = new SysDept();
        dept.setExcludeId(excludeId);
        List<Ztree> ztrees = deptService.selectDeptTreeExcludeChild(dept);
        return ztrees;
    }

    /**
     * 保存部门排序
     */
    @PostMapping("/updateSort")
    @ResponseBody
    public AjaxResult updateSort(@RequestParam String[] deptIds, @RequestParam String[] orderNums)
    {
        deptService.updateDeptSort(deptIds, orderNums);
        return success();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.ISysDictDataService;

/**
 * 数据字典信息
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/dict/data")
public class SysDictDataController extends BaseController
{
    private String prefix = "system/dict/data";

    @Autowired
    private ISysDictDataService dictDataService;

    @RequiresPermissions("system:dict:view")
    @GetMapping()
    public String dictData()
    {
        return prefix + "/data";
    }

    @PostMapping("/list")
    @RequiresPermissions("system:dict:list")
    @ResponseBody
    public TableDataInfo list(SysDictData dictData)
    {
        startPage();
        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
        return getDataTable(list);
    }

    @Log(title = "字典数据", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:dict:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysDictData dictData)
    {
        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
        return util.exportExcel(list, "字典数据");
    }

    /**
     * 新增字典类型
     */
    @RequiresPermissions("system:dict:add")
    @GetMapping("/add/{dictType}")
    public String add(@PathVariable("dictType") String dictType, ModelMap mmap)
    {
        mmap.put("dictType", dictType);
        return prefix + "/add";
    }

    /**
     * 新增保存字典类型
     */
    @Log(title = "字典数据", businessType = BusinessType.INSERT)
    @RequiresPermissions("system:dict:add")
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysDictData dict)
    {
        dict.setCreateBy(getLoginName());
        return toAjax(dictDataService.insertDictData(dict));
    }

    /**
     * 修改字典类型
     */
    @RequiresPermissions("system:dict:edit")
    @GetMapping("/edit/{dictCode}")
    public String edit(@PathVariable("dictCode") Long dictCode, ModelMap mmap)
    {
        mmap.put("dict", dictDataService.selectDictDataById(dictCode));
        return prefix + "/edit";
    }

    /**
     * 修改保存字典类型
     */
    @Log(title = "字典数据", businessType = BusinessType.UPDATE)
    @RequiresPermissions("system:dict:edit")
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysDictData dict)
    {
        dict.setUpdateBy(getLoginName());
        return toAjax(dictDataService.updateDictData(dict));
    }

    @Log(title = "字典数据", businessType = BusinessType.DELETE)
    @RequiresPermissions("system:dict:remove")
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        dictDataService.deleteDictDataByIds(ids);
        return success();
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.core.domain.entity.SysDictType;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.ISysDictTypeService;

/**
 * 数据字典信息
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/dict")
public class SysDictTypeController extends BaseController
{
    private String prefix = "system/dict/type";

    @Autowired
    private ISysDictTypeService dictTypeService;

    @RequiresPermissions("system:dict:view")
    @GetMapping()
    public String dictType()
    {
        return prefix + "/type";
    }

    @PostMapping("/list")
    @RequiresPermissions("system:dict:list")
    @ResponseBody
    public TableDataInfo list(SysDictType dictType)
    {
        startPage();
        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
        return getDataTable(list);
    }

    @Log(title = "字典类型", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:dict:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysDictType dictType)
    {

        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
        return util.exportExcel(list, "字典类型");
    }

    /**
     * 新增字典类型
     */
    @RequiresPermissions("system:dict:add")
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 新增保存字典类型
     */
    @Log(title = "字典类型", businessType = BusinessType.INSERT)
    @RequiresPermissions("system:dict:add")
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysDictType dict)
    {
        if (!dictTypeService.checkDictTypeUnique(dict))
        {
            return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
        }
        dict.setCreateBy(getLoginName());
        return toAjax(dictTypeService.insertDictType(dict));
    }

    /**
     * 修改字典类型
     */
    @RequiresPermissions("system:dict:edit")
    @GetMapping("/edit/{dictId}")
    public String edit(@PathVariable("dictId") Long dictId, ModelMap mmap)
    {
        mmap.put("dict", dictTypeService.selectDictTypeById(dictId));
        return prefix + "/edit";
    }

    /**
     * 修改保存字典类型
     */
    @Log(title = "字典类型", businessType = BusinessType.UPDATE)
    @RequiresPermissions("system:dict:edit")
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysDictType dict)
    {
        if (!dictTypeService.checkDictTypeUnique(dict))
        {
            return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
        }
        dict.setUpdateBy(getLoginName());
        return toAjax(dictTypeService.updateDictType(dict));
    }

    @Log(title = "字典类型", businessType = BusinessType.DELETE)
    @RequiresPermissions("system:dict:remove")
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        dictTypeService.deleteDictTypeByIds(ids);
        return success();
    }

    /**
     * 刷新字典缓存
     */
    @RequiresPermissions("system:dict:remove")
    @Log(title = "字典类型", businessType = BusinessType.CLEAN)
    @GetMapping("/refreshCache")
    @ResponseBody
    public AjaxResult refreshCache()
    {
        dictTypeService.resetDictCache();
        return success();
    }

    /**
     * 查询字典详细
     */
    @RequiresPermissions("system:dict:list")
    @GetMapping("/detail/{dictId}")
    public String detail(@PathVariable("dictId") Long dictId, ModelMap mmap)
    {
        mmap.put("dict", dictTypeService.selectDictTypeById(dictId));
        mmap.put("dictList", dictTypeService.selectDictTypeAll());
        return "system/dict/data/data";
    }

    /**
     * 校验字典类型
     */
    @PostMapping("/checkDictTypeUnique")
    @ResponseBody
    public boolean checkDictTypeUnique(SysDictType dictType)
    {
        return dictTypeService.checkDictTypeUnique(dictType);
    }

    /**
     * 选择字典树
     */
    @GetMapping("/selectDictTree/{columnId}/{dictType}")
    public String selectDictTree(@PathVariable("columnId") Long columnId, @PathVariable("dictType") String dictType, ModelMap mmap)
    {
        mmap.put("columnId", columnId);
        mmap.put("dict", dictTypeService.selectDictTypeByType(dictType));
        return prefix + "/tree";
    }

    /**
     * 加载字典列表树
     */
    @GetMapping("/treeData")
    @ResponseBody
    public List<Ztree> treeData()
    {
        List<Ztree> ztrees = dictTypeService.selectDictTree(new SysDictType());
        return ztrees;
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.Date;
import java.util.List;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.ShiroConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.CookieUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysMenuService;

/**
 * 首页 业务处理
 * 
 * @author ruoyi
 */
@Controller
public class SysIndexController extends BaseController
{
    @Autowired
    private ISysMenuService menuService;

    @Autowired
    private ISysConfigService configService;

    @Autowired
    private SysPasswordService passwordService;

    // 系统首页
    @GetMapping("/index")
    public String index(ModelMap mmap, HttpServletRequest request)
    {
        // 取身份信息
        SysUser user = getSysUser();
        // 根据用户id取出菜单
        List<SysMenu> menus = menuService.selectMenusByUser(user);
        mmap.put("menus", menus);
        mmap.put("user", user);
        mmap.put("sideTheme", configService.selectConfigByKey("sys.index.sideTheme"));
        mmap.put("skinName", configService.selectConfigByKey("sys.index.skinName"));
        Boolean footer = Convert.toBool(configService.selectConfigByKey("sys.index.footer"), true);
        Boolean tagsView = Convert.toBool(configService.selectConfigByKey("sys.index.tagsView"), true);
        mmap.put("footer", footer);
        mmap.put("tagsView", tagsView);
        mmap.put("mainClass", contentMainClass(footer, tagsView));
        mmap.put("copyrightYear", RuoYiConfig.getCopyrightYear());
        mmap.put("demoEnabled", RuoYiConfig.isDemoEnabled());
        mmap.put("isDefaultModifyPwd", initPasswordIsModify(user.getPwdUpdateDate()));
        mmap.put("isPasswordExpired", passwordIsExpiration(user.getPwdUpdateDate()));
        mmap.put("isMobile", ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent")));

        // 菜单导航显示风格
        String menuStyle = configService.selectConfigByKey("sys.index.menuStyle");
        // 移动端,默认使左侧导航菜单,否则取默认配置
        String indexStyle = ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent")) ? "index" : menuStyle;

        // 优先Cookie配置导航菜单
        Cookie[] cookies = ServletUtils.getRequest().getCookies();
        for (Cookie cookie : cookies)
        {
            if (StringUtils.isNotEmpty(cookie.getName()) && "nav-style".equalsIgnoreCase(cookie.getName()))
            {
                indexStyle = cookie.getValue();
                break;
            }
        }
        String webIndex = "topnav".equalsIgnoreCase(indexStyle) ? "index-topnav" : "index";
        // CSRF Token
        request.getSession().setAttribute(ShiroConstants.CSRF_TOKEN, ServletUtils.generateToken());
        return webIndex;
    }

    // 锁定屏幕
    @GetMapping("/lockscreen")
    public String lockscreen(ModelMap mmap)
    {
        mmap.put("user", getSysUser());
        ServletUtils.getSession().setAttribute(ShiroConstants.LOCK_SCREEN, true);
        return "lock";
    }

    // 解锁屏幕
    @PostMapping("/unlockscreen")
    @ResponseBody
    public AjaxResult unlockscreen(String password)
    {
        SysUser user = getSysUser();
        if (StringUtils.isNull(user))
        {
            return AjaxResult.error("服务器超时,请重新登录");
        }
        if (passwordService.matches(user, password))
        {
            ServletUtils.getSession().removeAttribute(ShiroConstants.LOCK_SCREEN);
            return AjaxResult.success();
        }
        return AjaxResult.error("密码不正确,请重新输入。");
    }

    // 切换主题
    @GetMapping("/system/switchSkin")
    public String switchSkin()
    {
        return "skin";
    }

    // 切换菜单
    @GetMapping("/system/menuStyle/{style}")
    public void menuStyle(@PathVariable String style, HttpServletResponse response)
    {
        CookieUtils.setCookie(response, "nav-style", style);
    }

    // 系统介绍
    @GetMapping("/system/main")
    public String main(ModelMap mmap)
    {
        mmap.put("version", RuoYiConfig.getVersion());
        return "main";
    }

    // content-main class
    public String contentMainClass(Boolean footer, Boolean tagsView)
    {
        if (!footer && !tagsView)
        {
            return "tagsview-footer-hide";
        }
        else if (!footer)
        {
            return "footer-hide";
        }
        else if (!tagsView)
        {
            return "tagsview-hide";
        }
        return StringUtils.EMPTY;
    }

    // 检查初始密码是否提醒修改
    public boolean initPasswordIsModify(Date pwdUpdateDate)
    {
        Integer initPasswordModify = Convert.toInt(configService.selectConfigByKey("sys.account.initPasswordModify"));
        return initPasswordModify != null && initPasswordModify == 1 && pwdUpdateDate == null;
    }

    // 检查密码是否过期
    public boolean passwordIsExpiration(Date pwdUpdateDate)
    {
        Integer passwordValidateDays = Convert.toInt(configService.selectConfigByKey("sys.account.passwordValidateDays"));
        if (passwordValidateDays != null && passwordValidateDays > 0)
        {
            if (StringUtils.isNull(pwdUpdateDate))
            {
                // 如果从未修改过初始密码,直接提醒过期
                return true;
            }
            Date nowDate = DateUtils.getNowDate();
            return DateUtils.differentDaysByMillisecond(nowDate, pwdUpdateDate) > passwordValidateDays;
        }
        return false;
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
================================================
package com.ruoyi.web.controller.system;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.service.ConfigService;

/**
 * 登录验证
 * 
 * @author ruoyi
 */
@Controller
public class SysLoginController extends BaseController
{
    /**
     * 是否开启记住我功能
     */
    @Value("${shiro.rememberMe.enabled: false}")
    private boolean rememberMe;

    @Autowired
    private ConfigService configService;

    @GetMapping("/login")
    public String login(HttpServletRequest request, HttpServletResponse response, ModelMap mmap)
    {
        // 如果是Ajax请求,返回Json字符串。
        if (ServletUtils.isAjaxRequest(request))
        {
            return ServletUtils.renderString(response, "{\"code\":\"1\",\"msg\":\"未登录或登录超时。请重新登录\"}");
        }
        // 是否开启记住我
        mmap.put("isRemembered", rememberMe);
        // 是否开启用户注册
        mmap.put("isAllowRegister", Convert.toBool(configService.getKey("sys.account.registerUser"), false));
        return "login";
    }

    @PostMapping("/login")
    @ResponseBody
    public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe)
    {
        UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
        Subject subject = SecurityUtils.getSubject();
        try
        {
            subject.login(token);
            return success();
        }
        catch (AuthenticationException e)
        {
            String msg = "用户或密码错误";
            if (StringUtils.isNotEmpty(e.getMessage()))
            {
                msg = e.getMessage();
            }
            return error(msg);
        }
    }

    @GetMapping("/unauth")
    public String unauth()
    {
        return "error/unauth";
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.framework.shiro.util.AuthorizationUtils;
import com.ruoyi.system.service.ISysMenuService;

/**
 * 菜单信息
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/menu")
public class SysMenuController extends BaseController
{
    private String prefix = "system/menu";

    @Autowired
    private ISysMenuService menuService;

    @RequiresPermissions("system:menu:view")
    @GetMapping()
    public String menu()
    {
        return prefix + "/menu";
    }

    @RequiresPermissions("system:menu:list")
    @PostMapping("/list")
    @ResponseBody
    public List<SysMenu> list(SysMenu menu)
    {
        Long userId = ShiroUtils.getUserId();
        List<SysMenu> menuList = menuService.selectMenuList(menu, userId);
        return menuList;
    }

    /**
     * 删除菜单
     */
    @Log(title = "菜单管理", businessType = BusinessType.DELETE)
    @RequiresPermissions("system:menu:remove")
    @GetMapping("/remove/{menuId}")
    @ResponseBody
    public AjaxResult remove(@PathVariable("menuId") Long menuId)
    {
        if (menuService.selectCountMenuByParentId(menuId) > 0)
        {
            return AjaxResult.warn("存在子菜单,不允许删除");
        }
        if (menuService.selectCountRoleMenuByMenuId(menuId) > 0)
        {
            return AjaxResult.warn("菜单已分配,不允许删除");
        }
        AuthorizationUtils.clearAllCachedAuthorizationInfo();
        return toAjax(menuService.deleteMenuById(menuId));
    }

    /**
     * 新增
     */
    @RequiresPermissions("system:menu:add")
    @GetMapping("/add/{parentId}")
    public String add(@PathVariable("parentId") Long parentId, ModelMap mmap)
    {
        SysMenu menu = null;
        if (0L != parentId)
        {
            menu = menuService.selectMenuById(parentId);
        }
        else
        {
            menu = new SysMenu();
            menu.setMenuId(0L);
            menu.setMenuName("主目录");
        }
        mmap.put("menu", menu);
        return prefix + "/add";
    }

    /**
     * 新增保存菜单
     */
    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
    @RequiresPermissions("system:menu:add")
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysMenu menu)
    {
        if (!menuService.checkMenuNameUnique(menu))
        {
            return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
        }
        menu.setCreateBy(getLoginName());
        AuthorizationUtils.clearAllCachedAuthorizationInfo();
        return toAjax(menuService.insertMenu(menu));
    }

    /**
     * 修改菜单
     */
    @RequiresPermissions("system:menu:edit")
    @GetMapping("/edit/{menuId}")
    public String edit(@PathVariable("menuId") Long menuId, ModelMap mmap)
    {
        mmap.put("menu", menuService.selectMenuById(menuId));
        return prefix + "/edit";
    }

    /**
     * 修改保存菜单
     */
    @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
    @RequiresPermissions("system:menu:edit")
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysMenu menu)
    {
        if (!menuService.checkMenuNameUnique(menu))
        {
            return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
        }
        menu.setUpdateBy(getLoginName());
        AuthorizationUtils.clearAllCachedAuthorizationInfo();
        return toAjax(menuService.updateMenu(menu));
    }

    /**
     * 保存菜单排序
     */
    @PostMapping("/updateSort")
    @ResponseBody
    public AjaxResult updateSort(@RequestParam String[] menuIds, @RequestParam String[] orderNums)
    {
        menuService.updateMenuSort(menuIds, orderNums);
        return success();
    }

    /**
     * 选择菜单图标
     */
    @GetMapping("/icon")
    public String icon()
    {
        return prefix + "/icon";
    }

    /**
     * 校验菜单名称
     */
    @PostMapping("/checkMenuNameUnique")
    @ResponseBody
    public boolean checkMenuNameUnique(SysMenu menu)
    {
        return menuService.checkMenuNameUnique(menu);
    }

    /**
     * 加载角色菜单列表树
     */
    @GetMapping("/roleMenuTreeData")
    @ResponseBody
    public List<Ztree> roleMenuTreeData(SysRole role)
    {
        Long userId = ShiroUtils.getUserId();
        List<Ztree> ztrees = menuService.roleMenuTreeData(role, userId);
        return ztrees;
    }

    /**
     * 加载所有菜单列表树
     */
    @GetMapping("/menuTreeData")
    @ResponseBody
    public List<Ztree> menuTreeData()
    {
        Long userId = ShiroUtils.getUserId();
        List<Ztree> ztrees = menuService.menuTreeData(userId);
        return ztrees;
    }

    /**
     * 选择菜单树
     */
    @GetMapping("/selectMenuTree/{menuId}")
    public String selectMenuTree(@PathVariable("menuId") Long menuId, ModelMap mmap)
    {
        mmap.put("menu", menuService.selectMenuById(menuId));
        return prefix + "/tree";
    }
}

================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.service.ISysNoticeReadService;
import com.ruoyi.system.service.ISysNoticeService;

/**
 * 公告 信息操作处理
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/notice")
public class SysNoticeController extends BaseController
{
    private String prefix = "system/notice";

    @Autowired
    private ISysNoticeService noticeService;

    @Autowired
    private ISysNoticeReadService noticeReadService;

    @RequiresPermissions("system:notice:view")
    @GetMapping()
    public String notice()
    {
        return prefix + "/notice";
    }

    /**
     * 查询公告列表
     */
    @RequiresPermissions("system:notice:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysNotice notice)
    {
        startPage();
        List<SysNotice> list = noticeService.selectNoticeList(notice);
        return getDataTable(list);
    }

    /**
     * 新增公告
     */
    @RequiresPermissions("system:notice:add")
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 新增保存公告
     */
    @RequiresPermissions("system:notice:add")
    @Log(title = "通知公告", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysNotice notice)
    {
        notice.setCreateBy(getLoginName());
        return toAjax(noticeService.insertNotice(notice));
    }

    /**
     * 修改公告
     */
    @RequiresPermissions("system:notice:edit")
    @GetMapping("/edit/{noticeId}")
    public String edit(@PathVariable("noticeId") Long noticeId, ModelMap mmap)
    {
        mmap.put("notice", noticeService.selectNoticeById(noticeId));
        return prefix + "/edit";
    }

    /**
     * 修改保存公告
     */
    @RequiresPermissions("system:notice:edit")
    @Log(title = "通知公告", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysNotice notice)
    {
        notice.setUpdateBy(getLoginName());
        return toAjax(noticeService.updateNotice(notice));
    }

    /**
     * 查询公告详细
     */
    @RequiresPermissions("system:notice:list")
    @GetMapping("/view/{noticeId}")
    public String view(@PathVariable("noticeId") Long noticeId, ModelMap mmap)
    {
        mmap.put("notice", noticeService.selectNoticeById(noticeId));
        return prefix + "/view";
    }

    /**
     * 首页顶部公告列表(返回全部正常公告,带当前用户已读标记,最多5条)
     */
    @GetMapping("/listTop")
    @ResponseBody
    public AjaxResult listTop()
    {
        Long userId = ShiroUtils.getSysUser().getUserId();
        List<SysNotice> list = noticeReadService.selectNoticeListWithReadStatus(userId, 5);
        long unreadCount = list.stream().filter(n -> !n.getIsRead()).count();
        AjaxResult result = AjaxResult.success(list);
        result.put("unreadCount", unreadCount);
        return result;
    }

    /**
     * 标记公告已读
     */
    @PostMapping("/markRead")
    @ResponseBody
    public AjaxResult markRead(Long noticeId)
    {
        Long userId = ShiroUtils.getSysUser().getUserId();
        noticeReadService.markRead(noticeId, userId);
        return success();
    }

    /**
     * 批量标记已读
     */
    @PostMapping("/markReadAll")
    @ResponseBody
    public AjaxResult markReadAll(String ids)
    {
        Long userId = ShiroUtils.getSysUser().getUserId();
        Long[] noticeIds = Convert.toLongArray(ids);
        noticeReadService.markReadBatch(userId, noticeIds);
        return success();
    }

    /**
     * 删除公告
     */
    @RequiresPermissions("system:notice:remove")
    @Log(title = "通知公告", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        noticeReadService.deleteByNoticeIds(ids);
        return toAjax(noticeService.deleteNoticeByIds(ids));
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.ISysPostService;

/**
 * 岗位信息操作处理
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/post")
public class SysPostController extends BaseController
{
    private String prefix = "system/post";

    @Autowired
    private ISysPostService postService;

    @RequiresPermissions("system:post:view")
    @GetMapping()
    public String operlog()
    {
        return prefix + "/post";
    }

    @RequiresPermissions("system:post:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysPost post)
    {
        startPage();
        List<SysPost> list = postService.selectPostList(post);
        return getDataTable(list);
    }

    @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:post:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysPost post)
    {
        List<SysPost> list = postService.selectPostList(post);
        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
        return util.exportExcel(list, "岗位数据");
    }

    @RequiresPermissions("system:post:remove")
    @Log(title = "岗位管理", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        return toAjax(postService.deletePostByIds(ids));
    }

    /**
     * 新增岗位
     */
    @RequiresPermissions("system:post:add")
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 新增保存岗位
     */
    @RequiresPermissions("system:post:add")
    @Log(title = "岗位管理", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysPost post)
    {
        if (!postService.checkPostNameUnique(post))
        {
            return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
        }
        else if (!postService.checkPostCodeUnique(post))
        {
            return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
        }
        post.setCreateBy(getLoginName());
        return toAjax(postService.insertPost(post));
    }

    /**
     * 修改岗位
     */
    @RequiresPermissions("system:post:edit")
    @GetMapping("/edit/{postId}")
    public String edit(@PathVariable("postId") Long postId, ModelMap mmap)
    {
        mmap.put("post", postService.selectPostById(postId));
        return prefix + "/edit";
    }

    /**
     * 修改保存岗位
     */
    @RequiresPermissions("system:post:edit")
    @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysPost post)
    {
        if (!postService.checkPostNameUnique(post))
        {
            return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
        }
        else if (!postService.checkPostCodeUnique(post))
        {
            return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
        }
        post.setUpdateBy(getLoginName());
        return toAjax(postService.updatePost(post));
    }

    /**
     * 校验岗位名称
     */
    @PostMapping("/checkPostNameUnique")
    @ResponseBody
    public boolean checkPostNameUnique(SysPost post)
    {
        return postService.checkPostNameUnique(post);
    }

    /**
     * 校验岗位编码
     */
    @PostMapping("/checkPostCodeUnique")
    @ResponseBody
    public boolean checkPostCodeUnique(SysPost post)
    {
        return postService.checkPostCodeUnique(post);
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
================================================
package com.ruoyi.web.controller.system;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.file.MimeTypeUtils;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.system.service.ISysUserService;

/**
 * 个人信息 业务处理
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/user/profile")
public class SysProfileController extends BaseController
{
    private static final Logger log = LoggerFactory.getLogger(SysProfileController.class);

    private String prefix = "system/user/profile";

    @Autowired
    private ISysUserService userService;
    
    @Autowired
    private SysPasswordService passwordService;

    /**
     * 个人信息
     */
    @GetMapping()
    public String profile(ModelMap mmap)
    {
        SysUser user = getSysUser();
        mmap.put("user", user);
        mmap.put("roleGroup", userService.selectUserRoleGroup(user.getUserId()));
        mmap.put("postGroup", userService.selectUserPostGroup(user.getUserId()));
        return prefix + "/profile";
    }

    @GetMapping("/checkPassword")
    @ResponseBody
    public boolean checkPassword(String password)
    {
        SysUser user = getSysUser();
        return passwordService.matches(user, password);
    }

    @GetMapping("/resetPwd")
    public String resetPwd(ModelMap mmap)
    {
        SysUser user = getSysUser();
        mmap.put("user", userService.selectUserById(user.getUserId()));
        return prefix + "/resetPwd";
    }

    @Log(title = "重置密码", businessType = BusinessType.UPDATE)
    @PostMapping("/resetPwd")
    @ResponseBody
    public AjaxResult resetPwd(String oldPassword, String newPassword)
    {
        SysUser user = getSysUser();
        if (!passwordService.matches(user, oldPassword))
        {
            return error("修改密码失败,旧密码错误");
        }
        if (passwordService.matches(user, newPassword))
        {
            return error("新密码不能与旧密码相同");
        }
        user.setSalt(ShiroUtils.randomSalt());
        user.setPassword(passwordService.encryptPassword(user.getLoginName(), newPassword, user.getSalt()));
        if (userService.resetUserPwd(user) > 0)
        {
            setSysUser(userService.selectUserById(user.getUserId()));
            return success();
        }
        return error("修改密码异常,请联系管理员");
    }

    /**
     * 修改用户
     */
    @GetMapping("/edit")
    public String edit(ModelMap mmap)
    {
        SysUser user = getSysUser();
        mmap.put("user", userService.selectUserById(user.getUserId()));
        return prefix + "/edit";
    }

    /**
     * 修改头像
     */
    @GetMapping("/avatar")
    public String avatar(ModelMap mmap)
    {
        SysUser user = getSysUser();
        mmap.put("user", userService.selectUserById(user.getUserId()));
        return prefix + "/avatar";
    }

    /**
     * 修改用户
     */
    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
    @PostMapping("/update")
    @ResponseBody
    public AjaxResult update(SysUser user)
    {
        SysUser currentUser = getSysUser();
        currentUser.setUserName(user.getUserName());
        currentUser.setEmail(user.getEmail());
        currentUser.setPhonenumber(user.getPhonenumber());
        currentUser.setSex(user.getSex());
        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser))
        {
            return error("修改用户'" + currentUser.getLoginName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser))
        {
            return error("修改用户'" + currentUser.getLoginName() + "'失败,邮箱账号已存在");
        }
        if (userService.updateUserInfo(currentUser) > 0)
        {
            setSysUser(userService.selectUserById(currentUser.getUserId()));
            return success();
        }
        return error();
    }

    /**
     * 保存头像
     */
    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
    @PostMapping("/updateAvatar")
    @ResponseBody
    public AjaxResult updateAvatar(@RequestParam("avatarfile") MultipartFile file)
    {
        try
        {
            if (!file.isEmpty())
            {
                SysUser currentUser = getSysUser();
                String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION, true);
                if (userService.updateUserAvatar(currentUser.getUserId(), avatar))
                {
                    String oldAvatar = currentUser.getAvatar();
                    if (StringUtils.isNotEmpty(oldAvatar))
                    {
                        FileUtils.deleteFile(RuoYiConfig.getProfile() + FileUtils.stripPrefix(oldAvatar));
                    }
                    currentUser.setAvatar(avatar);
                    setSysUser(currentUser);
                    return success();
                }
            }
            return error();
        }
        catch (Exception e)
        {
            log.error("修改头像失败!", e);
            return error(e.getMessage());
        }
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
================================================
package com.ruoyi.web.controller.system;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.shiro.service.SysRegisterService;
import com.ruoyi.system.service.ISysConfigService;

/**
 * 注册验证
 * 
 * @author ruoyi
 */
@Controller
public class SysRegisterController extends BaseController
{
    @Autowired
    private SysRegisterService registerService;

    @Autowired
    private ISysConfigService configService;

    @GetMapping("/register")
    public String register()
    {
        return "register";
    }

    @PostMapping("/register")
    @ResponseBody
    public AjaxResult ajaxRegister(SysUser user)
    {
        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
        {
            return error("当前系统没有开启注册功能!");
        }
        String msg = registerService.register(user);
        return StringUtils.isEmpty(msg) ? success() : error(msg);
    }
}


================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.shiro.util.AuthorizationUtils;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;

/**
 * 角色信息
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/role")
public class SysRoleController extends BaseController
{
    private String prefix = "system/role";

    @Autowired
    private ISysRoleService roleService;

    @Autowired
    private ISysUserService userService;

    @Autowired
    private ISysDeptService deptService;

    @Autowired
    private ISysMenuService menuService;

    @RequiresPermissions("system:role:view")
    @GetMapping()
    public String role()
    {
        return prefix + "/role";
    }

    @RequiresPermissions("system:role:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysRole role)
    {
        startPage();
        List<SysRole> list = roleService.selectRoleList(role);
        return getDataTable(list);
    }

    @Log(title = "角色管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:role:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysRole role)
    {
        List<SysRole> list = roleService.selectRoleList(role);
        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
        return util.exportExcel(list, "角色数据");
    }

    /**
     * 新增角色
     */
    @RequiresPermissions("system:role:add")
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 新增保存角色
     */
    @RequiresPermissions("system:role:add")
    @Log(title = "角色管理", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysRole role)
    {
        if (!roleService.checkRoleNameUnique(role))
        {
            return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
        }
        else if (!roleService.checkRoleKeyUnique(role))
        {
            return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
        }
        role.setCreateBy(getLoginName());
        AuthorizationUtils.clearAllCachedAuthorizationInfo();
        return toAjax(roleService.insertRole(role));

    }

    /**
     * 修改角色
     */
    @RequiresPermissions("system:role:edit")
    @GetMapping("/edit/{roleId}")
    public String edit(@PathVariable("roleId") Long roleId, ModelMap mmap)
    {
        roleService.checkRoleDataScope(roleId);
        mmap.put("role", roleService.selectRoleById(roleId));
        return prefix + "/edit";
    }

    /**
     * 修改保存角色
     */
    @RequiresPermissions("system:role:edit")
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysRole role)
    {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
        if (!roleService.checkRoleNameUnique(role))
        {
            return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
        }
        else if (!roleService.checkRoleKeyUnique(role))
        {
            return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
        }
        role.setUpdateBy(getLoginName());
        AuthorizationUtils.clearAllCachedAuthorizationInfo();
        return toAjax(roleService.updateRole(role));
    }

    /**
     * 角色分配数据权限
     */
    @GetMapping("/authDataScope/{roleId}")
    public String authDataScope(@PathVariable("roleId") Long roleId, ModelMap mmap)
    {
        roleService.checkRoleDataScope(roleId);
        mmap.put("role", roleService.selectRoleById(roleId));
        return prefix + "/dataScope";
    }

    /**
     * 保存角色分配数据权限
     */
    @RequiresPermissions("system:role:edit")
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    @PostMapping("/authDataScope")
    @ResponseBody
    public AjaxResult authDataScopeSave(SysRole role)
    {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
        role.setUpdateBy(getLoginName());
        if (roleService.authDataScope(role) > 0)
        {
            setSysUser(userService.selectUserById(getUserId()));
            return success();
        }
        return error();
    }

    @RequiresPermissions("system:role:remove")
    @Log(title = "角色管理", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        return toAjax(roleService.deleteRoleByIds(ids));
    }

    /**
     * 校验角色名称
     */
    @PostMapping("/checkRoleNameUnique")
    @ResponseBody
    public boolean checkRoleNameUnique(SysRole role)
    {
        return roleService.checkRoleNameUnique(role);
    }

    /**
     * 校验角色权限
     */
    @PostMapping("/checkRoleKeyUnique")
    @ResponseBody
    public boolean checkRoleKeyUnique(SysRole role)
    {
        return roleService.checkRoleKeyUnique(role);
    }

    /**
     * 选择菜单树
     */
    @GetMapping("/selectMenuTree")
    public String selectMenuTree()
    {
        return prefix + "/tree";
    }

    /**
     * 角色状态修改
     */
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    @RequiresPermissions("system:role:edit")
    @PostMapping("/changeStatus")
    @ResponseBody
    public AjaxResult changeStatus(SysRole role)
    {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
        return toAjax(roleService.changeStatus(role));
    }

    /**
     * 分配用户
     */
    @RequiresPermissions("system:role:edit")
    @GetMapping("/authUser/{roleId}")
    public String authUser(@PathVariable("roleId") Long roleId, ModelMap mmap)
    {
        roleService.checkRoleDataScope(roleId);
        mmap.put("role", roleService.selectRoleById(roleId));
        return prefix + "/authUser";
    }

    /**
     * 查询已分配用户角色列表
     */
    @RequiresPermissions("system:role:list")
    @PostMapping("/authUser/allocatedList")
    @ResponseBody
    public TableDataInfo allocatedList(SysUser user)
    {
        startPage();
        List<SysUser> list = userService.selectAllocatedList(user);
        return getDataTable(list);
    }

    /**
     * 取消授权
     */
    @RequiresPermissions("system:role:edit")
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
    @PostMapping("/authUser/cancel")
    @ResponseBody
    public AjaxResult cancelAuthUser(SysUserRole userRole)
    {
        return toAjax(roleService.deleteAuthUser(userRole));
    }

    /**
     * 批量取消授权
     */
    @RequiresPermissions("system:role:edit")
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
    @PostMapping("/authUser/cancelAll")
    @ResponseBody
    public AjaxResult cancelAuthUserAll(Long roleId, String userIds)
    {
        return toAjax(roleService.deleteAuthUsers(roleId, userIds));
    }

    /**
     * 选择用户
     */
    @RequiresPermissions("system:role:list")
    @GetMapping("/authUser/selectUser/{roleId}")
    public String selectUser(@PathVariable("roleId") Long roleId, ModelMap mmap)
    {
        mmap.put("role", roleService.selectRoleById(roleId));
        return prefix + "/selectUser";
    }

    /**
     * 查询未分配用户角色列表
     */
    @RequiresPermissions("system:role:list")
    @PostMapping("/authUser/unallocatedList")
    @ResponseBody
    public TableDataInfo unallocatedList(SysUser user)
    {
        startPage();
        List<SysUser> list = userService.selectUnallocatedList(user);
        return getDataTable(list);
    }

    /**
     * 批量选择用户授权
     */
    @RequiresPermissions("system:role:edit")
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
    @PostMapping("/authUser/selectAll")
    @ResponseBody
    public AjaxResult selectAuthUserAll(Long roleId, String userIds)
    {
        roleService.checkRoleDataScope(roleId);
        return toAjax(roleService.insertAuthUsers(roleId, userIds));
    }

    /**
     * 加载角色部门(数据权限)列表树
     */
    @RequiresPermissions("system:role:edit")
    @GetMapping("/deptTreeData")
    @ResponseBody
    public List<Ztree> deptTreeData(SysRole role)
    {
        List<Ztree> ztrees = deptService.roleDeptTreeData(role);
        return ztrees;
    }

    /**
     * 查看角色详情
     */
    @RequiresPermissions("system:role:list")
    @GetMapping("/view/{roleId}")
    public String view(@PathVariable("roleId") Long roleId, ModelMap mmap)
    {
        roleService.checkRoleDataScope(roleId);
        SysRole role = roleService.selectRoleById(roleId);
        mmap.put("role", role);
        // 菜单权限
        mmap.put("menuTree", menuService.roleMenuTreeData(role, getUserId()));
        // 数据权限部门:仅自定义数据权限时传已勾选部门节点
        if (Constants.Dept.DATA_SCOPE_CUSTOM.equals(role.getDataScope()))
        {
            List<Ztree> deptTree = deptService.roleDeptTreeData(role);
            mmap.put("deptTree", deptTree);
        }
        // 关联用户数量
        mmap.put("userCount", roleService.countUserRoleByRoleId(roleId));
        return prefix + "/view";
    }
}

================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
================================================
package com.ruoyi.web.controller.system;

import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.framework.shiro.util.AuthorizationUtils;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;

/**
 * 用户信息
 * 
 * @author ruoyi
 */
@Controller
@RequestMapping("/system/user")
public class SysUserController extends BaseController
{
    private String prefix = "system/user";

    @Autowired
    private ISysUserService userService;

    @Autowired
    private ISysRoleService roleService;
    
    @Autowired
    private ISysDeptService deptService;

    @Autowired
    private ISysPostService postService;

    @Autowired
    private SysPasswordService passwordService;

    @RequiresPermissions("system:user:view")
    @GetMapping()
    public String user()
    {
        return prefix + "/user";
    }

    @RequiresPermissions("system:user:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysUser user)
    {
        startPage();
        List<SysUser> list = userService.selectUserList(user);
        return getDataTable(list);
    }

    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:user:export")
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysUser user)
    {
        List<SysUser> list = userService.selectUserList(user);
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
        return util.exportExcel(list, "用户数据");
    }

    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
    @RequiresPermissions("system:user:import")
    @PostMapping("/importData")
    @ResponseBody
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
    {
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
        List<SysUser> userList = util.importExcel(file.getInputStream());
        String message = userService.importUser(userList, updateSupport, getLoginName());
        return AjaxResult.success(message);
    }

    @RequiresPermissions("system:user:view")
    @GetMapping("/importTemplate")
    @ResponseBody
    public AjaxResult importTemplate()
    {
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
        return util.importTemplateExcel("用户数据");
    }

    /**
     * 新增用户
     */
    @RequiresPermissions("system:user:add")
    @GetMapping("/add")
    public String add(ModelMap mmap)
    {
        mmap.put("roles", roleService.selectRoleAll().stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
        mmap.put("posts", postService.selectPostAll());
        return prefix + "/add";
    }

    /**
     * 新增保存用户
     */
    @RequiresPermissions("system:user:add")
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(@Validated SysUser user)
    {
        deptService.checkDeptDataScope(user.getDeptId());
        roleService.checkRoleDataScope(user.getRoleIds());
        if (!userService.checkLoginNameUnique(user))
        {
            return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
        {
            return error("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
        {
            return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
        }
        user.setSalt(ShiroUtils.randomSalt());
        user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
        user.setPwdUpdateDate(DateUtils.getNowDate());
        user.setCreateBy(getLoginName());
        return toAjax(userService.insertUser(user));
    }

    /**
     * 修改用户
     */
    @RequiresPermissions("system:user:edit")
    @GetMapping("/edit/{userId}")
    public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
    {
        userService.checkUserDataScope(userId);
        List<SysRole> roles = roleService.selectRolesByUserId(userId);
        mmap.put("user", userService.selectUserById(userId));
        mmap.put("roles", ShiroUtils.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
        mmap.put("posts", postService.selectPostsByUserId(userId));
        return prefix + "/edit";
    }

    /**
     * 查询用户详细
     */
    @RequiresPermissions("system:user:list")
    @GetMapping("/view/{userId}")
    public String view(@PathVariable("userId") Long userId, ModelMap mmap)
    {
        userService.checkUserDataScope(userId);
        mmap.put("user", userService.selectUserById(userId));
        mmap.put("roleGroup", userService.selectUserRoleGroup(userId));
        mmap.put("postGroup", userService.selectUserPostGroup(userId));
        return prefix + "/view";
    }

    /**
     * 修改保存用户
     */
    @RequiresPermissions("system:user:edit")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysUser user)
    {
        userService.checkUserAllowed(user);
        userService.checkUserDataScope(user.getUserId());
        deptService.checkDeptDataScope(user.getDeptId());
        roleService.checkRoleDataScope(user.getRoleIds());
        if (!userService.checkLoginNameUnique(user))
        {
            return error("修改用户'" + user.getLoginName() + "'失败,登录账号已存在");
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
        {
            return error("修改用户'" + user.getLoginName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
        {
            return error("修改用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
        }
        user.setUpdateBy(getLoginName());
        AuthorizationUtils.clearAllCachedAuthorizationInfo();
        return toAjax(userService.updateUser(user));
    }

    @RequiresPermissions("system:user:resetPwd")
    @GetMapping("/resetPwd/{userId}")
    public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
    {
        userService.checkUserDataScope(userId);
        mmap.put("user", userService.selectUserById(userId));
        return prefix + "/resetPwd";
    }

    @RequiresPermissions("system:user:resetPwd")
    @Log(title = "重置密码", businessType = BusinessType.UPDATE)
    @PostMapping("/resetPwd")
    @ResponseBody
    public AjaxResult resetPwdSave(SysUser user)
    {
        userService.checkUserAllowed(user);
        userService.checkUserDataScope(user.getUserId());
        user.setSalt(ShiroUtils.randomSalt());
        user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
        if (userService.resetUserPwd(user) > 0)
        {
            if (ShiroUtils.getUserId().longValue() == user.getUserId().longValue())
            {
                setSysUser(userService.selectUserById(user.getUserId()));
            }
            return success();
        }
        return error();
    }

    /**
     * 进入授权角色页
     */
    @RequiresPermissions("system:user:edit")
    @GetMapping("/authRole/{userId}")
    public String authRole(@PathVariable("userId") Long userId, ModelMap mmap)
    {
        userService.checkUserDataScope(userId);
        SysUser user = userService.selectUserById(userId);
        // 获取用户所属的角色列表
        List<SysRole> roles = roleService.selectRolesByUserId(userId);
        mmap.put("user", user);
        mmap.put("roles", ShiroUtils.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
        return prefix + "/authRole";
    }

    /**
     * 用户授权角色
     */
    @RequiresPermissions("system:user:edit")
    @Log(title = "用户管理", businessType = BusinessType.GRANT)
    @PostMapping("/authRole/insertAuthRole")
    @ResponseBody
    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
    {
        userService.checkUserDataScope(userId);
        roleService.checkRoleDataScope(roleIds);
        userService.insertUserAuth(userId, roleIds);
        AuthorizationUtils.clearAllCachedAuthorizationInfo();
        return success();
    }

    @RequiresPermissions("system:user:remove")
    @Log(title = "用户管理", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        if (ArrayUtils.contains(Convert.toLongArray(ids), getUserId()))
        {
            return error("当前用户不能删除");
        }
        return toAjax(userService.deleteUserByIds(ids));
    }

    /**
     * 校验用户名
     */
    @PostMapping("/checkLoginNameUnique")
    @ResponseBody
    public boolean checkLoginNameUnique(SysUser user)
    {
        return userService.checkLoginNameUnique(user);
    }

    /**
     * 校验手机号码
     */
    @PostMapping("/checkPhoneUnique")
    @ResponseBody
    public boolean checkPhoneUnique(SysUser user)
    {
        return userService.checkPhoneUnique(user);
    }

    /**
     * 校验email邮箱
     */
    @PostMapping("/checkEmailUnique")
    @ResponseBody
    public boolean checkEmailUnique(SysUser user)
    {
        return userService.checkEmailUnique(user);
    }

    /**
     * 用户状态修改
     */
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @RequiresPermissions("system:user:edit")
    @PostMapping("/changeStatus")
    @ResponseBody
    public AjaxResult changeStatus(SysUser user)
    {
        userService.checkUserAllowed(user);
        userService.checkUserDataScope(user.getUserId());
        return toAjax(userService.changeStatus(user));
    }

    /**
     * 加载部门列表树
     */
    @RequiresPermissions("system:user:list")
    @GetMapping("/deptTreeData")
    @ResponseBody
    public List<Ztree> deptTreeData()
    {
        List<Ztree> ztrees = deptService.selectDeptTree(new SysDept());
        return ztrees;
    }

    /**
     * 选择部门树
     * 
     * @param deptId 部门ID
     */
    @RequiresPermissions("system:user:list")
    @GetMapping("/selectDeptTree/{deptId}")
    public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap)
    {
        mmap.put("dept", deptService.selectDeptById(deptId));
        return prefix + "/deptTree";
    }
}

================================================
FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/BuildController.java
================================================
package com.ruoyi.web.controller.tool;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.core.controller.BaseController;

/**
 * build 表单构建
 * 
 * @author ruoyi
 */
@C
Download .txt
gitextract_8cqv8t7r/

├── .github/
│   └── FUNDING.yml
├── .gitignore
├── LICENSE
├── README.md
├── bin/
│   ├── clean.bat
│   ├── package.bat
│   └── run.bat
├── doc/
│   └── 若依环境使用手册.docx
├── pom.xml
├── ruoyi-admin/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           ├── RuoYiApplication.java
│           │           ├── RuoYiServletInitializer.java
│           │           └── web/
│           │               ├── controller/
│           │               │   ├── common/
│           │               │   │   └── CommonController.java
│           │               │   ├── demo/
│           │               │   │   ├── controller/
│           │               │   │   │   ├── DemoDialogController.java
│           │               │   │   │   ├── DemoFormController.java
│           │               │   │   │   ├── DemoIconController.java
│           │               │   │   │   ├── DemoOperateController.java
│           │               │   │   │   ├── DemoReportController.java
│           │               │   │   │   └── DemoTableController.java
│           │               │   │   └── domain/
│           │               │   │       ├── CustomerModel.java
│           │               │   │       ├── GoodsModel.java
│           │               │   │       └── UserOperateModel.java
│           │               │   ├── monitor/
│           │               │   │   ├── CacheController.java
│           │               │   │   ├── DruidController.java
│           │               │   │   ├── ServerController.java
│           │               │   │   ├── SysLogininforController.java
│           │               │   │   ├── SysOperlogController.java
│           │               │   │   └── SysUserOnlineController.java
│           │               │   ├── system/
│           │               │   │   ├── SysCaptchaController.java
│           │               │   │   ├── SysConfigController.java
│           │               │   │   ├── SysDeptController.java
│           │               │   │   ├── SysDictDataController.java
│           │               │   │   ├── SysDictTypeController.java
│           │               │   │   ├── SysIndexController.java
│           │               │   │   ├── SysLoginController.java
│           │               │   │   ├── SysMenuController.java
│           │               │   │   ├── SysNoticeController.java
│           │               │   │   ├── SysPostController.java
│           │               │   │   ├── SysProfileController.java
│           │               │   │   ├── SysRegisterController.java
│           │               │   │   ├── SysRoleController.java
│           │               │   │   └── SysUserController.java
│           │               │   └── tool/
│           │               │       ├── BuildController.java
│           │               │       ├── SwaggerController.java
│           │               │       └── TestController.java
│           │               └── core/
│           │                   └── config/
│           │                       └── SwaggerConfig.java
│           └── resources/
│               ├── application-druid.yml
│               ├── application.yml
│               ├── banner.txt
│               ├── ehcache/
│               │   └── ehcache-shiro.xml
│               ├── logback.xml
│               ├── mybatis/
│               │   └── mybatis-config.xml
│               ├── static/
│               │   ├── ajax/
│               │   │   └── libs/
│               │   │       ├── beautifyhtml/
│               │   │       │   └── beautifyhtml.js
│               │   │       ├── blockUI/
│               │   │       │   └── jquery.blockUI.js
│               │   │       ├── bootstrap-fileinput/
│               │   │       │   ├── fileinput.css
│               │   │       │   └── fileinput.js
│               │   │       ├── bootstrap-select/
│               │   │       │   ├── bootstrap-select.css
│               │   │       │   └── bootstrap-select.js
│               │   │       ├── bootstrap-table/
│               │   │       │   ├── extensions/
│               │   │       │   │   ├── auto-refresh/
│               │   │       │   │   │   └── bootstrap-table-auto-refresh.js
│               │   │       │   │   ├── columns/
│               │   │       │   │   │   └── bootstrap-table-fixed-columns.js
│               │   │       │   │   ├── cookie/
│               │   │       │   │   │   └── bootstrap-table-cookie.js
│               │   │       │   │   ├── custom-view/
│               │   │       │   │   │   └── bootstrap-table-custom-view.js
│               │   │       │   │   ├── editable/
│               │   │       │   │   │   ├── bootstrap-editable.css
│               │   │       │   │   │   └── bootstrap-table-editable.js
│               │   │       │   │   ├── export/
│               │   │       │   │   │   └── bootstrap-table-export.js
│               │   │       │   │   ├── mobile/
│               │   │       │   │   │   └── bootstrap-table-mobile.js
│               │   │       │   │   ├── print/
│               │   │       │   │   │   └── bootstrap-table-print.js
│               │   │       │   │   ├── reorder-columns/
│               │   │       │   │   │   ├── bootstrap-table-reorder-columns.js
│               │   │       │   │   │   └── jquery.dragtable.js
│               │   │       │   │   ├── reorder-rows/
│               │   │       │   │   │   ├── bootstrap-table-reorder-rows.js
│               │   │       │   │   │   └── jquery.tablednd.js
│               │   │       │   │   ├── resizable/
│               │   │       │   │   │   └── bootstrap-table-resizable.js
│               │   │       │   │   └── tree/
│               │   │       │   │       └── bootstrap-table-tree.js
│               │   │       │   └── locale/
│               │   │       │       └── bootstrap-table-zh-CN.js
│               │   │       ├── cropper/
│               │   │       │   ├── cropper.css
│               │   │       │   └── cropper.js
│               │   │       ├── cxselect/
│               │   │       │   └── jquery.cxselect.js
│               │   │       ├── datapicker/
│               │   │       │   ├── bootstrap-datetimepicker.css
│               │   │       │   └── bootstrap-datetimepicker.js
│               │   │       ├── duallistbox/
│               │   │       │   ├── bootstrap-duallistbox.css
│               │   │       │   └── bootstrap-duallistbox.js
│               │   │       ├── flot/
│               │   │       │   ├── curvedLines.js
│               │   │       │   ├── jquery.flot.js
│               │   │       │   ├── jquery.flot.pie.js
│               │   │       │   ├── jquery.flot.resize.js
│               │   │       │   ├── jquery.flot.spline.js
│               │   │       │   └── jquery.flot.symbol.js
│               │   │       ├── fullscreen/
│               │   │       │   └── jquery.fullscreen.js
│               │   │       ├── iCheck/
│               │   │       │   └── custom.css
│               │   │       ├── jasny/
│               │   │       │   ├── jasny-bootstrap.css
│               │   │       │   └── jasny-bootstrap.js
│               │   │       ├── jquery-layout/
│               │   │       │   ├── jquery.layout-latest.css
│               │   │       │   └── jquery.layout-latest.js
│               │   │       ├── jquery-ztree/
│               │   │       │   └── 3.5/
│               │   │       │       ├── css/
│               │   │       │       │   ├── default/
│               │   │       │       │   │   └── zTreeStyle.css
│               │   │       │       │   ├── metro/
│               │   │       │       │   │   └── zTreeStyle.css
│               │   │       │       │   └── simple/
│               │   │       │       │       └── zTreeStyle.css
│               │   │       │       ├── js/
│               │   │       │       │   ├── jquery.ztree.all-3.5.js
│               │   │       │       │   ├── jquery.ztree.core-3.5.js
│               │   │       │       │   ├── jquery.ztree.excheck-3.5.js
│               │   │       │       │   ├── jquery.ztree.exedit-3.5.js
│               │   │       │       │   └── jquery.ztree.exhide-3.5.js
│               │   │       │       └── log v3.x.txt
│               │   │       ├── jsonview/
│               │   │       │   ├── jquery.jsonview.css
│               │   │       │   └── jquery.jsonview.js
│               │   │       ├── layer/
│               │   │       │   ├── css/
│               │   │       │   │   └── layer.css
│               │   │       │   └── theme/
│               │   │       │       └── moon/
│               │   │       │           └── style.css
│               │   │       ├── layui/
│               │   │       │   ├── css/
│               │   │       │   │   └── modules/
│               │   │       │   │       └── laydate.css
│               │   │       │   └── modules/
│               │   │       │       └── laydate.js
│               │   │       ├── select2/
│               │   │       │   ├── select2.css
│               │   │       │   └── select2.js
│               │   │       ├── suggest/
│               │   │       │   └── bootstrap-suggest.js
│               │   │       ├── summernote/
│               │   │       │   ├── summernote-zh-CN.js
│               │   │       │   ├── summernote.css
│               │   │       │   └── summernote.js
│               │   │       ├── typeahead/
│               │   │       │   └── bootstrap-typeahead.js
│               │   │       └── validate/
│               │   │           ├── jquery.validate.extend.js
│               │   │           └── messages_zh.js
│               │   ├── css/
│               │   │   ├── login.css
│               │   │   ├── skins.css
│               │   │   ├── style.css
│               │   │   └── zen-checkbox.css
│               │   ├── file/
│               │   │   └── rml.txt
│               │   ├── fonts/
│               │   │   └── FontAwesome.otf
│               │   ├── html/
│               │   │   └── ie.html
│               │   ├── i18n/
│               │   │   └── messages.properties
│               │   ├── js/
│               │   │   ├── cron.js
│               │   │   ├── jquery.tmpl.js
│               │   │   ├── plugins/
│               │   │   │   └── metisMenu/
│               │   │   │       └── jquery.metisMenu.js
│               │   │   └── resize-tabs.js
│               │   └── ruoyi/
│               │       ├── css/
│               │       │   └── ry-ui.css
│               │       ├── index.js
│               │       ├── js/
│               │       │   ├── common.js
│               │       │   └── ry-ui.js
│               │       ├── login.js
│               │       └── register.js
│               └── templates/
│                   ├── demo/
│                   │   ├── form/
│                   │   │   ├── autocomplete.html
│                   │   │   ├── basic.html
│                   │   │   ├── button.html
│                   │   │   ├── cards.html
│                   │   │   ├── cxselect.html
│                   │   │   ├── datetime.html
│                   │   │   ├── duallistbox.html
│                   │   │   ├── grid.html
│                   │   │   ├── invoice.html
│                   │   │   ├── jasny.html
│                   │   │   ├── labels_tips.html
│                   │   │   ├── localrefresh.html
│                   │   │   ├── progress_bars.html
│                   │   │   ├── select.html
│                   │   │   ├── sortable.html
│                   │   │   ├── summernote.html
│                   │   │   ├── tabs_panels.html
│                   │   │   ├── timeline.html
│                   │   │   ├── upload.html
│                   │   │   ├── validate.html
│                   │   │   └── wizard.html
│                   │   ├── icon/
│                   │   │   ├── fontawesome.html
│                   │   │   └── glyphicons.html
│                   │   ├── modal/
│                   │   │   ├── dialog.html
│                   │   │   ├── form.html
│                   │   │   ├── layer.html
│                   │   │   ├── table/
│                   │   │   │   ├── check.html
│                   │   │   │   ├── frame1.html
│                   │   │   │   ├── frame2.html
│                   │   │   │   ├── parent.html
│                   │   │   │   └── radio.html
│                   │   │   └── table.html
│                   │   ├── operate/
│                   │   │   ├── add.html
│                   │   │   ├── detail.html
│                   │   │   ├── edit.html
│                   │   │   ├── other.html
│                   │   │   └── table.html
│                   │   ├── report/
│                   │   │   ├── echarts.html
│                   │   │   ├── metrics.html
│                   │   │   ├── peity.html
│                   │   │   └── sparkline.html
│                   │   └── table/
│                   │       ├── asynTree.html
│                   │       ├── button.html
│                   │       ├── child.html
│                   │       ├── cookie.html
│                   │       ├── curd.html
│                   │       ├── customView.html
│                   │       ├── data.html
│                   │       ├── detail.html
│                   │       ├── dynamicColumns.html
│                   │       ├── editable.html
│                   │       ├── event.html
│                   │       ├── export.html
│                   │       ├── exportSelected.html
│                   │       ├── fixedColumns.html
│                   │       ├── footer.html
│                   │       ├── groupHeader.html
│                   │       ├── headerStyle.html
│                   │       ├── image.html
│                   │       ├── multi.html
│                   │       ├── other.html
│                   │       ├── pageGo.html
│                   │       ├── params.html
│                   │       ├── print.html
│                   │       ├── refresh.html
│                   │       ├── remember.html
│                   │       ├── reorderColumns.html
│                   │       ├── reorderRows.html
│                   │       ├── resizable.html
│                   │       ├── search.html
│                   │       ├── subdata.html
│                   │       ├── textSearch.html
│                   │       └── virtualScroll.html
│                   ├── error/
│                   │   ├── 404.html
│                   │   ├── 500.html
│                   │   ├── service.html
│                   │   └── unauth.html
│                   ├── include.html
│                   ├── index-topnav.html
│                   ├── index.html
│                   ├── lock.html
│                   ├── login.html
│                   ├── main.html
│                   ├── main_v1.html
│                   ├── monitor/
│                   │   ├── cache/
│                   │   │   └── cache.html
│                   │   ├── logininfor/
│                   │   │   └── logininfor.html
│                   │   ├── online/
│                   │   │   └── online.html
│                   │   ├── operlog/
│                   │   │   ├── detail.html
│                   │   │   └── operlog.html
│                   │   └── server/
│                   │       └── server.html
│                   ├── register.html
│                   ├── skin.html
│                   ├── system/
│                   │   ├── config/
│                   │   │   ├── add.html
│                   │   │   ├── config.html
│                   │   │   └── edit.html
│                   │   ├── dept/
│                   │   │   ├── add.html
│                   │   │   ├── dept.html
│                   │   │   ├── edit.html
│                   │   │   └── tree.html
│                   │   ├── dict/
│                   │   │   ├── data/
│                   │   │   │   ├── add.html
│                   │   │   │   ├── data.html
│                   │   │   │   └── edit.html
│                   │   │   └── type/
│                   │   │       ├── add.html
│                   │   │       ├── edit.html
│                   │   │       ├── tree.html
│                   │   │       └── type.html
│                   │   ├── menu/
│                   │   │   ├── add.html
│                   │   │   ├── edit.html
│                   │   │   ├── icon.html
│                   │   │   ├── menu.html
│                   │   │   └── tree.html
│                   │   ├── notice/
│                   │   │   ├── add.html
│                   │   │   ├── edit.html
│                   │   │   ├── notice.html
│                   │   │   └── view.html
│                   │   ├── post/
│                   │   │   ├── add.html
│                   │   │   ├── edit.html
│                   │   │   └── post.html
│                   │   ├── role/
│                   │   │   ├── add.html
│                   │   │   ├── authUser.html
│                   │   │   ├── dataScope.html
│                   │   │   ├── edit.html
│                   │   │   ├── role.html
│                   │   │   ├── selectUser.html
│                   │   │   └── view.html
│                   │   └── user/
│                   │       ├── add.html
│                   │       ├── authRole.html
│                   │       ├── deptTree.html
│                   │       ├── edit.html
│                   │       ├── profile/
│                   │       │   ├── avatar.html
│                   │       │   ├── profile.html
│                   │       │   └── resetPwd.html
│                   │       ├── resetPwd.html
│                   │       ├── user.html
│                   │       └── view.html
│                   └── tool/
│                       └── build/
│                           └── build.html
├── ruoyi-common/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── ruoyi/
│                       └── common/
│                           ├── annotation/
│                           │   ├── Anonymous.java
│                           │   ├── DataScope.java
│                           │   ├── DataSource.java
│                           │   ├── Excel.java
│                           │   ├── Excels.java
│                           │   ├── Log.java
│                           │   ├── RepeatSubmit.java
│                           │   └── Sensitive.java
│                           ├── config/
│                           │   ├── RuoYiConfig.java
│                           │   ├── ServerConfig.java
│                           │   ├── datasource/
│                           │   │   └── DynamicDataSourceContextHolder.java
│                           │   ├── serializer/
│                           │   │   └── SensitiveJsonSerializer.java
│                           │   └── thread/
│                           │       └── ThreadPoolConfig.java
│                           ├── constant/
│                           │   ├── Constants.java
│                           │   ├── GenConstants.java
│                           │   ├── PermissionConstants.java
│                           │   ├── ScheduleConstants.java
│                           │   ├── ShiroConstants.java
│                           │   └── UserConstants.java
│                           ├── core/
│                           │   ├── context/
│                           │   │   └── PermissionContextHolder.java
│                           │   ├── controller/
│                           │   │   └── BaseController.java
│                           │   ├── domain/
│                           │   │   ├── AjaxResult.java
│                           │   │   ├── BaseEntity.java
│                           │   │   ├── CxSelect.java
│                           │   │   ├── R.java
│                           │   │   ├── TreeEntity.java
│                           │   │   ├── Ztree.java
│                           │   │   └── entity/
│                           │   │       ├── SysDept.java
│                           │   │       ├── SysDictData.java
│                           │   │       ├── SysDictType.java
│                           │   │       ├── SysMenu.java
│                           │   │       ├── SysRole.java
│                           │   │       └── SysUser.java
│                           │   ├── page/
│                           │   │   ├── PageDomain.java
│                           │   │   ├── TableDataInfo.java
│                           │   │   └── TableSupport.java
│                           │   ├── session/
│                           │   │   └── OnlineSession.java
│                           │   └── text/
│                           │       ├── CharsetKit.java
│                           │       ├── Convert.java
│                           │       └── StrFormatter.java
│                           ├── enums/
│                           │   ├── BusinessStatus.java
│                           │   ├── BusinessType.java
│                           │   ├── DataSourceType.java
│                           │   ├── DesensitizedType.java
│                           │   ├── OnlineStatus.java
│                           │   ├── OperatorType.java
│                           │   └── UserStatus.java
│                           ├── exception/
│                           │   ├── DemoModeException.java
│                           │   ├── GlobalException.java
│                           │   ├── ServiceException.java
│                           │   ├── UtilException.java
│                           │   ├── base/
│                           │   │   └── BaseException.java
│                           │   ├── file/
│                           │   │   ├── FileException.java
│                           │   │   ├── FileNameLengthLimitExceededException.java
│                           │   │   ├── FileSizeLimitExceededException.java
│                           │   │   ├── FileUploadException.java
│                           │   │   └── InvalidExtensionException.java
│                           │   ├── job/
│                           │   │   └── TaskException.java
│                           │   └── user/
│                           │       ├── BlackListException.java
│                           │       ├── CaptchaException.java
│                           │       ├── RoleBlockedException.java
│                           │       ├── UserBlockedException.java
│                           │       ├── UserDeleteException.java
│                           │       ├── UserException.java
│                           │       ├── UserNotExistsException.java
│                           │       ├── UserPasswordNotMatchException.java
│                           │       ├── UserPasswordRetryLimitCountException.java
│                           │       └── UserPasswordRetryLimitExceedException.java
│                           ├── json/
│                           │   ├── JSON.java
│                           │   └── JSONObject.java
│                           ├── utils/
│                           │   ├── AddressUtils.java
│                           │   ├── Arith.java
│                           │   ├── CacheUtils.java
│                           │   ├── CookieUtils.java
│                           │   ├── DateUtils.java
│                           │   ├── DesensitizedUtil.java
│                           │   ├── DictUtils.java
│                           │   ├── ExceptionUtil.java
│                           │   ├── IpUtils.java
│                           │   ├── LogUtils.java
│                           │   ├── MapDataUtil.java
│                           │   ├── MessageUtils.java
│                           │   ├── PageUtils.java
│                           │   ├── ServletUtils.java
│                           │   ├── ShiroUtils.java
│                           │   ├── StringUtils.java
│                           │   ├── Threads.java
│                           │   ├── bean/
│                           │   │   ├── BeanUtils.java
│                           │   │   └── BeanValidators.java
│                           │   ├── file/
│                           │   │   ├── FileTypeUtils.java
│                           │   │   ├── FileUploadUtils.java
│                           │   │   ├── FileUtils.java
│                           │   │   ├── ImageUtils.java
│                           │   │   └── MimeTypeUtils.java
│                           │   ├── html/
│                           │   │   ├── EscapeUtil.java
│                           │   │   └── HTMLFilter.java
│                           │   ├── http/
│                           │   │   ├── HttpUtils.java
│                           │   │   └── UserAgentUtils.java
│                           │   ├── poi/
│                           │   │   ├── ExcelHandlerAdapter.java
│                           │   │   └── ExcelUtil.java
│                           │   ├── reflect/
│                           │   │   └── ReflectUtils.java
│                           │   ├── security/
│                           │   │   ├── CipherUtils.java
│                           │   │   ├── Md5Utils.java
│                           │   │   └── PermissionUtils.java
│                           │   ├── spring/
│                           │   │   └── SpringUtils.java
│                           │   ├── sql/
│                           │   │   └── SqlUtil.java
│                           │   └── uuid/
│                           │       ├── IdUtils.java
│                           │       ├── Seq.java
│                           │       └── UUID.java
│                           └── xss/
│                               ├── Xss.java
│                               ├── XssFilter.java
│                               ├── XssHttpServletRequestWrapper.java
│                               └── XssValidator.java
├── ruoyi-framework/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── ruoyi/
│                       └── framework/
│                           ├── aspectj/
│                           │   ├── DataScopeAspect.java
│                           │   ├── DataSourceAspect.java
│                           │   ├── LogAspect.java
│                           │   └── PermissionsAspect.java
│                           ├── config/
│                           │   ├── ApplicationConfig.java
│                           │   ├── CaptchaConfig.java
│                           │   ├── DruidConfig.java
│                           │   ├── FilterConfig.java
│                           │   ├── I18nConfig.java
│                           │   ├── KaptchaTextCreator.java
│                           │   ├── MyBatisConfig.java
│                           │   ├── ResourcesConfig.java
│                           │   ├── ShiroConfig.java
│                           │   └── properties/
│                           │       └── DruidProperties.java
│                           ├── datasource/
│                           │   └── DynamicDataSource.java
│                           ├── interceptor/
│                           │   ├── RepeatSubmitInterceptor.java
│                           │   └── impl/
│                           │       └── SameUrlDataInterceptor.java
│                           ├── manager/
│                           │   ├── AsyncManager.java
│                           │   ├── ShutdownManager.java
│                           │   └── factory/
│                           │       └── AsyncFactory.java
│                           ├── shiro/
│                           │   ├── realm/
│                           │   │   └── UserRealm.java
│                           │   ├── rememberMe/
│                           │   │   └── CustomCookieRememberMeManager.java
│                           │   ├── service/
│                           │   │   ├── SysLoginService.java
│                           │   │   ├── SysPasswordService.java
│                           │   │   ├── SysRegisterService.java
│                           │   │   └── SysShiroService.java
│                           │   ├── session/
│                           │   │   ├── OnlineSessionDAO.java
│                           │   │   └── OnlineSessionFactory.java
│                           │   ├── util/
│                           │   │   └── AuthorizationUtils.java
│                           │   └── web/
│                           │       ├── CustomShiroFilterFactoryBean.java
│                           │       ├── filter/
│                           │       │   ├── LogoutFilter.java
│                           │       │   ├── captcha/
│                           │       │   │   └── CaptchaValidateFilter.java
│                           │       │   ├── csrf/
│                           │       │   │   └── CsrfValidateFilter.java
│                           │       │   ├── kickout/
│                           │       │   │   └── KickoutSessionFilter.java
│                           │       │   ├── online/
│                           │       │   │   └── OnlineSessionFilter.java
│                           │       │   └── sync/
│                           │       │       └── SyncOnlineSessionFilter.java
│                           │       └── session/
│                           │           ├── OnlineWebSessionManager.java
│                           │           └── SpringSessionValidationScheduler.java
│                           └── web/
│                               ├── domain/
│                               │   ├── Server.java
│                               │   └── server/
│                               │       ├── Cpu.java
│                               │       ├── Jvm.java
│                               │       ├── Mem.java
│                               │       ├── Sys.java
│                               │       └── SysFile.java
│                               ├── exception/
│                               │   └── GlobalExceptionHandler.java
│                               └── service/
│                                   ├── CacheService.java
│                                   ├── ConfigService.java
│                                   ├── DictService.java
│                                   └── PermissionService.java
├── ruoyi-generator/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           └── generator/
│           │               ├── config/
│           │               │   └── GenConfig.java
│           │               ├── controller/
│           │               │   └── GenController.java
│           │               ├── domain/
│           │               │   ├── GenTable.java
│           │               │   └── GenTableColumn.java
│           │               ├── mapper/
│           │               │   ├── GenTableColumnMapper.java
│           │               │   └── GenTableMapper.java
│           │               ├── service/
│           │               │   ├── IGenTableColumnService.java
│           │               │   ├── IGenTableService.java
│           │               │   └── impl/
│           │               │       ├── GenTableColumnServiceImpl.java
│           │               │       └── GenTableServiceImpl.java
│           │               └── util/
│           │                   ├── GenUtils.java
│           │                   ├── VelocityInitializer.java
│           │                   └── VelocityUtils.java
│           └── resources/
│               ├── generator.yml
│               ├── mapper/
│               │   └── generator/
│               │       ├── GenTableColumnMapper.xml
│               │       └── GenTableMapper.xml
│               ├── templates/
│               │   └── tool/
│               │       └── gen/
│               │           ├── createTable.html
│               │           ├── edit.html
│               │           ├── gen.html
│               │           └── importTable.html
│               └── vm/
│                   ├── html/
│                   │   ├── add.html.vm
│                   │   ├── edit.html.vm
│                   │   ├── list-tree.html.vm
│                   │   ├── list.html.vm
│                   │   └── tree.html.vm
│                   ├── java/
│                   │   ├── controller.java.vm
│                   │   ├── domain.java.vm
│                   │   ├── mapper.java.vm
│                   │   ├── service.java.vm
│                   │   ├── serviceImpl.java.vm
│                   │   └── sub-domain.java.vm
│                   ├── sql/
│                   │   └── sql.vm
│                   └── xml/
│                       └── mapper.xml.vm
├── ruoyi-quartz/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           └── quartz/
│           │               ├── config/
│           │               │   └── ScheduleConfig.java
│           │               ├── controller/
│           │               │   ├── SysJobController.java
│           │               │   └── SysJobLogController.java
│           │               ├── domain/
│           │               │   ├── SysJob.java
│           │               │   └── SysJobLog.java
│           │               ├── mapper/
│           │               │   ├── SysJobLogMapper.java
│           │               │   └── SysJobMapper.java
│           │               ├── service/
│           │               │   ├── ISysJobLogService.java
│           │               │   ├── ISysJobService.java
│           │               │   └── impl/
│           │               │       ├── SysJobLogServiceImpl.java
│           │               │       └── SysJobServiceImpl.java
│           │               ├── task/
│           │               │   └── RyTask.java
│           │               └── util/
│           │                   ├── AbstractQuartzJob.java
│           │                   ├── CronUtils.java
│           │                   ├── JobInvokeUtil.java
│           │                   ├── QuartzDisallowConcurrentExecution.java
│           │                   ├── QuartzJobExecution.java
│           │                   └── ScheduleUtils.java
│           └── resources/
│               ├── mapper/
│               │   └── quartz/
│               │       ├── SysJobLogMapper.xml
│               │       └── SysJobMapper.xml
│               └── templates/
│                   └── monitor/
│                       └── job/
│                           ├── add.html
│                           ├── cron.html
│                           ├── detail.html
│                           ├── edit.html
│                           ├── job.html
│                           └── jobLog.html
├── ruoyi-system/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── ruoyi/
│           │           └── system/
│           │               ├── domain/
│           │               │   ├── SysConfig.java
│           │               │   ├── SysLogininfor.java
│           │               │   ├── SysNotice.java
│           │               │   ├── SysNoticeRead.java
│           │               │   ├── SysOperLog.java
│           │               │   ├── SysPost.java
│           │               │   ├── SysRoleDept.java
│           │               │   ├── SysRoleMenu.java
│           │               │   ├── SysUserOnline.java
│           │               │   ├── SysUserPost.java
│           │               │   └── SysUserRole.java
│           │               ├── mapper/
│           │               │   ├── SysConfigMapper.java
│           │               │   ├── SysDeptMapper.java
│           │               │   ├── SysDictDataMapper.java
│           │               │   ├── SysDictTypeMapper.java
│           │               │   ├── SysLogininforMapper.java
│           │               │   ├── SysMenuMapper.java
│           │               │   ├── SysNoticeMapper.java
│           │               │   ├── SysNoticeReadMapper.java
│           │               │   ├── SysOperLogMapper.java
│           │               │   ├── SysPostMapper.java
│           │               │   ├── SysRoleDeptMapper.java
│           │               │   ├── SysRoleMapper.java
│           │               │   ├── SysRoleMenuMapper.java
│           │               │   ├── SysUserMapper.java
│           │               │   ├── SysUserOnlineMapper.java
│           │               │   ├── SysUserPostMapper.java
│           │               │   └── SysUserRoleMapper.java
│           │               └── service/
│           │                   ├── ISysConfigService.java
│           │                   ├── ISysDeptService.java
│           │                   ├── ISysDictDataService.java
│           │                   ├── ISysDictTypeService.java
│           │                   ├── ISysLogininforService.java
│           │                   ├── ISysMenuService.java
│           │                   ├── ISysNoticeReadService.java
│           │                   ├── ISysNoticeService.java
│           │                   ├── ISysOperLogService.java
│           │                   ├── ISysPostService.java
│           │                   ├── ISysRoleService.java
│           │                   ├── ISysUserOnlineService.java
│           │                   ├── ISysUserService.java
│           │                   └── impl/
│           │                       ├── SysConfigServiceImpl.java
│           │                       ├── SysDeptServiceImpl.java
│           │                       ├── SysDictDataServiceImpl.java
│           │                       ├── SysDictTypeServiceImpl.java
│           │                       ├── SysLogininforServiceImpl.java
│           │                       ├── SysMenuServiceImpl.java
│           │                       ├── SysNoticeReadServiceImpl.java
│           │                       ├── SysNoticeServiceImpl.java
│           │                       ├── SysOperLogServiceImpl.java
│           │                       ├── SysPostServiceImpl.java
│           │                       ├── SysRoleServiceImpl.java
│           │                       ├── SysUserOnlineServiceImpl.java
│           │                       └── SysUserServiceImpl.java
│           └── resources/
│               └── mapper/
│                   └── system/
│                       ├── SysConfigMapper.xml
│                       ├── SysDeptMapper.xml
│                       ├── SysDictDataMapper.xml
│                       ├── SysDictTypeMapper.xml
│                       ├── SysLogininforMapper.xml
│                       ├── SysMenuMapper.xml
│                       ├── SysNoticeMapper.xml
│                       ├── SysNoticeReadMapper.xml
│                       ├── SysOperLogMapper.xml
│                       ├── SysPostMapper.xml
│                       ├── SysRoleDeptMapper.xml
│                       ├── SysRoleMapper.xml
│                       ├── SysRoleMenuMapper.xml
│                       ├── SysUserMapper.xml
│                       ├── SysUserOnlineMapper.xml
│                       ├── SysUserPostMapper.xml
│                       └── SysUserRoleMapper.xml
├── ry.bat
├── ry.sh
└── sql/
    ├── quartz.sql
    ├── ruoyi.html
    ├── ruoyi.pdm
    └── ry_20260319.sql
Download .txt
Showing preview only (297K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3531 symbols across 317 files)

FILE: ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
  class RuoYiApplication (line 12) | @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
    method main (line 15) | public static void main(String[] args)

FILE: ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
  class RuoYiServletInitializer (line 11) | public class RuoYiServletInitializer extends SpringBootServletInitializer
    method configure (line 13) | @Override

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  class CommonController (line 29) | @Controller
    method fileDownload (line 46) | @GetMapping("/download")
    method uploadFile (line 75) | @PostMapping("/upload")
    method uploadFiles (line 102) | @PostMapping("/uploads")
    method resourceDownload (line 140) | @GetMapping("/download/resource")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoDialogController.java
  class DemoDialogController (line 12) | @Controller
    method dialog (line 21) | @GetMapping("/dialog")
    method layer (line 30) | @GetMapping("/layer")
    method form (line 39) | @GetMapping("/form")
    method table (line 48) | @GetMapping("/table")
    method check (line 57) | @GetMapping("/check")
    method radio (line 66) | @GetMapping("/radio")
    method parent (line 75) | @GetMapping("/parent")
    method frame1 (line 84) | @GetMapping("/frame1")
    method frame2 (line 93) | @GetMapping("/frame2")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoFormController.java
  class DemoFormController (line 23) | @Controller
    method button (line 41) | @GetMapping("/button")
    method select (line 50) | @GetMapping("/select")
    method timeline (line 59) | @GetMapping("/timeline")
    method progress_bars (line 68) | @GetMapping("/progress_bars")
    method validate (line 77) | @GetMapping("/validate")
    method jasny (line 86) | @GetMapping("/jasny")
    method sortable (line 95) | @GetMapping("/sortable")
    method invoice (line 104) | @GetMapping("/invoice")
    method labels_tips (line 113) | @GetMapping("/labels_tips")
    method tabs_panels (line 122) | @GetMapping("/tabs_panels")
    method grid (line 131) | @GetMapping("/grid")
    method wizard (line 140) | @GetMapping("/wizard")
    method upload (line 149) | @GetMapping("/upload")
    method datetime (line 158) | @GetMapping("/datetime")
    method duallistbox (line 167) | @GetMapping("/duallistbox")
    method basic (line 176) | @GetMapping("/basic")
    method cards (line 185) | @GetMapping("/cards")
    method summernote (line 194) | @GetMapping("/summernote")
    method autocomplete (line 203) | @GetMapping("/autocomplete")
    method cxselect (line 212) | @GetMapping("/cxselect")
    method localRefresh (line 254) | @GetMapping("/localrefresh")
    method localRefreshTask (line 275) | @PostMapping("/localrefresh/task")
    method cityData (line 296) | @GetMapping("/cityData")
    method userModel (line 307) | @GetMapping("/userModel")
    method collection (line 321) | @GetMapping("/collection")
  class UserFormModel (line 332) | class UserFormModel
    method UserFormModel (line 346) | public UserFormModel()
    method UserFormModel (line 351) | public UserFormModel(int userId, String userCode, String userName, Str...
    method getUserId (line 359) | public int getUserId()
    method setUserId (line 364) | public void setUserId(int userId)
    method getUserCode (line 369) | public String getUserCode()
    method setUserCode (line 374) | public void setUserCode(String userCode)
    method getUserName (line 379) | public String getUserName()
    method setUserName (line 384) | public void setUserName(String userName)
    method getUserPhone (line 389) | public String getUserPhone()
    method setUserPhone (line 394) | public void setUserPhone(String userPhone)

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoIconController.java
  class DemoIconController (line 12) | @Controller
    method fontAwesome (line 21) | @GetMapping("/fontawesome")
    method glyphicons (line 30) | @GetMapping("/glyphicons")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoOperateController.java
  class DemoOperateController (line 32) | @Controller
    method table (line 71) | @GetMapping("/table")
    method other (line 80) | @GetMapping("/other")
    method list (line 89) | @PostMapping("/list")
    method add (line 139) | @GetMapping("/add")
    method addSave (line 148) | @PostMapping("/add")
    method addSave (line 160) | @PostMapping("/customer/add")
    method edit (line 171) | @GetMapping("/edit/{userId}")
    method editSave (line 181) | @PostMapping("/edit")
    method export (line 191) | @PostMapping("/export")
    method importTemplate (line 203) | @GetMapping("/importTemplate")
    method importData (line 214) | @PostMapping("/importData")
    method remove (line 227) | @PostMapping("/remove")
    method detail (line 242) | @GetMapping("/detail/{userId}")
    method clean (line 249) | @PostMapping("/clean")
    method importUser (line 264) | public String importUser(List<UserOperateModel> userList, Boolean isUp...

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoReportController.java
  class DemoReportController (line 12) | @Controller
    method echarts (line 21) | @GetMapping("/echarts")
    method peity (line 30) | @GetMapping("/peity")
    method sparkline (line 39) | @GetMapping("/sparkline")
    method metrics (line 48) | @GetMapping("/metrics")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java
  class DemoTableController (line 33) | @Controller
    method search (line 149) | @GetMapping("/search")
    method footer (line 158) | @GetMapping("/footer")
    method groupHeader (line 167) | @GetMapping("/groupHeader")
    method export (line 176) | @GetMapping("/export")
    method exportSelected (line 185) | @GetMapping("/exportSelected")
    method exportSelected (line 194) | @PostMapping("/exportData")
    method remember (line 223) | @GetMapping("/remember")
    method cookie (line 232) | @GetMapping("/cookie")
    method pageGo (line 241) | @GetMapping("/pageGo")
    method params (line 250) | @GetMapping("/params")
    method multi (line 259) | @GetMapping("/multi")
    method button (line 268) | @GetMapping("/button")
    method data (line 277) | @GetMapping("/data")
    method fixedColumns (line 287) | @GetMapping("/fixedColumns")
    method event (line 296) | @GetMapping("/event")
    method detail (line 305) | @GetMapping("/detail")
    method child (line 314) | @GetMapping("/child")
    method image (line 323) | @GetMapping("/image")
    method curd (line 332) | @GetMapping("/curd")
    method reorderRows (line 341) | @GetMapping("/reorderRows")
    method reorderColumns (line 350) | @GetMapping("/reorderColumns")
    method resizable (line 359) | @GetMapping("/resizable")
    method editable (line 368) | @GetMapping("/editable")
    method subdata (line 377) | @GetMapping("/subdata")
    method refresh (line 386) | @GetMapping("/refresh")
    method print (line 395) | @GetMapping("/print")
    method headerStyle (line 404) | @GetMapping("/headerStyle")
    method dynamicColumns (line 413) | @GetMapping("/dynamicColumns")
    method virtualScroll (line 422) | @GetMapping("/virtualScroll")
    method customView (line 431) | @GetMapping("/customView")
    method textSearch (line 440) | @GetMapping("/textSearch")
    method asynTree (line 449) | @GetMapping("/asynTree")
    method other (line 458) | @GetMapping("/other")
    method ajaxColumns (line 467) | @PostMapping("/ajaxColumns")
    method list (line 483) | @PostMapping("/list")
    method textList (line 523) | @PostMapping("/text/list")
    method treeList (line 574) | @PostMapping("/tree/list")
    method listChild (line 618) | @PostMapping("/tree/listChild")
  class UserTableColumn (line 650) | class UserTableColumn
    method UserTableColumn (line 657) | public UserTableColumn()
    method UserTableColumn (line 662) | public UserTableColumn(String title, String field)
    method getTitle (line 668) | public String getTitle()
    method setTitle (line 673) | public void setTitle(String title)
    method getField (line 678) | public String getField()
    method setField (line 683) | public void setField(String field)
  class UserTableModel (line 689) | class UserTableModel
    method UserTableModel (line 724) | public UserTableModel()
    method UserTableModel (line 729) | public UserTableModel(int userId, String userCode, String userName, St...
    method getUserId (line 743) | public int getUserId()
    method setUserId (line 748) | public void setUserId(int userId)
    method getUserCode (line 753) | public String getUserCode()
    method setUserCode (line 758) | public void setUserCode(String userCode)
    method getUserName (line 763) | public String getUserName()
    method setUserName (line 768) | public void setUserName(String userName)
    method getUserSex (line 773) | public String getUserSex()
    method setUserSex (line 778) | public void setUserSex(String userSex)
    method getUserPhone (line 783) | public String getUserPhone()
    method setUserPhone (line 788) | public void setUserPhone(String userPhone)
    method getUserEmail (line 793) | public String getUserEmail()
    method setUserEmail (line 798) | public void setUserEmail(String userEmail)
    method getUserBalance (line 803) | public double getUserBalance()
    method setUserBalance (line 808) | public void setUserBalance(double userBalance)
    method getStatus (line 813) | public String getStatus()
    method setStatus (line 818) | public void setStatus(String status)
    method getCreateTime (line 823) | public Date getCreateTime()
    method setCreateTime (line 828) | public void setCreateTime(Date createTime)
  class AreaModel (line 833) | class AreaModel
    method AreaModel (line 856) | public AreaModel()
    method AreaModel (line 861) | public AreaModel(int id, int parentId, String areaName, String areaCod...
    method getId (line 872) | public Long getId()
    method setId (line 877) | public void setId(Long id)
    method getParentId (line 882) | public Long getParentId()
    method setParentId (line 887) | public void setParentId(Long parentId)
    method getAreaName (line 892) | public String getAreaName()
    method setAreaName (line 897) | public void setAreaName(String areaName)
    method getAreaCode (line 902) | public String getAreaCode()
    method setAreaCode (line 907) | public void setAreaCode(String areaCode)
    method getSimplePy (line 912) | public String getSimplePy()
    method setSimplePy (line 917) | public void setSimplePy(String simplePy)
    method getPinYin (line 922) | public String getPinYin()
    method setPinYin (line 927) | public void setPinYin(String pinYin)
    method getIsTreeLeaf (line 932) | public Integer getIsTreeLeaf()
    method setIsTreeLeaf (line 937) | public void setIsTreeLeaf(Integer isTreeLeaf)
  class DocumentModel (line 943) | class DocumentModel
    method DocumentModel (line 960) | public DocumentModel()
    method DocumentModel (line 965) | public DocumentModel(int tableId, String archiveNo, String docNo, Stri...
    method getTableId (line 974) | public int getTableId()
    method getArchiveNo (line 979) | public String getArchiveNo()
    method getDocNo (line 984) | public String getDocNo()
    method getTitle (line 989) | public String getTitle()
    method getContent (line 994) | public String getContent()
    method setTableId (line 999) | public void setTableId(int tableId)
    method setArchiveNo (line 1004) | public void setArchiveNo(String archiveNo)
    method setDocNo (line 1009) | public void setDocNo(String docNo)
    method setTitle (line 1014) | public void setTitle(String title)
    method setContent (line 1019) | public void setContent(String content)

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/CustomerModel.java
  class CustomerModel (line 12) | public class CustomerModel
    method getName (line 44) | public String getName()
    method setName (line 49) | public void setName(String name)
    method getPhonenumber (line 54) | public String getPhonenumber()
    method setPhonenumber (line 59) | public void setPhonenumber(String phonenumber)
    method getSex (line 65) | public String getSex()
    method setSex (line 70) | public void setSex(String sex)
    method getBirthday (line 75) | public String getBirthday()
    method setBirthday (line 80) | public void setBirthday(String birthday)
    method getRemark (line 85) | public String getRemark()
    method setRemark (line 90) | public void setRemark(String remark)
    method getGoods (line 95) | public List<GoodsModel> getGoods()
    method setGoods (line 100) | public void setGoods(List<GoodsModel> goods)
    method toString (line 105) | @Override

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/GoodsModel.java
  class GoodsModel (line 12) | public class GoodsModel
    method getName (line 39) | public String getName()
    method setName (line 44) | public void setName(String name)
    method getWeight (line 49) | public Integer getWeight()
    method setWeight (line 54) | public void setWeight(Integer weight)
    method getPrice (line 59) | public Double getPrice()
    method setPrice (line 64) | public void setPrice(Double price)
    method getDate (line 69) | public Date getDate()
    method setDate (line 74) | public void setDate(Date date)
    method getType (line 79) | public String getType()
    method setType (line 84) | public void setType(String type)
    method toString (line 89) | @Override

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/UserOperateModel.java
  class UserOperateModel (line 9) | public class UserOperateModel extends BaseEntity
    method UserOperateModel (line 39) | public UserOperateModel()
    method UserOperateModel (line 44) | public UserOperateModel(int userId, String userCode, String userName, ...
    method getUserId (line 58) | public int getUserId()
    method setUserId (line 63) | public void setUserId(int userId)
    method getUserCode (line 68) | public String getUserCode()
    method setUserCode (line 73) | public void setUserCode(String userCode)
    method getUserName (line 78) | public String getUserName()
    method setUserName (line 83) | public void setUserName(String userName)
    method getUserSex (line 88) | public String getUserSex()
    method setUserSex (line 93) | public void setUserSex(String userSex)
    method getUserPhone (line 98) | public String getUserPhone()
    method setUserPhone (line 103) | public void setUserPhone(String userPhone)
    method getUserEmail (line 108) | public String getUserEmail()
    method setUserEmail (line 113) | public void setUserEmail(String userEmail)
    method getUserBalance (line 118) | public double getUserBalance()
    method setUserBalance (line 123) | public void setUserBalance(double userBalance)
    method getStatus (line 128) | public String getStatus()
    method setStatus (line 133) | public void setStatus(String status)
    method getCreateTime (line 138) | @Override
    method setCreateTime (line 144) | @Override

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
  class CacheController (line 20) | @Controller
    method cache (line 29) | @RequiresPermissions("monitor:cache:view")
    method getCacheNames (line 37) | @RequiresPermissions("monitor:cache:view")
    method getCacheKeys (line 45) | @RequiresPermissions("monitor:cache:view")
    method getCacheValue (line 54) | @RequiresPermissions("monitor:cache:view")
    method clearCacheName (line 64) | @RequiresPermissions("monitor:cache:view")
    method clearCacheKey (line 73) | @RequiresPermissions("monitor:cache:view")
    method clearAll (line 82) | @RequiresPermissions("monitor:cache:view")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/DruidController.java
  class DruidController (line 14) | @Controller
    method index (line 20) | @RequiresPermissions("monitor:data:view")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
  class ServerController (line 16) | @Controller
    method server (line 22) | @RequiresPermissions("monitor:server:view")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
  class SysLogininforController (line 26) | @Controller
    method logininfor (line 38) | @RequiresPermissions("monitor:logininfor:view")
    method list (line 45) | @RequiresPermissions("monitor:logininfor:list")
    method export (line 55) | @Log(title = "登录日志", businessType = BusinessType.EXPORT)
    method remove (line 66) | @RequiresPermissions("monitor:logininfor:remove")
    method clean (line 75) | @RequiresPermissions("monitor:logininfor:remove")
    method unlock (line 85) | @RequiresPermissions("monitor:logininfor:unlock")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
  class SysOperlogController (line 27) | @Controller
    method operlog (line 36) | @RequiresPermissions("monitor:operlog:view")
    method list (line 43) | @RequiresPermissions("monitor:operlog:list")
    method export (line 53) | @Log(title = "操作日志", businessType = BusinessType.EXPORT)
    method remove (line 64) | @Log(title = "操作日志", businessType = BusinessType.DELETE)
    method detail (line 73) | @RequiresPermissions("monitor:operlog:detail")
    method clean (line 81) | @Log(title = "操作日志", businessType = BusinessType.CLEAN)

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
  class SysUserOnlineController (line 30) | @Controller
    method online (line 42) | @RequiresPermissions("monitor:online:view")
    method list (line 49) | @RequiresPermissions("monitor:online:list")
    method batchForceLogout (line 59) | @RequiresPermissions(value = { "monitor:online:batchForceLogout", "mon...

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysCaptchaController.java
  class SysCaptchaController (line 24) | @Controller
    method getKaptchaImage (line 37) | @GetMapping(value = "/captchaImage")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  class SysConfigController (line 28) | @Controller
    method config (line 37) | @RequiresPermissions("system:config:view")
    method list (line 47) | @RequiresPermissions("system:config:list")
    method export (line 57) | @Log(title = "参数管理", businessType = BusinessType.EXPORT)
    method add (line 71) | @RequiresPermissions("system:config:add")
    method addSave (line 81) | @RequiresPermissions("system:config:add")
    method edit (line 98) | @RequiresPermissions("system:config:edit")
    method editSave (line 109) | @RequiresPermissions("system:config:edit")
    method remove (line 126) | @RequiresPermissions("system:config:remove")
    method refreshCache (line 139) | @RequiresPermissions("system:config:remove")
    method checkConfigKeyUnique (line 152) | @PostMapping("/checkConfigKeyUnique")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
  class SysDeptController (line 30) | @Controller
    method dept (line 39) | @RequiresPermissions("system:dept:view")
    method list (line 46) | @RequiresPermissions("system:dept:list")
    method add (line 58) | @RequiresPermissions("system:dept:add")
    method addSave (line 73) | @Log(title = "部门管理", businessType = BusinessType.INSERT)
    method edit (line 90) | @RequiresPermissions("system:dept:edit")
    method editSave (line 107) | @Log(title = "部门管理", businessType = BusinessType.UPDATE)
    method remove (line 134) | @Log(title = "部门管理", businessType = BusinessType.DELETE)
    method checkDeptNameUnique (line 155) | @PostMapping("/checkDeptNameUnique")
    method selectDeptTree (line 168) | @RequiresPermissions("system:dept:list")
    method treeDataExcludeChild (line 180) | @RequiresPermissions("system:dept:list")
    method updateSort (line 194) | @PostMapping("/updateSort")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
  class SysDictDataController (line 28) | @Controller
    method dictData (line 37) | @RequiresPermissions("system:dict:view")
    method list (line 44) | @PostMapping("/list")
    method export (line 54) | @Log(title = "字典数据", businessType = BusinessType.EXPORT)
    method add (line 68) | @RequiresPermissions("system:dict:add")
    method addSave (line 79) | @Log(title = "字典数据", businessType = BusinessType.INSERT)
    method edit (line 92) | @RequiresPermissions("system:dict:edit")
    method editSave (line 103) | @Log(title = "字典数据", businessType = BusinessType.UPDATE)
    method remove (line 113) | @Log(title = "字典数据", businessType = BusinessType.DELETE)

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  class SysDictTypeController (line 29) | @Controller
    method dictType (line 38) | @RequiresPermissions("system:dict:view")
    method list (line 45) | @PostMapping("/list")
    method export (line 55) | @Log(title = "字典类型", businessType = BusinessType.EXPORT)
    method add (line 70) | @RequiresPermissions("system:dict:add")
    method addSave (line 80) | @Log(title = "字典类型", businessType = BusinessType.INSERT)
    method edit (line 97) | @RequiresPermissions("system:dict:edit")
    method editSave (line 108) | @Log(title = "字典类型", businessType = BusinessType.UPDATE)
    method remove (line 122) | @Log(title = "字典类型", businessType = BusinessType.DELETE)
    method refreshCache (line 135) | @RequiresPermissions("system:dict:remove")
    method detail (line 148) | @RequiresPermissions("system:dict:list")
    method checkDictTypeUnique (line 160) | @PostMapping("/checkDictTypeUnique")
    method selectDictTree (line 170) | @GetMapping("/selectDictTree/{columnId}/{dictType}")
    method treeData (line 181) | @GetMapping("/treeData")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
  class SysIndexController (line 35) | @Controller
    method index (line 48) | @GetMapping("/index")
    method lockscreen (line 92) | @GetMapping("/lockscreen")
    method unlockscreen (line 101) | @PostMapping("/unlockscreen")
    method switchSkin (line 119) | @GetMapping("/system/switchSkin")
    method menuStyle (line 126) | @GetMapping("/system/menuStyle/{style}")
    method main (line 133) | @GetMapping("/system/main")
    method contentMainClass (line 141) | public String contentMainClass(Boolean footer, Boolean tagsView)
    method initPasswordIsModify (line 159) | public boolean initPasswordIsModify(Date pwdUpdateDate)
    method passwordIsExpiration (line 166) | public boolean passwordIsExpiration(Date pwdUpdateDate)

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  class SysLoginController (line 28) | @Controller
    method login (line 40) | @GetMapping("/login")
    method ajaxLogin (line 55) | @PostMapping("/login")
    method unauth (line 77) | @GetMapping("/unauth")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
  class SysMenuController (line 31) | @Controller
    method menu (line 40) | @RequiresPermissions("system:menu:view")
    method list (line 47) | @RequiresPermissions("system:menu:list")
    method remove (line 60) | @Log(title = "菜单管理", businessType = BusinessType.DELETE)
    method add (line 81) | @RequiresPermissions("system:menu:add")
    method addSave (line 103) | @Log(title = "菜单管理", businessType = BusinessType.INSERT)
    method edit (line 121) | @RequiresPermissions("system:menu:edit")
    method editSave (line 132) | @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
    method updateSort (line 150) | @PostMapping("/updateSort")
    method icon (line 161) | @GetMapping("/icon")
    method checkMenuNameUnique (line 170) | @PostMapping("/checkMenuNameUnique")
    method roleMenuTreeData (line 180) | @GetMapping("/roleMenuTreeData")
    method menuTreeData (line 192) | @GetMapping("/menuTreeData")
    method selectMenuTree (line 204) | @GetMapping("/selectMenuTree/{menuId}")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
  class SysNoticeController (line 30) | @Controller
    method notice (line 42) | @RequiresPermissions("system:notice:view")
    method list (line 52) | @RequiresPermissions("system:notice:list")
    method add (line 65) | @RequiresPermissions("system:notice:add")
    method addSave (line 75) | @RequiresPermissions("system:notice:add")
    method edit (line 88) | @RequiresPermissions("system:notice:edit")
    method editSave (line 99) | @RequiresPermissions("system:notice:edit")
    method view (line 112) | @RequiresPermissions("system:notice:list")
    method listTop (line 123) | @GetMapping("/listTop")
    method markRead (line 138) | @PostMapping("/markRead")
    method markReadAll (line 150) | @PostMapping("/markReadAll")
    method remove (line 163) | @RequiresPermissions("system:notice:remove")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
  class SysPostController (line 28) | @Controller
    method operlog (line 37) | @RequiresPermissions("system:post:view")
    method list (line 44) | @RequiresPermissions("system:post:list")
    method export (line 54) | @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
    method remove (line 65) | @RequiresPermissions("system:post:remove")
    method add (line 77) | @RequiresPermissions("system:post:add")
    method addSave (line 87) | @RequiresPermissions("system:post:add")
    method edit (line 108) | @RequiresPermissions("system:post:edit")
    method editSave (line 119) | @RequiresPermissions("system:post:edit")
    method checkPostNameUnique (line 140) | @PostMapping("/checkPostNameUnique")
    method checkPostCodeUnique (line 150) | @PostMapping("/checkPostCodeUnique")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
  class SysProfileController (line 33) | @Controller
    method profile (line 50) | @GetMapping()
    method checkPassword (line 60) | @GetMapping("/checkPassword")
    method resetPwd (line 68) | @GetMapping("/resetPwd")
    method resetPwd (line 76) | @Log(title = "重置密码", businessType = BusinessType.UPDATE)
    method edit (line 103) | @GetMapping("/edit")
    method avatar (line 114) | @GetMapping("/avatar")
    method update (line 125) | @Log(title = "个人信息", businessType = BusinessType.UPDATE)
    method updateAvatar (line 154) | @Log(title = "个人信息", businessType = BusinessType.UPDATE)

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
  class SysRegisterController (line 20) | @Controller
    method register (line 29) | @GetMapping("/register")
    method ajaxRegister (line 35) | @PostMapping("/register")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  class SysRoleController (line 36) | @Controller
    method role (line 54) | @RequiresPermissions("system:role:view")
    method list (line 61) | @RequiresPermissions("system:role:list")
    method export (line 71) | @Log(title = "角色管理", businessType = BusinessType.EXPORT)
    method add (line 85) | @RequiresPermissions("system:role:add")
    method addSave (line 95) | @RequiresPermissions("system:role:add")
    method edit (line 118) | @RequiresPermissions("system:role:edit")
    method editSave (line 130) | @RequiresPermissions("system:role:edit")
    method authDataScope (line 154) | @GetMapping("/authDataScope/{roleId}")
    method authDataScopeSave (line 165) | @RequiresPermissions("system:role:edit")
    method remove (line 182) | @RequiresPermissions("system:role:remove")
    method checkRoleNameUnique (line 194) | @PostMapping("/checkRoleNameUnique")
    method checkRoleKeyUnique (line 204) | @PostMapping("/checkRoleKeyUnique")
    method selectMenuTree (line 214) | @GetMapping("/selectMenuTree")
    method changeStatus (line 223) | @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    method authUser (line 237) | @RequiresPermissions("system:role:edit")
    method allocatedList (line 249) | @RequiresPermissions("system:role:list")
    method cancelAuthUser (line 262) | @RequiresPermissions("system:role:edit")
    method cancelAuthUserAll (line 274) | @RequiresPermissions("system:role:edit")
    method selectUser (line 286) | @RequiresPermissions("system:role:list")
    method unallocatedList (line 297) | @RequiresPermissions("system:role:list")
    method selectAuthUserAll (line 310) | @RequiresPermissions("system:role:edit")
    method deptTreeData (line 323) | @RequiresPermissions("system:role:edit")
    method view (line 335) | @RequiresPermissions("system:role:list")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  class SysUserController (line 43) | @Controller
    method user (line 64) | @RequiresPermissions("system:user:view")
    method list (line 71) | @RequiresPermissions("system:user:list")
    method export (line 81) | @Log(title = "用户管理", businessType = BusinessType.EXPORT)
    method importData (line 92) | @Log(title = "用户管理", businessType = BusinessType.IMPORT)
    method importTemplate (line 104) | @RequiresPermissions("system:user:view")
    method add (line 116) | @RequiresPermissions("system:user:add")
    method addSave (line 128) | @RequiresPermissions("system:user:add")
    method edit (line 158) | @RequiresPermissions("system:user:edit")
    method view (line 173) | @RequiresPermissions("system:user:list")
    method editSave (line 187) | @RequiresPermissions("system:user:edit")
    method resetPwd (line 214) | @RequiresPermissions("system:user:resetPwd")
    method resetPwdSave (line 223) | @RequiresPermissions("system:user:resetPwd")
    method authRole (line 247) | @RequiresPermissions("system:user:edit")
    method insertAuthRole (line 263) | @RequiresPermissions("system:user:edit")
    method remove (line 276) | @RequiresPermissions("system:user:remove")
    method checkLoginNameUnique (line 292) | @PostMapping("/checkLoginNameUnique")
    method checkPhoneUnique (line 302) | @PostMapping("/checkPhoneUnique")
    method checkEmailUnique (line 312) | @PostMapping("/checkEmailUnique")
    method changeStatus (line 322) | @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    method deptTreeData (line 336) | @RequiresPermissions("system:user:list")
    method selectDeptTree (line 350) | @RequiresPermissions("system:user:list")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/BuildController.java
  class BuildController (line 14) | @Controller
    method build (line 20) | @RequiresPermissions("tool:build:view")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
  class SwaggerController (line 14) | @Controller
    method index (line 18) | @RequiresPermissions("tool:swagger:view")

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
  class TestController (line 27) | @Tag(name = "用户信息管理")
    method userList (line 38) | @Operation(summary = "获取用户列表")
    method getUser (line 46) | @Operation(summary = "获取用户详细")
    method save (line 61) | @Operation(summary = "新增用户")
    method update (line 73) | @Operation(summary = "更新用户")
    method delete (line 91) | @Operation(summary = "删除用户信息")
  class UserEntity (line 108) | @Schema(description = "用户实体")
    method UserEntity (line 123) | public UserEntity()
    method UserEntity (line 128) | public UserEntity(Integer userId, String username, String password, St...
    method getUserId (line 136) | public Integer getUserId()
    method setUserId (line 141) | public void setUserId(Integer userId)
    method getUsername (line 146) | public String getUsername()
    method setUsername (line 151) | public void setUsername(String username)
    method getPassword (line 156) | public String getPassword()
    method setPassword (line 161) | public void setPassword(String password)
    method getMobile (line 166) | public String getMobile()
    method setMobile (line 171) | public void setMobile(String mobile)

FILE: ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
  class SwaggerConfig (line 19) | @Configuration
    method customOpenApi (line 29) | @Bean
    method securityScheme (line 39) | @Bean
    method getApiInfo (line 52) | @SuppressWarnings("static-access")

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/beautifyhtml/beautifyhtml.js
  function style_html (line 64) | function style_html(html_source, options, js_beautify, css_beautify) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/blockUI/jquery.blockUI.js
  function setup (line 19) | function setup($) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-select/bootstrap-select.js
  function allowedAttribute (line 91) | function allowedAttribute (attr, allowedAttributeList) {
  function sanitizeHtml (line 116) | function sanitizeHtml (unsafeElements, whiteList, sanitizeFn) {
  function isEqual (line 239) | function isEqual (array1, array2) {
  function getSelectedOptions (line 328) | function getSelectedOptions (select, ignoreDisabled) {
  function getSelectValues (line 349) | function getSelectValues (select, selectedOptions) {
  function stringSearch (line 422) | function stringSearch (li, searchString, method, normalize) {
  function toInteger (line 458) | function toInteger (value) {
  function deburrLetter (line 541) | function deburrLetter (key) {
  function normalizeToBase (line 545) | function normalizeToBase (string) {
  function showNoResults (line 810) | function showNoResults (searchMatch, searchValue) {
  function scroll (line 1227) | function scroll (scrollTop, init) {
  function addDivider (line 1509) | function addDivider (config) {
  function addOption (line 1527) | function addOption (option, config) {
  function addOptgroup (line 1566) | function addOptgroup (index, selectOptions) {
  function buildElement (line 1641) | function buildElement (item) {
  function setFocus (line 2416) | function setFocus () {
  function checkPopperExists (line 2424) | function checkPopperExists () {
  function Plugin (line 3106) | function Plugin (option) {
  function keydownHandler (line 3219) | function keydownHandler () {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.js
  method formatAutoRefresh (line 27) | formatAutoRefresh () {
  method init (line 35) | init (...args) {
  method initToolbar (line 43) | initToolbar (...args) {
  method toggleAutoRefresh (line 62) | toggleAutoRefresh () {
  method destroy (line 77) | destroy () {
  method setupRefreshInterval (line 85) | setupRefreshInterval () {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.js
  function e (line 5) | function e(t,e,n){return e=i(e),function(t,e){if(e&&("object"==typeof e|...
  function n (line 5) | function n(t,e,n){return function(t,e){for(var n=0;n<e.length;n++){var r...
  function r (line 5) | function r(){return r="undefined"!=typeof Reflect&&Reflect.get?Reflect.g...
  function i (line 5) | function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind(...
  function o (line 5) | function o(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct...
  function u (line 5) | function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bin...
  function f (line 5) | function f(t,e,n,o){var u=r(i(t.prototype),e,n);return"function"==typeof...
  function c (line 5) | function c(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var...
  function h (line 5) | function h(){if(s)return a;s=1;var t=function(t){return t&&t.Math===Math...
  function O (line 5) | function O(){return v?p:(v=1,p=function(t){try{return!!t()}catch(t){retu...
  function C (line 5) | function C(){if(b)return y;b=1;var t=O();return y=!t((function(){return ...
  function j (line 5) | function j(){if(m)return g;m=1;var t=O();return g=!t((function(){var t=f...
  function S (line 5) | function S(){if(w)return x;w=1;var t=j(),e=Function.prototype.call;retur...
  function vt (line 5) | function vt(){if(R)return pt;R=1;var t={}.propertyIsEnumerable,e=Object....
  function yt (line 5) | function yt(){return F?B:(F=1,B=function(t,e){return{enumerable:!(1&t),c...
  function bt (line 5) | function bt(){if(k)return T;k=1;var t=j(),e=Function.prototype,n=e.call,...
  function gt (line 5) | function gt(){if(E)return P;E=1;var t=bt(),e=t({}.toString),n=t("".slice...
  function mt (line 5) | function mt(){if(N)return A;N=1;var t=bt(),e=O(),n=gt(),r=Object,i=t(""....
  function xt (line 5) | function xt(){return I?H:(I=1,H=function(t){return null==t})}
  function wt (line 5) | function wt(){if(W)return L;W=1;var t=xt(),e=TypeError;return L=function...
  function $t (line 5) | function $t(){if(M)return D;M=1;var t=mt(),e=wt();return D=function(n){r...
  function Ot (line 5) | function Ot(){if(z)return _;z=1;var t="object"==typeof document&&documen...
  function Ct (line 5) | function Ct(){if(Y)return X;Y=1;var t=Ot();return X=function(e){return"o...
  function jt (line 5) | function jt(){if(G)return q;G=1;var t=h(),e=Ot();return q=function(n,r){...
  function St (line 5) | function St(){if(J)return Z;J=1;var t,e,n=h(),r=function(){if(Q)return K...
  function Rt (line 5) | function Rt(){if(et)return tt;et=1;var t=St(),e=O(),n=h().String;return ...
  function Bt (line 5) | function Bt(){if(rt)return nt;rt=1;var t=Rt();return nt=t&&!Symbol.sham&...
  function Ft (line 5) | function Ft(){if(ot)return it;ot=1;var t=jt(),e=Ot(),n=function(){if(U)r...
  function Tt (line 5) | function Tt(){if(ft)return ut;ft=1;var t=String;return ut=function(e){tr...
  function kt (line 5) | function kt(){if(at)return ct;at=1;var t=Ot(),e=Tt(),n=TypeError;return ...
  function Pt (line 5) | function Pt(){if(lt)return st;lt=1;var t=kt(),e=xt();return st=function(...
  function Et (line 5) | function Et(){if(ht)return dt;ht=1;var t=S(),e=Ot(),n=Ct(),r=TypeError;r...
  function oe (line 5) | function oe(){if(It)return Ht;It=1;var t=h(),e=Object.defineProperty;ret...
  function ue (line 5) | function ue(){if(Lt)return ie.exports;Lt=1;var t=Nt?At:(Nt=1,At=!1),e=h(...
  function fe (line 5) | function fe(){if(Dt)return Wt;Dt=1;var t=ue();return Wt=function(e,n){re...
  function ce (line 5) | function ce(){if(_t)return Mt;_t=1;var t=wt(),e=Object;return Mt=functio...
  function ae (line 5) | function ae(){if(Xt)return zt;Xt=1;var t=bt(),e=ce(),n=t({}.hasOwnProper...
  function se (line 5) | function se(){if(qt)return Yt;qt=1;var t=bt(),e=0,n=Math.random(),r=t(1....
  function le (line 5) | function le(){if(Vt)return Gt;Vt=1;var t=h(),e=fe(),n=ae(),r=se(),i=Rt()...
  function de (line 5) | function de(){if(Kt)return Ut;Kt=1;var t=S(),e=Ct(),n=Ft(),r=Pt(),i=Et()...
  function he (line 5) | function he(){if(Zt)return Qt;Zt=1;var t=de(),e=Ft();return Qt=function(...
  function pe (line 5) | function pe(){if(te)return Jt;te=1;var t=h(),e=Ct(),n=t.document,r=e(n)&...
  function ve (line 5) | function ve(){if(ne)return ee;ne=1;var t=C(),e=O(),n=pe();return ee=!t&&...
  function ye (line 5) | function ye(){if(re)return $;re=1;var t=C(),e=S(),n=vt(),r=yt(),i=$t(),o...
  function je (line 5) | function je(){if(ge)return be;ge=1;var t=C(),e=O();return be=t&&e((funct...
  function Se (line 5) | function Se(){if(xe)return me;xe=1;var t=Ct(),e=String,n=TypeError;retur...
  function Re (line 5) | function Re(){if(we)return Ce;we=1;var t=C(),e=ve(),n=je(),r=Se(),i=he()...
  function Be (line 5) | function Be(){if(Oe)return $e;Oe=1;var t=C(),e=Re(),n=yt();return $e=t?f...
  function Ye (line 5) | function Ye(){if(Pe)return ke;Pe=1;var t=bt(),e=Ot(),n=ue(),r=t(Function...
  function qe (line 5) | function qe(){if(He)return Ne;He=1;var t=fe(),e=se(),n=t("keys");return ...
  function Ge (line 5) | function Ge(){return Le?Ie:(Le=1,Ie={})}
  function Ve (line 5) | function Ve(){if(De)return We;De=1;var t,e,n,r=function(){if(Ae)return E...
  function Ue (line 5) | function Ue(){if(Me)return Xe.exports;Me=1;var t=bt(),e=O(),n=Ot(),r=ae(...
  function Ke (line 5) | function Ke(){if(ze)return _e;ze=1;var t=Ot(),e=Re(),n=Ue(),r=oe();retur...
  function yn (line 5) | function yn(){if(tn)return Je;tn=1;var t=function(){if(Ze)return Qe;Ze=1...
  function bn (line 5) | function bn(){if(nn)return en;nn=1;var t=yn(),e=Math.max,n=Math.min;retu...
  function gn (line 5) | function gn(){if(on)return rn;on=1;var t=yn(),e=Math.min;return rn=funct...
  function mn (line 5) | function mn(){if(fn)return un;fn=1;var t=gn();return un=function(e){retu...
  function xn (line 5) | function xn(){if(an)return cn;an=1;var t=$t(),e=bn(),n=mn(),r=function(r...
  function wn (line 5) | function wn(){if(ln)return sn;ln=1;var t=bt(),e=ae(),n=$t(),r=xn().index...
  function $n (line 5) | function $n(){return hn?dn:(hn=1,dn=["constructor","hasOwnProperty","isP...
  function Qn (line 5) | function Qn(){return On||(On=1,Kn.f=Object.getOwnPropertySymbols),Kn}
  function Zn (line 5) | function Zn(){if(jn)return Cn;jn=1;var t=jt(),e=bt(),n=function(){if(pn)...
  function Jn (line 5) | function Jn(){if(Rn)return Sn;Rn=1;var t=ae(),e=Zn(),n=ye(),r=Re();retur...
  function tr (line 5) | function tr(){if(kn)return Tn;kn=1;var t=h(),e=ye().f,n=Be(),r=Ke(),i=oe...
  function er (line 5) | function er(){if(En)return Pn;En=1;var t=gt(),e=bt();return Pn=function(...
  function nr (line 5) | function nr(){if(In)return Hn;In=1;var t=gt();return Hn=Array.isArray||f...
  function rr (line 5) | function rr(){if(Wn)return Ln;Wn=1;var t={};return t[le()("toStringTag")...
  function ir (line 5) | function ir(){if(Mn)return Dn;Mn=1;var t=rr(),e=Ot(),n=gt(),r=le()("toSt...
  function or (line 5) | function or(){if(zn)return _n;zn=1;var t=bt(),e=O(),n=Ot(),r=ir(),i=jt()...
  function ur (line 5) | function ur(){if(Yn)return Xn;Yn=1;var t=nr(),e=or(),n=Ct(),r=le()("spec...
  function fr (line 5) | function fr(){if(Gn)return qn;Gn=1;var t=ur();return qn=function(e,n){re...
  function cr (line 5) | function cr(){if(Un)return Vn;Un=1;var t=function(){if(Nn)return An;Nn=1...
  function xr (line 5) | function xr(){if(sr)return ar;sr=1;var t=wn(),e=$n();return ar=Object.ke...
  function wr (line 5) | function wr(){if(hr)return dr;hr=1;var t=jt();return dr=t("document","do...
  function $r (line 5) | function $r(){if(vr)return pr;vr=1;var t,e=Se(),n=function(){if(lr)retur...
  function Or (line 5) | function Or(){if(br)return yr;br=1;var t=le(),e=$r(),n=Re().f,r=t("unsco...
  function Br (line 5) | function Br(){if(jr)return Cr;jr=1;var t=O();return Cr=function(e,n){var...
  function Ur (line 5) | function Ur(){if(Dr)return Wr;Dr=1;var t=ir(),e=String;return Wr=functio...
  function Kr (line 5) | function Kr(){return _r?Mr:(_r=1,Mr="\t\n\v\f\r                 \u2028\u...
  function Qr (line 5) | function Qr(){if(qr)return Yr;qr=1;var t=h(),e=O(),n=bt(),r=Ur(),i=funct...
  function i (line 5) | function i(){return function(t,e){if(!(t instanceof e))throw new TypeErr...

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/cookie/bootstrap-table-cookie.js
  method getCurrentHeader (line 22) | getCurrentHeader (that) {
  method getCurrentSearchControls (line 25) | getCurrentSearchControls (that) {
  method isCookieSupportedByBrowser (line 28) | isCookieSupportedByBrowser () {
  method isCookieEnabled (line 31) | isCookieEnabled (that, cookieName) {
  method setCookie (line 37) | setCookie (that, cookieName, cookieValue) {
  method getCookie (line 47) | getCookie (that, cookieName) {
  method deleteCookie (line 57) | deleteCookie (that, cookieName) {
  method calculateExpiration (line 60) | calculateExpiration (cookieExpire) {
  method initCookieFilters (line 96) | initCookieFilters (that) {
  method init (line 212) | init () {
  method initServer (line 274) | initServer (...args) {
  method initTable (line 289) | initTable (...args) {
  method onSort (line 294) | onSort (...args) {
  method onMultipleSort (line 313) | onMultipleSort (...args) {
  method onPageNumber (line 332) | onPageNumber (...args) {
  method onPageListChange (line 340) | onPageListChange (...args) {
  method onPagePre (line 350) | onPagePre (...args) {
  method onPageNext (line 358) | onPageNext (...args) {
  method _toggleColumn (line 366) | _toggleColumn (...args) {
  method _toggleAllColumns (line 377) | _toggleAllColumns (...args) {
  method toggleView (line 388) | toggleView () {
  method toggleCustomView (line 393) | toggleCustomView () {
  method selectPage (line 398) | selectPage (page) {
  method onSearch (line 406) | onSearch (event) {
  method initHeader (line 417) | initHeader (...args) {
  method persistReorderColumnsState (line 424) | persistReorderColumnsState (that) {
  method filterBy (line 428) | filterBy (...args) {
  method initCookie (line 436) | initCookie () {
  method getCookies (line 526) | getCookies () {
  method deleteCookie (line 538) | deleteCookie (cookieName) {
  method configureStorage (line 546) | configureStorage () {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/custom-view/bootstrap-table-custom-view.js
  method onCustomViewPostBody (line 31) | onCustomViewPostBody () {
  method onCustomViewPreBody (line 34) | onCustomViewPreBody () {
  method onToggleCustomView (line 37) | onToggleCustomView () {
  method formatToggleCustomViewOn (line 43) | formatToggleCustomViewOn () {
  method formatToggleCustomViewOff (line 46) | formatToggleCustomViewOff () {
  method init (line 62) | init () {
  method initToolbar (line 68) | initToolbar (...args) {
  method initBody (line 86) | initBody () {
  method toggleCustomView (line 116) | toggleCustomView () {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js
  method onEditableInit (line 10) | onEditableInit () {
  method onEditableSave (line 13) | onEditableSave (field, row, rowIndex, oldValue, $el) {
  method onEditableShown (line 16) | onEditableShown (field, row, $el, editable) {
  method onEditableHidden (line 19) | onEditableHidden (field, row, $el, reason) {
  method initTable (line 36) | initTable () {
  method initBody (line 104) | initBody (fixedScroll) {
  method getData (line 174) | getData (params) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js
  constant TYPE_NAME (line 8) | const TYPE_NAME = {
  method formatExport (line 44) | formatExport () {
  method onExportSaved (line 54) | onExportSaved (exportedRows) {
  method onExportStarted (line 57) | onExportStarted () {
  method initToolbar (line 68) | initToolbar (...args) {
  method handleToolbar (line 167) | handleToolbar () {
  method exportTable (line 177) | exportTable (options) {
  method updateSelected (line 323) | updateSelected () {
  method updateExportButton (line 328) | updateExportButton () {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js
  method init (line 30) | init (...args) {
  method conditionCardView (line 81) | conditionCardView () {
  method conditionFullView (line 86) | conditionFullView () {
  method changeTableView (line 91) | changeTableView (cardViewState) {
  method showHideColumns (line 96) | showHideColumns (checked) {
  method changeView (line 108) | changeView (width, height) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/print/bootstrap-table-print.js
  function printPageBuilderDefault (line 7) | function printPageBuilderDefault (table, styles) {
  method formatPrint (line 54) | formatPrint () {
  method printPageBuilder (line 66) | printPageBuilder (table, styles) {
  method init (line 86) | init (...args) {
  method initToolbar (line 96) | initToolbar (...args) {
  method mergeCells (line 118) | mergeCells (options) {
  method doPrint (line 139) | doPrint (data) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js
  method onReorderColumn (line 66) | onReorderColumn (headerFields) {
  method initHeader (line 79) | initHeader (...args) {
  method _toggleColumn (line 89) | _toggleColumn (...args) {
  method toggleView (line 99) | toggleView (...args) {
  method resetView (line 113) | resetView (...args) {
  method makeColumnsReorderable (line 123) | makeColumnsReorderable (order = null) {
  method orderColumns (line 210) | orderColumns (order) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-columns/jquery.dragtable.js
  function n (line 22) | function n(e,t){var i=e.parentNode,n=e.nextSibling===t?e:e.nextSibling;t...

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js
  method onReorderRowsDrag (line 18) | onReorderRowsDrag (row) {
  method onReorderRowsDrop (line 22) | onReorderRowsDrop (row) {
  method onReorderRow (line 26) | onReorderRow (newData) {
  method onDragStop (line 29) | onDragStop () {}
  method onAllowDrop (line 30) | onAllowDrop () {
  method init (line 40) | init (...args) {
  method makeRowsReorderable (line 62) | makeRowsReorderable () {
  method onDropStart (line 75) | onDropStart (table, draggingTd) {
  method onDragStop (line 82) | onDragStop (table, draggedRow) {
  method onAllowDrop (line 89) | onAllowDrop (hoveredRow, draggedRow) {
  method onDrop (line 98) | onDrop (table) {
  method initSearch (line 132) | initSearch () {
  method initSort (line 137) | initSort () {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-rows/jquery.tablednd.js
  function parseStyle (line 15) | function parseStyle(css) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js
  method initBody (line 38) | initBody (...args) {
  method toggleView (line 49) | toggleView (...args) {
  method resetView (line 58) | resetView (...args) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/cropper/cropper.js
  function ownKeys (line 17) | function ownKeys(object, enumerableOnly) {
  function _objectSpread2 (line 35) | function _objectSpread2(target) {
  function _typeof (line 55) | function _typeof(obj) {
  function _classCallCheck (line 71) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 77) | function _defineProperties(target, props) {
  function _createClass (line 87) | function _createClass(Constructor, protoProps, staticProps) {
  function _defineProperty (line 93) | function _defineProperty(obj, key, value) {
  function _toConsumableArray (line 108) | function _toConsumableArray(arr) {
  function _arrayWithoutHoles (line 112) | function _arrayWithoutHoles(arr) {
  function _iterableToArray (line 116) | function _iterableToArray(iter) {
  function _unsupportedIterableToArray (line 120) | function _unsupportedIterableToArray(o, minLen) {
  function _arrayLikeToArray (line 129) | function _arrayLikeToArray(arr, len) {
  function _nonIterableSpread (line 137) | function _nonIterableSpread() {
  function isNumber (line 288) | function isNumber(value) {
  function isUndefined (line 306) | function isUndefined(value) {
  function isObject (line 315) | function isObject(value) {
  function isPlainObject (line 325) | function isPlainObject(value) {
  function isFunction (line 344) | function isFunction(value) {
  function toArray (line 354) | function toArray(value) {
  function forEach (line 364) | function forEach(data, callback) {
  function normalizeDecimalNumber (line 414) | function normalizeDecimalNumber(value) {
  function setStyle (line 425) | function setStyle(element, styles) {
  function hasClass (line 442) | function hasClass(element, value) {
  function addClass (line 451) | function addClass(element, value) {
  function removeClass (line 482) | function removeClass(element, value) {
  function toggleClass (line 510) | function toggleClass(element, value, added) {
  function toParamCase (line 536) | function toParamCase(value) {
  function getData (line 546) | function getData(element, name) {
  function setData (line 564) | function setData(element, name, data) {
  function removeData (line 579) | function removeData(element, name) {
  function removeListener (line 637) | function removeListener(element, type, listener) {
  function addListener (line 669) | function addListener(element, type, listener) {
  function dispatchEvent (line 711) | function dispatchEvent(element, type, data) {
  function getOffset (line 733) | function getOffset(element) {
  function isCrossOriginURL (line 748) | function isCrossOriginURL(url) {
  function addTimestamp (line 758) | function addTimestamp(url) {
  function getTransforms (line 768) | function getTransforms(_ref) {
  function getMaxZoomRatio (line 810) | function getMaxZoomRatio(pointers) {
  function getPointer (line 839) | function getPointer(_ref2, endOnly) {
  function getPointersCenter (line 857) | function getPointersCenter(pointers) {
  function getAdjustedSizes (line 882) | function getAdjustedSizes(_ref4) // or 'cover'
  function getRotatedSizes (line 916) | function getRotatedSizes(_ref5) {
  function getSourceCanvas (line 951) | function getSourceCanvas(image, _ref6, _ref7, _ref8) {
  function getStringFromCharCode (line 1032) | function getStringFromCharCode(dataView, start, length) {
  function dataURLToArrayBuffer (line 1049) | function dataURLToArrayBuffer(dataURL) {
  function arrayBufferToDataURL (line 1066) | function arrayBufferToDataURL(arrayBuffer, mimeType) {
  function resetAndGetOrientation (line 1087) | function resetAndGetOrientation(arrayBuffer) {
  function parseOrientation (line 1167) | function parseOrientation(orientation) {
  function Cropper (line 3223) | function Cropper(element) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datetimepicker.js
  function timeZoneAbbreviation (line 54) | function timeZoneAbbreviation() {
  function UTCDate (line 71) | function UTCDate() {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/duallistbox/bootstrap-duallistbox.js
  function BootstrapDualListbox (line 45) | function BootstrapDualListbox(element, options) {
  function triggerChangeEvent (line 57) | function triggerChangeEvent(dualListbox) {
  function updateSelectionStates (line 61) | function updateSelectionStates(dualListbox) {
  function changeSelectionState (line 73) | function changeSelectionState(dualListbox, original_index, selected) {
  function formatString (line 88) | function formatString(s, args) {
  function refreshInfo (line 94) | function refreshInfo(dualListbox) {
  function refreshSelects (line 128) | function refreshSelects(dualListbox) {
  function filter (line 151) | function filter(dualListbox, selectIndex) {
  function saveSelections (line 182) | function saveSelections(dualListbox, selectIndex) {
  function sortOptionsByInputOrder (line 190) | function sortOptionsByInputOrder(select){
  function sortOptions (line 209) | function sortOptions(select, dualListbox) {
  function clearSelections (line 218) | function clearSelections(dualListbox) {
  function move (line 224) | function move(dualListbox) {
  function remove (line 248) | function remove(dualListbox) {
  function moveAll (line 271) | function moveAll(dualListbox) {
  function removeAll (line 292) | function removeAll(dualListbox) {
  function bindEvents (line 312) | function bindEvents(dualListbox) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/flot/curvedLines.js
  function init (line 101) | function init(plot) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.js
  function H (line 31) | function H(J,K,I){return K<J?J:(K>I?I:K)}
  function Plot (line 35) | function Plot(placeholder, data_, options_, plugins) {
  function floorInBase (line 2595) | function floorInBase(n, base) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.pie.js
  function init (line 63) | function init(plot) // this is the "body" of the plugin

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.resize.js
  function m (line 23) | function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r...
  function g (line 23) | function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width...
  function init (line 28) | function init(plot) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.spline.js
  function getControlPoints (line 53) | function getControlPoints(x0, y0, x1, y1, x2, y2, tension) {
  function drawLine (line 77) | function drawLine(points, ctx, height, fill, seriesColor) {
  function queue (line 115) | function queue(ctx, type, points, cpoints) {
  function drawSpline (line 138) | function drawSpline(plot, ctx, series) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.symbol.js
  function processRawData (line 17) | function processRawData(plot, series, datapoints) {
  function init (line 62) | function init(plot) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/fullscreen/jquery.fullscreen.js
  function fullScreen (line 24) | function fullScreen(state)
  function toggleFullScreen (line 112) | function toggleFullScreen()
  function fullScreenChangeHandler (line 125) | function fullScreenChangeHandler(event)
  function fullScreenErrorHandler (line 137) | function fullScreenErrorHandler(event)
  function installFullScreenHandlers (line 145) | function installFullScreenHandlers()

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.js
  function g (line 1) | function g(f){return f}
  function createLog (line 1) | function createLog(){var pos=$.support.fixedPosition?"fixed":"absolute",...
  function getBranch (line 1) | function getBranch(path,create){var a=path.split("."),c=a.length-1,D={br...
  function g (line 1) | function g(f){return f}
  function createFxOptions (line 1) | function createFxOptions(pane){var o=options[pane],d=options.panes;if(!o...
  function close_2 (line 2) | function close_2(){s.isMoving=false;bindStartSlidingEvents(pane,true);va...
  function open_2 (line 2) | function open_2(){s.isMoving=false;_fixIframe(pane);if(!s.isSliding){siz...
  function open_NOW (line 2) | function open_NOW(){if(!s.isClosed){bindStopSlidingEvents(pane,true)}els...
  function close_NOW (line 2) | function close_NOW(){if(s.isClosed){bindStopSlidingEvents(pane,false)}el...
  function cancelMouseOut (line 2) | function cancelMouseOut(evt){timer.clear(pane+"_closeSlider");evt.stopPr...
  function sizePane_2 (line 2) | function sizePane_2(){var actual=dimName==="width"?$P.outerWidth():$P.ou...
  function _below (line 2) | function _below($E){return max(s.css.paddingBottom,(parseInt($E.css("mar...
  function _measure (line 2) | function _measure(){var ignore=options[pane].contentIgnoreSelector,$Fs=$...
  function copy (line 2) | function copy(n){var $P=$Ps[n],$C=$Cs[n];return !$P?false:{pane:n,P:$P?$...
  function move (line 2) | function move(oPane,pane){if(!oPane){return}var P=oPane.P,C=oPane.C,oldP...
  function keyDown (line 2) | function keyDown(evt){if(!evt){return true}var code=evt.keyCode;if(code<...
  function allowOverflow (line 2) | function allowOverflow(el){if(!isInitialized()){return}if(this&&this.tag...
  function resetOverflow (line 2) | function resetOverflow(el){if(!isInitialized()){return}if(this&&this.tag...
  function stringify (line 2) | function stringify(h){var D=[],i=0,k,v,t,a=$.isArray(h);for(k in h){v=h[...
  function calc (line 2) | function calc(x,y){return(parseInt(x,10)/parseInt(y,10)*100).toFixed()}

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js
  function addCallback (line 1463) | function addCallback() {
  function copyCallback (line 2469) | function copyCallback() {
  function moveCallback (line 2498) | function moveCallback() {
  function _docMouseMove (line 2593) | function _docMouseMove(event) {
  function _docMouseUp (line 2878) | function _docMouseUp(event) {
  function _docSelect (line 2983) | function _docSelect() {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js
  function addCallback (line 1462) | function addCallback() {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exedit-3.5.js
  function copyCallback (line 194) | function copyCallback() {
  function moveCallback (line 223) | function moveCallback() {
  function _docMouseMove (line 318) | function _docMouseMove(event) {
  function _docMouseUp (line 603) | function _docMouseUp(event) {
  function _docSelect (line 708) | function _docSelect() {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/jsonview/jquery.jsonview.js
  function JSONFormatter (line 4) | function JSONFormatter(options) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/select2/select2.js
  function hasProp (line 65) | function hasProp(obj, prop) {
  function normalize (line 77) | function normalize(name, baseName) {
  function makeRequire (line 187) | function makeRequire(relName, forceSync) {
  function makeNormalize (line 204) | function makeNormalize(relName) {
  function makeLoad (line 210) | function makeLoad(depName) {
  function callDep (line 216) | function callDep(name) {
  function splitPrefix (line 233) | function splitPrefix(name) {
  function makeRelParts (line 245) | function makeRelParts(relName) {
  function makeConfig (line 293) | function makeConfig(name) {
  function BaseConstructor (line 509) | function BaseConstructor () {
  function getMethods (line 526) | function getMethods (theClass) {
  function DecoratedClass (line 552) | function DecoratedClass () {
  function ctr (line 570) | function ctr () {
  function Results (line 846) | function Results ($element, options, dataAdapter) {
  function BaseSelection (line 1409) | function BaseSelection ($element, options) {
  function SingleSelection (line 1589) | function SingleSelection () {
  function MultipleSelection (line 1696) | function MultipleSelection ($element, options) {
  function Placeholder (line 1811) | function Placeholder (decorated, $element, options) {
  function AllowClear (line 1863) | function AllowClear () { }
  function Search (line 1977) | function Search (decorated, $element, options) {
  function EventRelay (line 2212) | function EventRelay () { }
  function Translation (line 2262) | function Translation (dict) {
  function BaseAdapter (line 3149) | function BaseAdapter ($element, options) {
  function SelectAdapter (line 3192) | function SelectAdapter ($element, options) {
  function ArrayAdapter (line 3478) | function ArrayAdapter ($element, options) {
  function onlyItem (line 3517) | function onlyItem (item) {
  function AjaxAdapter (line 3562) | function AjaxAdapter ($element, options) {
  function request (line 3623) | function request () {
  function Tags (line 3671) | function Tags (decorated, $element, options) {
  function wrapper (line 3710) | function wrapper (obj, child) {
  function Tokenizer (line 3798) | function Tokenizer (decorated, $element, options) {
  function createAndSelect (line 3818) | function createAndSelect (data) {
  function select (line 3841) | function select (data) {
  function MinimumInputLength (line 3915) | function MinimumInputLength (decorated, $e, options) {
  function MaximumInputLength (line 3946) | function MaximumInputLength (decorated, $e, options) {
  function MaximumSelectionLength (line 3978) | function MaximumSelectionLength (decorated, $e, options) {
  function Dropdown (line 4034) | function Dropdown ($element, options) {
  function Search (line 4077) | function Search () { }
  function HidePlaceholder (line 4192) | function HidePlaceholder (decorated, $element, options, dataAdapter) {
  function InfiniteScroll (line 4235) | function InfiniteScroll (decorated, $element, options, dataAdapter) {
  function AttachBody (line 4329) | function AttachBody (decorated, $element, options) {
  function countResults (line 4586) | function countResults (data) {
  function MinimumResultsForSearch (line 4602) | function MinimumResultsForSearch (decorated, $element, options, dataAdap...
  function SelectOnClose (line 4626) | function SelectOnClose () { }
  function CloseOnSelect (line 4677) | function CloseOnSelect () { }
  function Defaults (line 4810) | function Defaults () {
  function stripDiacritics (line 5020) | function stripDiacritics (text) {
  function matcher (line 5029) | function matcher (params, data) {
  function Options (line 5222) | function Options (options, $element) {
  function upperCaseLetter (line 5297) | function upperCaseLetter(_, letter) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/suggest/bootstrap-suggest.js
  function isUndefined (line 38) | function isUndefined(val) {
  function handleError (line 45) | function handleError(e1, e2) {
  function getPointKeyword (line 57) | function getPointKeyword($list) {
  function setOrGetAlt (line 63) | function setOrGetAlt($input, val) {
  function setOrGetDataId (line 69) | function setOrGetDataId($input, val) {
  function setValue (line 77) | function setValue($input, keywords, options) {
  function adjustDropMenuPos (line 121) | function adjustDropMenuPos($input, $dropdownMenu, options) {
  function setBackground (line 189) | function setBackground($input, options) {
  function adjustScroll (line 229) | function adjustScroll($input, $dropdownMenu, options) {
  function unHoverAll (line 251) | function unHoverAll($dropdownMenu, options) {
  function checkInput (line 261) | function checkInput($input, $dropdownMenu, options) {
  function checkData (line 280) | function checkData(data) {
  function inEffectiveFields (line 307) | function inEffectiveFields(field, options) {
  function inSearchFields (line 318) | function inSearchFields(field, options) {
  function showTip (line 324) | function showTip(tip, $input, $dropdownMenu, options) {
  function showDropMenu (line 333) | function showDropMenu($input, options) {
  function hideDropMenu (line 344) | function hideDropMenu($input, options) {
  function refreshDropMenu (line 356) | function refreshDropMenu($input, data, options) {
  function ajax (line 495) | function ajax(options, keyword) {
  function isInWord (line 565) | function isInWord(keyword, key, value, options) {
  function getData (line 583) | function getData(keyword, $input, callback, options) {
  function processData (line 659) | function processData(data) {
  function getIClear (line 665) | function getIClear($input, options) {

FILE: ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js
  function __webpack_require__ (line 28) | function __webpack_require__(moduleId) {
  function _typeof (line 124) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...
  function _classCallCheck (line 126) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _defineProperties (line 128) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
  function _createClass (line 130) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
  function Renderer (line 135) | function Renderer(markup, children, options, callback) {
  function validFontName (line 408) | function validFontName(fontName) {
  function env_isFontInstalled (line 412) | function env_isFontInstalled(fontName) {
  function eq (line 487) | function eq(itemA) {
  function eq2 (line 493) | function eq2(itemA, itemB) {
  function peq2 (line 497) | function peq2(propName) {
  function ok (line 503) | function ok() {
  function fail (line 507) | function fail() {
  function not (line 511) | function not(f) {
  function and (line 517) | function and(fA, fB) {
  function func_self (line 523) | function func_self(a) {
  function func_invoke (line 527) | function func_invoke(obj, method) {
  function resetUniqueId (line 539) | function resetUniqueId() {
  function uniqueId (line 549) | function uniqueId(prefix) {
  function rect2bnd (line 568) | function rect2bnd(rect) {
  function invertObject (line 584) | function invertObject(obj) {
  function namespaceToCamel (line 602) | function namespaceToCamel(namespace, prefix) {
  function debounce (line 620) | function debounce(func, wait, immediate) {
  function isValidUrl (line 650) | function isValidUrl(url) {
  function lists_head (line 681) | function lists_head(array) {
  function lists_last (line 691) | function lists_last(array) {
  function initial (line 701) | function initial(array) {
  function tail (line 711) | function tail(array) {
  function find (line 719) | function find(array, pred) {
  function lists_all (line 733) | function lists_all(array, pred) {
  function contains (line 747) | function contains(array, item) {
  function sum (line 767) | function sum(array, fn) {
  function from (line 779) | function from(collection) {
  function lists_isEmpty (line 795) | function lists_isEmpty(array) {
  function clusterBy (line 807) | function clusterBy(array, fn) {
  function compact (line 833) | function compact(array) {
  function unique (line 851) | function unique(array) {
  function lists_next (line 868) | function lists_next(array, item) {
  function prev (line 882) | function prev(array, item) {
  function isEditable (line 933) | function isEditable(node) {
  function isControlSizing (line 946) | function isControlSizing(node) {
  function makePredByNodeName (line 959) | function makePredByNodeName(nodeName) {
  function isText (line 975) | function isText(node) {
  function isElement (line 988) | function isElement(node) {
  function isVoid (line 997) | function isVoid(node) {
  function isPara (line 1001) | function isPara(node) {
  function isHeading (line 1010) | function isHeading(node) {
  function isPurePara (line 1017) | function isPurePara(node) {
  function dom_isInline (line 1024) | function dom_isInline(node) {
  function isList (line 1028) | function isList(node) {
  function dom_isCell (line 1034) | function dom_isCell(node) {
  function isBodyContainer (line 1040) | function isBodyContainer(node) {
  function isParaInline (line 1046) | function isParaInline(node) {
  function isBodyInline (line 1050) | function isBodyInline(node) {
  function isClosestSibling (line 1063) | function isClosestSibling(nodeA, nodeB) {
  function withClosestSiblings (line 1075) | function withClosestSiblings(node, pred) {
  function nodeLength (line 1107) | function nodeLength(node) {
  function deepestChildIsEmpty (line 1126) | function deepestChildIsEmpty(node) {
  function dom_isEmpty (line 1141) | function dom_isEmpty(node) {
  function paddingBlankHTML (line 1161) | function paddingBlankHTML(node) {
  function dom_ancestor (line 1174) | function dom_ancestor(node, pred) {
  function singleChildAncestor (line 1197) | function singleChildAncestor(node, pred) {
  function listAncestor (line 1226) | function listAncestor(node, pred) {
  function lastAncestor (line 1243) | function lastAncestor(node, pred) {
  function dom_commonAncestor (line 1255) | function dom_commonAncestor(nodeA, nodeB) {
  function listPrev (line 1272) | function listPrev(node, pred) {
  function listNext (line 1295) | function listNext(node, pred) {
  function listDescendant (line 1318) | function listDescendant(node, pred) {
  function wrap (line 1343) | function wrap(node, wrapperName) {
  function insertAfter (line 1358) | function insertAfter(node, preceding) {
  function appendChildNodes (line 1378) | function appendChildNodes(node, aChild) {
  function isLeftEdgePoint (line 1392) | function isLeftEdgePoint(point) {
  function isRightEdgePoint (line 1403) | function isRightEdgePoint(point) {
  function isEdgePoint (line 1414) | function isEdgePoint(point) {
  function dom_isLeftEdgeOf (line 1426) | function dom_isLeftEdgeOf(node, ancestor) {
  function isRightEdgeOf (line 1446) | function isRightEdgeOf(node, ancestor) {
  function isLeftEdgePointOf (line 1469) | function isLeftEdgePointOf(point, ancestor) {
  function isRightEdgePointOf (line 1480) | function isRightEdgePointOf(point, ancestor) {
  function dom_position (line 1490) | function dom_position(node) {
  function hasChildren (line 1500) | function hasChildren(node) {
  function dom_prevPoint (line 1512) | function dom_prevPoint(point, isSkipInnerOffset) {
  function dom_nextPoint (line 1545) | function dom_nextPoint(point, isSkipInnerOffset) {
  function nextPointWithEmptyNode (line 1584) | function nextPointWithEmptyNode(point, isSkipInnerOffset) {
  function getNextTextNode (line 1642) | function getNextTextNode(actual) {
  function isSamePoint (line 1657) | function isSamePoint(pointA, pointB) {
  function isVisiblePoint (line 1668) | function isVisiblePoint(point) {
  function prevPointUntil (line 1691) | function prevPointUntil(point, pred) {
  function nextPointUntil (line 1711) | function nextPointUntil(point, pred) {
  function isCharPoint (line 1730) | function isCharPoint(point) {
  function isSpacePoint (line 1746) | function isSpacePoint(point) {
  function walkPoint (line 1764) | function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {
  function makeOffsetPath (line 1788) | function makeOffsetPath(ancestor, node) {
  function fromOffsetPath (line 1802) | function fromOffsetPath(ancestor, offsets) {
  function splitNode (line 1829) | function splitNode(point, options) {
  function splitTree (line 1888) | function splitTree(root, point, options) {
  function splitPoint (line 1918) | function splitPoint(point, isInline) {
  function dom_create (line 1951) | function dom_create(nodeName) {
  function createText (line 1955) | function createText(text) {
  function remove (line 1968) | function remove(node, isRemoveChild) {
  function removeWhile (line 2001) | function removeWhile(node, pred) {
  function dom_replace (line 2023) | function dom_replace(node, nodeName) {
  function dom_value (line 2046) | function dom_value($node, stripLinebreaks) {
  function dom_html (line 2065) | function dom_html($node, isNewlineOnBlock) {
  function posFromPlaceholder (line 2082) | function posFromPlaceholder(placeholder) {
  function attachEvents (line 2093) | function attachEvents($node, events) {
  function detachEvents (line 2099) | function detachEvents($node, events) {
  function isCustomStyleTag (line 2114) | function isCustomStyleTag(node) {
  function _classCallCheck (line 2215) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function _defineProperties (line 2217) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
  function _createClass (line 2219) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
  function Context (line 2231) | function Context($note, options) {
  function range_classCallCheck (line 2549) | function range_classCallCheck(instance, Constructor) { if (!(instance in...
  function range_defineProperties (line 2551) | function range_defineProperties(target, props) { for (var i = 0; i < pro...
  function range_createClass (line 2553) | function range_createClass(Constructor, protoProps, staticProps) { if (p...
  function textRangeToPoint (line 2570) | function textRangeToPoint(textRange, isStart) {
  function pointToTextRange (line 2630) | function pointToTextRange(point) {
  function WrappedRange (line 2677) | function WrappedRange(sc, so, ec, eo) {
  function readFileAsDataURL (line 3605) | function readFileAsDataURL(file) {
  function createImage (line 3627) | function createImage(url) {
  function History_classCallCheck (line 3642) | function History_classCallCheck(instance, Constructor) { if (!(instance ...
  function History_defineProperties (line 3644) | function History_defineProperties(target, props) { for (var i = 0; i < p...
  function History_createClass (line 3646) | function History_createClass(Constructor, protoProps, staticProps) { if ...
  function History (line 3651) | function History(context) {
  function Style_classCallCheck (line 3799) | function Style_classCallCheck(instance, Constructor) { if (!(instance in...
  function Style_defineProperties (line 3801) | function Style_defineProperties(target, props) { for (var i = 0; i < pro...
  function Style_createClass (line 3803) | function Style_createClass(Constructor, protoProps, staticProps) { if (p...
  function Style (line 3812) | function Style() {
  function Bullet_classCallCheck (line 3986) | function Bullet_classCallCheck(instance, Constructor) { if (!(instance i...
  function Bullet_defineProperties (line 3988) | function Bullet_defineProperties(target, props) { for (var i = 0; i < pr...
  function Bullet_createClass (line 3990) | function Bullet_createClass(Constructor, protoProps, staticProps) { if (...
  function Bullet (line 3999) | function Bullet() {
  function Typing_classCallCheck (line 4307) | function Typing_classCallCheck(instance, Constructor) { if (!(instance i...
  function Typing_defineProperties (line 4309) | function Typing_defineProperties(target, props) { for (var i = 0; i < pr...
  function Typing_createClass (line 4311) | function Typing_createClass(Constructor, protoProps, staticProps) { if (...
  function Typing (line 4325) | function Typing(context) {
  function Table_classCallCheck (line 4441) | function Table_classCallCheck(instance, Constructor) { if (!(instance in...
  function Table_defineProperties (line 4443) | function Table_defineProperties(target, props) { for (var i = 0; i < pro...
  function Table_createClass (line 4445) | function Table_createClass(Constructor, protoProps, staticProps) { if (p...
  function setStartPoint (line 4473) | function setStartPoint() {
  function setVirtualTablePosition (line 4499) | function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell,...
  function getActionCell (line 4522) | function getActionCell(virtualTableCellObj, resultAction, virtualRowPosi...
  function recoverCellIndex (line 4540) | function recoverCellIndex(rowIndex, cellIndex) {
  function addCellInfoToVirtual (line 4567) | function addCellInfoToVirtual(row, cell) {
  function adjustStartPoint (line 4605) | function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {
  function createVirtualTable (line 4615) | function createVirtualTable() {
  function getDeleteResultActionToCell (line 4633) | function getDeleteResultActionToCell(cell) {
  function getAddResultActionToCell (line 4661) | function getAddResultActionToCell(cell) {
  function init (line 4685) | function init() {
  function Table (line 4783) | function Table() {
  function Editor_classCallCheck (line 5139) | function Editor_classCallCheck(instance, Constructor) { if (!(instance i...
  function Editor_defineProperties (line 5141) | function Editor_defineProperties(target, props) { for (var i = 0; i < pr...
  function Editor_createClass (line 5143) | function Editor_createClass(Constructor, protoProps, staticProps) { if (...
  function Editor (line 5164) | function Editor(context) {
  function Clipboard_classCallCheck (line 6272) | function Clipboard_classCallCheck(instance, Constructor) { if (!(instanc...
  function Clipboard_defineProperties (line 6274) | function Clipboard_defineProperties(target, props) { for (var i = 0; i <...
  function Clipboard_createClass (line 6276) | function Clipboard_createClass(Constructor, protoProps, staticProps) { i...
  function Clipboard (line 6281) | function Clipboard(context) {
  function Dropzone_classCallCheck (line 6340) | function Dropzone_classCallCheck(instance, Constructor) { if (!(instance...
  function Dropzone_defineProperties (line 6342) | function Dropzone_defineProperties(target, props) { for (var i = 0; i < ...
  function Dropzone_createClass (line 6344) | function Dropzone_createClass(Constructor, protoProps, staticProps) { if...
  function Dropzone (line 6349) | function Dropzone(context) {
  function _createForOfIteratorHelper (line 6488) | function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefine...
  function _unsupportedIterableToArray (line 6490) | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (ty...
  function _arrayLikeToArray (line 6492) | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.leng...
  function Codeview_classCallCheck (line 6494) | function Codeview_classCallCheck(instance, Constructor) { if (!(instance...
  function Codeview_defineProperties (line 6496) | function Codeview_defineProperties(target, props) { for (var i = 0; i < ...
  function Codeview_createClass (line 6498) | function Codeview_createClass(Constructor, protoProps, staticProps) { if...
  function CodeView (line 6507) | function CodeView(context) {
  function Statusbar_classCallCheck (line 6712) | function Statusbar_classCallCheck(instance, Constructor) { if (!(instanc...
  function Statusbar_defineProperties (line 6714) | function Statusbar_defineProperties(target, props) { for (var i = 0; i <...
  function Statusbar_createClass (line 6716) | function Statusbar_createClass(Constructor, protoProps, staticProps) { i...
  function Statusbar (line 6722) | function Statusbar(context) {
  function Fullscreen_classCallCheck (line 6773) | function Fullscreen_classCallCheck(instance, Constructor) { if (!(instan...
  function Fullscreen_defineProperties (line 6775) | function Fullscreen_defineProperties(target, props) { for (var i = 0; i ...
  function Fullscreen_createClass (line 6777) | function Fullscreen_createClass(Constructor, protoProps, staticProps) { ...
  function Fullscreen (line 6782) | function Fullscreen(context) {
  function Handle_classCallCheck (line 6850) | function Handle_classCallCheck(instance, Constructor) { if (!(instance i...
  function Handle_defineProperties (line 6852) | function Handle_defineProperties(target, props) { for (var i = 0; i < pr...
  function Handle_createClass (line 6854) | function Handle_createClass(Constructor, protoProps, staticProps) { if (...
  function Handle (line 6860) | function Handle(context) {
  function AutoLink_classCallCheck (line 7001) | function AutoLink_classCallCheck(instance, Constructor) { if (!(instance...
  function AutoLink_defineProperties (line 7003) | function AutoLink_defineProperties(target, props) { for (var i = 0; i < ...
  function AutoLink_createClass (line 7005) | function AutoLink_createClass(Constructor, protoProps, staticProps) { if...
  function AutoLink (line 7014) | function AutoLink(context) {
  function AutoSync_classCallCheck (line 7089) | function AutoSync_classCallCheck(instance, Constructor) { if (!(instance...
  function AutoSync_defineProperties (line 7091) | function AutoSync_defineProperties(target, props) { for (var i = 0; i < ...
  function AutoSync_createClass (line 7093) | function AutoSync_createClass(Constructor, protoProps, staticProps) { if...
  function AutoSync (line 7101) | function AutoSync(context) {
  function AutoReplace_classCallCheck (line 7126) | function AutoReplace_classCallCheck(instance, Constructor) { if (!(insta...
  function AutoReplace_defineProperties (line 7128) | function AutoReplace_defineProperties(target, props) { for (var i = 0; i...
  function AutoReplace_createClass (line 7130) | function AutoReplace_createClass(Constructor, protoProps, staticProps) {...
  function AutoReplace (line 7137) | function AutoReplace(context) {
  function Placeholder_classCallCheck (line 7232) | function Placeholder_classCallCheck(instance, Constructor) { if (!(insta...
  function Placeholder_defineProperties (line 7234) | function Placeholder_defineProperties(target, props) { for (var i = 0; i...
  function Placeholder_createClass (line 7236) | function Placeholder_createClass(Constructor, protoProps, staticProps) {...
  function Placeholder (line 7241) | function Placeholder(context) {
  function Buttons_classCallCheck (line 7299) | function Buttons_classCallCheck(instance, Constructor) { if (!(instance ...
  function Buttons_defineProperties (line 7301) | function Buttons_defineProperties(target, props) { for (var i = 0; i < p...
  function Buttons_createClass (line 7303) | function Buttons_createClass(Constructor, protoProps, staticProps) { if ...
  function Buttons (line 7311) | function Buttons(context) {
  function Toolbar_classCallCheck (line 8171) | function Toolbar_classCallCheck(instance, Constructor) { if (!(instance ...
  function Toolbar_defineProperties (line 8173) | function Toolbar_defineProperties(target, props) { for (var i = 0; i < p...
  function Toolbar_createClass (line 8175) | function Toolbar_createClass(Constructor, protoProps, staticProps) { if ...
  function Toolbar (line 8180) | function Toolbar(context) {
  function LinkDialog_classCallCheck (line 8347) | function LinkDialog_classCallCheck(instance, Constructor) { if (!(instan...
  function LinkDialog_defineProperties (line 8349) | function LinkDialog_defineProperties(target, props) { for (var i = 0; i ...
  function LinkDialog_createClass (line 8351) | function LinkDialog_createClass(Constructor, protoProps, staticProps) { ...
  function LinkDialog (line 8359) | function LinkDialog(context) {
  function LinkPopover_classCallCheck (line 8535) | function LinkPopover_classCallCheck(instance, Constructor) { if (!(insta...
  function LinkPopover_defineProperties (line 8537) | function LinkPopover_defineProperties(target, props) { for (var i = 0; i...
  function LinkPopover_createClass (line 8539) | function LinkPopover_createClass(Constructor, protoProps, staticProps) {...
  function LinkPopover (line 8546) | function LinkPopover(context) {
  function ImageDialog_classCallCheck (line 8630) | function ImageDialog_classCallCheck(instance, Constructor) { if (!(insta...
  function ImageDialog_defineProperties (line 8632) | function ImageDialog_defineProperties(target, props) { for (var i = 0; i...
  function ImageDialog_createClass (line 8634) | function ImageDialog_createClass(Constructor, protoProps, staticProps) {...
  function ImageDialog (line 8641) | function ImageDialog(context) {
  function ImagePopover_classCallCheck (line 8780) | function ImagePopover_classCallCheck(instance, Constructor) { if (!(inst...
  function ImagePopover_defineProperties (line 8782) | function ImagePopover_defineProperties(target, props) { for (var i = 0; ...
  function ImagePopover_createClass (line 8784) | function ImagePopover_createClass(Constructor, protoProps, staticProps) ...
  function ImagePopover (line 8796) | function ImagePopover(context) {
  function TablePopover_classCallCheck (line 8872) | function TablePopover_classCallCheck(instance, Constructor) { if (!(inst...
  function TablePopover_defineProperties (line 8874) | function TablePopover_defineProperties(target, props) { for (var i = 0; ...
  function TablePopover_createClass (line 8876) | function TablePopover_createClass(Constructor, protoProps, staticProps) ...
  function TablePopover (line 8884) | function TablePopover(context) {
  function VideoDialog_classCallCheck (line 8969) | function VideoDialog_classCallCheck(instance, Constructor) { if (!(insta...
  function VideoDialog_defineProperties (line 8971) | function VideoDialog_defineProperties(target, props) { for (var i = 0; i...
  function VideoDialog_createClass (line 8973) | function VideoDialog_createClass(Constructor, protoProps, staticProps) {...
  function VideoDialog (line 8980) | function VideoDialog(context) {
  function HelpDialog_classCallCheck (line 9173) | function HelpDialog_classCallCheck(instance, Constructor) { if (!(instan...
  function HelpDialog_defineProperties (line 9175) | function HelpDialog_defineProperties(target, props) { for (var i = 0; i ...
  function HelpDialog_createClass (line 9177) | function HelpDialog_createClass(Constructor, protoProps, staticProps) { ...
  function HelpDialog (line 9183) | function HelpDialog(context) {
  function AirPopover_classCallCheck (line 9272) | function AirPopover_classCallCheck(instance, Constructor) { if (!(instan...
  function AirPopover_defineProperties (line 9274) | function AirPopover_defineProperties(target, props) { for (var i = 0; i ...
  function AirPopover_createClass (line 9276) | function AirPopover_createClass(Constructor, protoProps, staticProps) { ...
  function AirPopover (line 9284) | function AirPopover(context) {
  function HintPopover_classCallCheck (line 9406) | function HintPopover_classCallCheck(instance, Constructor) { if (!(insta...
  function HintPopover_defineProperties (line 9408) | function HintPopover_defineProperties(target, props) { for (var i = 0; i...
  function HintPopover_createClass (line 9410) | function HintPopover_createClass(Constructor, protoProps, staticProps) {...
  function HintPopover (line 9421) | function HintPopover(context) {
  function _typeof (line 10022) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...

FILE: ruoyi-admin/src/main/resources/static/js/cron.js
  function change_sec_assign (line 384) | function change_sec_assign() {
  function change_sec_circle (line 398) | function change_sec_circle() {
  function change_sec_per (line 434) | function change_sec_per() {
  function change_min_assign (line 460) | function change_min_assign() {
  function change_min_circle (line 474) | function change_min_circle() {
  function change_min_per (line 510) | function change_min_per() {
  function change_hour_assign (line 537) | function change_hour_assign() {
  function change_hour_circle (line 551) | function change_hour_circle() {
  function change_hour_per (line 587) | function change_hour_per() {
  function change_day_assign (line 614) | function change_day_assign() {
  function change_day_circle (line 628) | function change_day_circle() {
  function change_day_per (line 664) | function change_day_per() {
  function change_day_work (line 691) | function change_day_work() {
  function change_month_assign (line 709) | function change_month_assign() {
  function change_month_circle (line 723) | function change_month_circle() {
  function change_month_per (line 759) | function change_month_per() {
  function change_week_assign (line 786) | function change_week_assign() {
  function change_week_circle (line 800) | function change_week_circle() {
  function change_week_last (line 836) | function change_week_last() {
  function change_week_num (line 854) | function change_week_num() {
  function change_year_circle (line 881) | function change_year_circle() {
  function gen_cron (line 917) | function gen_cron() {

FILE: ruoyi-admin/src/main/resources/static/js/jquery.tmpl.js
  function newTmplItem (line 22) | function newTmplItem( options, parentItem, fn, data ) {
  function build (line 281) | function build( tmplItem, nested, content ) {
  function unencode (line 316) | function unencode( text ) {
  function buildTmplFn (line 324) | function buildTmplFn( markup ) {
  function updateWrapped (line 370) | function updateWrapped( options, wrapped ) {
  function unescape (line 378) | function unescape( args ) {
  function outerHtml (line 381) | function outerHtml( elem ) {
  function storeTmplItems (line 388) | function storeTmplItems( content ) {
  function tiCalls (line 456) | function tiCalls( content, tmpl, data, options ) {
  function tiNest (line 463) | function tiNest( tmpl, data, options ) {
  function tiWrap (line 468) | function tiWrap( call, wrapped ) {
  function tiHtml (line 476) | function tiHtml( filter, textOnly ) {
  function tiUpdate (line 487) | function tiUpdate() {

FILE: ruoyi-admin/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js
  function b (line 10) | function b(){var a=document.createElement("mm"),b={WebkitTransition:"web...
  function c (line 10) | function c(b){return this.each(function(){var c=a(this),d=c.data("mm"),f...

FILE: ruoyi-admin/src/main/resources/static/ruoyi/index.js
  function openToCurrentTab (line 70) | function openToCurrentTab(obj) {
  function syncMenuTab (line 82) | function syncMenuTab(dataId) {
  function NavToggle (line 106) | function NavToggle() {
  function fixedSidebar (line 110) | function fixedSidebar() {
  function setIframeUrl (line 119) | function setIframeUrl(href) {
  function SmoothlyMenu (line 129) | function SmoothlyMenu() {
  function calSumWidth (line 151) | function calSumWidth(elements) {
  function setActiveTab (line 160) | function setActiveTab(element) {
  function scrollToTab (line 176) | function scrollToTab(element) {
  function scrollTabLeft (line 203) | function scrollTabLeft() {
  function scrollTabRight (line 233) | function scrollTabRight() {
  function menuItem (line 269) | function menuItem() {
  function menuBlank (line 338) | function menuBlank() {
  function closeTab (line 350) | function closeTab() {
  function showActiveTab (line 441) | function showActiveTab() {
  function activeTab (line 447) | function activeTab() {
  function refreshTab (line 472) | function refreshTab() {
  function fullScreenTab (line 480) | function fullScreenTab() {
  function tabCloseCurrent (line 487) | function tabCloseCurrent() {
  function tabCloseOther (line 492) | function tabCloseOther() {
  function tabCloseAll (line 501) | function tabCloseAll() {
  function activeTabMax (line 566) | function activeTabMax() {

FILE: ruoyi-admin/src/main/resources/static/ruoyi/js/common.js
  function createMenuItem (line 250) | function createMenuItem(dataUrl, menuName, isRefresh) {
  function refreshTab (line 305) | function refreshTab() {
  function scrollToTab (line 314) | function scrollToTab(element) {
  function calSumWidth (line 342) | function calSumWidth(elements) {
  function activeWindow (line 351) | function activeWindow() {
  function openToCurrentTab (line 360) | function openToCurrentTab(obj) {
  function checkpwd (line 369) | function checkpwd(chrtype, password) {
  function beginOfTime (line 395) | function beginOfTime(date) {
  function endOfTime (line 402) | function endOfTime(date) {
  function resetDate (line 409) | function resetDate() {
  function loadCss (line 518) | function loadCss(file, headElem) {
  function loadJs (line 528) | function loadJs(file, headElem) {
  function _stopIt (line 564) | function _stopIt(e) {

FILE: ruoyi-admin/src/main/resources/static/ruoyi/login.js
  function login (line 11) | function login() {
  function validateRule (line 45) | function validateRule() {
  function validateKickout (line 70) | function validateKickout() {
  function getParam (line 93) | function getParam(paramName) {

FILE: ruoyi-admin/src/main/resources/static/ruoyi/register.js
  function register (line 10) | function register() {
  function validateRule (line 50) | function validateRule() {

FILE: ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
  type Type (line 167) | public enum Type
    method Type (line 172) | Type(int value)
    method value (line 177) | public int value()
  type ColumnType (line 183) | public enum ColumnType
    method ColumnType (line 188) | ColumnType(int value)
    method value (line 193) | public int value()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
  class RuoYiConfig (line 11) | @Component
    method getName (line 33) | public static String getName()
    method setName (line 38) | public void setName(String name)
    method getVersion (line 43) | public static String getVersion()
    method setVersion (line 48) | public void setVersion(String version)
    method getCopyrightYear (line 53) | public static String getCopyrightYear()
    method setCopyrightYear (line 58) | public void setCopyrightYear(String copyrightYear)
    method isDemoEnabled (line 63) | public static boolean isDemoEnabled()
    method setDemoEnabled (line 68) | public void setDemoEnabled(boolean demoEnabled)
    method getProfile (line 73) | public static String getProfile()
    method setProfile (line 78) | public void setProfile(String profile)
    method isAddressEnabled (line 83) | public static boolean isAddressEnabled()
    method setAddressEnabled (line 88) | public void setAddressEnabled(boolean addressEnabled)
    method getImportPath (line 96) | public static String getImportPath()
    method getAvatarPath (line 104) | public static String getAvatarPath()
    method getDownloadPath (line 112) | public static String getDownloadPath()
    method getUploadPath (line 120) | public static String getUploadPath()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/config/ServerConfig.java
  class ServerConfig (line 13) | @Component
    method getUrl (line 21) | public String getUrl()
    method getDomain (line 27) | public static String getDomain(HttpServletRequest request)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/config/datasource/DynamicDataSourceContextHolder.java
  class DynamicDataSourceContextHolder (line 11) | public class DynamicDataSourceContextHolder
    method setDataSourceType (line 24) | public static void setDataSourceType(String dsType)
    method getDataSourceType (line 33) | public static String getDataSourceType()
    method clearDataSourceType (line 41) | public static void clearDataSourceType()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/config/serializer/SensitiveJsonSerializer.java
  class SensitiveJsonSerializer (line 21) | public class SensitiveJsonSerializer extends JsonSerializer<String> impl...
    method serialize (line 25) | @Override
    method createContextual (line 38) | @Override
    method desensitization (line 54) | private boolean desensitization()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/config/thread/ThreadPoolConfig.java
  class ThreadPoolConfig (line 17) | @Configuration
    method threadPoolTaskExecutor (line 32) | @Bean(name = "threadPoolTaskExecutor")
    method scheduledExecutorService (line 48) | @Bean(name = "scheduledExecutorService")

FILE: ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
  class Constants (line 10) | public class Constants
    class Dept (line 126) | public static class Dept

FILE: ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
  class GenConstants (line 8) | public class GenConstants

FILE: ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
  class PermissionConstants (line 8) | public class PermissionConstants

FILE: ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
  class ScheduleConstants (line 8) | public class ScheduleConstants
    type Status (line 27) | public enum Status
      method Status (line 40) | private Status(String value)
      method getValue (line 45) | public String getValue()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/constant/ShiroConstants.java
  class ShiroConstants (line 8) | public class ShiroConstants

FILE: ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
  class UserConstants (line 8) | public class UserConstants

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/context/PermissionContextHolder.java
  class PermissionContextHolder (line 12) | public class PermissionContextHolder
    method setContext (line 16) | public static void setContext(String permission)
    method getContext (line 22) | public static String getContext()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
  class BaseController (line 33) | public class BaseController
    method initBinder (line 40) | @InitBinder
    method startPage (line 57) | protected void startPage()
    method startOrderBy (line 65) | protected void startOrderBy()
    method clearPage (line 78) | protected void clearPage()
    method getRequest (line 86) | public HttpServletRequest getRequest()
    method getResponse (line 94) | public HttpServletResponse getResponse()
    method getSession (line 102) | public HttpSession getSession()
    method getDataTable (line 110) | @SuppressWarnings({ "rawtypes", "unchecked" })
    method toAjax (line 126) | protected AjaxResult toAjax(int rows)
    method toAjax (line 137) | protected AjaxResult toAjax(boolean result)
    method success (line 145) | public AjaxResult success()
    method error (line 153) | public AjaxResult error()
    method success (line 161) | public AjaxResult success(String message)
    method success (line 169) | public static AjaxResult success(Object data)
    method error (line 177) | public AjaxResult error(String message)
    method error (line 185) | public AjaxResult error(Type type, String message)
    method redirect (line 193) | public String redirect(String url)
    method getSysUser (line 201) | public SysUser getSysUser()
    method setSysUser (line 209) | public void setSysUser(SysUser user)
    method getUserId (line 217) | public Long getUserId()
    method getLoginName (line 225) | public String getLoginName()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
  class AjaxResult (line 12) | public class AjaxResult extends HashMap<String, Object>
    type Type (line 28) | public enum Type
      method Type (line 38) | Type(int value)
      method value (line 43) | public int value()
    method AjaxResult (line 52) | public AjaxResult()
    method AjaxResult (line 62) | public AjaxResult(Type type, String msg)
    method AjaxResult (line 75) | public AjaxResult(Type type, String msg, Object data)
    method success (line 90) | public static AjaxResult success()
    method success (line 100) | public static AjaxResult success(Object data)
    method success (line 111) | public static AjaxResult success(String msg)
    method success (line 123) | public static AjaxResult success(String msg, Object data)
    method warn (line 134) | public static AjaxResult warn(String msg)
    method warn (line 146) | public static AjaxResult warn(String msg, Object data)
    method error (line 156) | public static AjaxResult error()
    method error (line 167) | public static AjaxResult error(String msg)
    method error (line 179) | public static AjaxResult error(String msg, Object data)
    method isSuccess (line 189) | public boolean isSuccess()
    method isWarn (line 199) | public boolean isWarn()
    method isError (line 209) | public boolean isError()
    method put (line 221) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
  class BaseEntity (line 16) | public class BaseEntity implements Serializable
    method getSearchValue (line 45) | public String getSearchValue()
    method setSearchValue (line 50) | public void setSearchValue(String searchValue)
    method getCreateBy (line 55) | public String getCreateBy()
    method setCreateBy (line 60) | public void setCreateBy(String createBy)
    method getCreateTime (line 65) | public Date getCreateTime()
    method setCreateTime (line 70) | public void setCreateTime(Date createTime)
    method getUpdateBy (line 75) | public String getUpdateBy()
    method setUpdateBy (line 80) | public void setUpdateBy(String updateBy)
    method getUpdateTime (line 85) | public Date getUpdateTime()
    method setUpdateTime (line 90) | public void setUpdateTime(Date updateTime)
    method getRemark (line 95) | public String getRemark()
    method setRemark (line 100) | public void setRemark(String remark)
    method getParams (line 105) | public Map<String, Object> getParams()
    method setParams (line 114) | public void setParams(Map<String, Object> params)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/CxSelect.java
  class CxSelect (line 11) | public class CxSelect implements Serializable
    method CxSelect (line 30) | public CxSelect()
    method CxSelect (line 34) | public CxSelect(String v, String n)
    method getS (line 40) | public List<CxSelect> getS()
    method setN (line 45) | public void setN(String n)
    method getN (line 50) | public String getN()
    method setS (line 55) | public void setS(List<CxSelect> s)
    method getV (line 60) | public String getV()
    method setV (line 65) | public void setV(String v)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java
  class R (line 10) | public class R<T> implements Serializable
    method ok (line 26) | public static <T> R<T> ok()
    method ok (line 31) | public static <T> R<T> ok(T data)
    method ok (line 36) | public static <T> R<T> ok(T data, String msg)
    method fail (line 41) | public static <T> R<T> fail()
    method fail (line 46) | public static <T> R<T> fail(String msg)
    method fail (line 51) | public static <T> R<T> fail(T data)
    method fail (line 56) | public static <T> R<T> fail(T data, String msg)
    method fail (line 61) | public static <T> R<T> fail(int code, String msg)
    method restResult (line 66) | private static <T> R<T> restResult(T data, int code, String msg)
    method getCode (line 75) | public int getCode()
    method setCode (line 80) | public void setCode(int code)
    method getMsg (line 85) | public String getMsg()
    method setMsg (line 90) | public void setMsg(String msg)
    method getData (line 95) | public T getData()
    method setData (line 100) | public void setData(T data)
    method isError (line 105) | public static <T> Boolean isError(R<T> ret)
    method isSuccess (line 110) | public static <T> Boolean isSuccess(R<T> ret)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
  class TreeEntity (line 8) | public class TreeEntity extends BaseEntity
    method getParentName (line 24) | public String getParentName()
    method setParentName (line 29) | public void setParentName(String parentName)
    method getParentId (line 34) | public Long getParentId()
    method setParentId (line 39) | public void setParentId(Long parentId)
    method getOrderNum (line 44) | public Integer getOrderNum()
    method setOrderNum (line 49) | public void setOrderNum(Integer orderNum)
    method getAncestors (line 54) | public String getAncestors()
    method setAncestors (line 59) | public void setAncestors(String ancestors)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/Ztree.java
  class Ztree (line 10) | public class Ztree implements Serializable
    method getId (line 35) | public Long getId()
    method setId (line 40) | public void setId(Long id)
    method getpId (line 45) | public Long getpId()
    method setpId (line 50) | public void setpId(Long pId)
    method getName (line 55) | public String getName()
    method setName (line 60) | public void setName(String name)
    method getTitle (line 65) | public String getTitle()
    method setTitle (line 70) | public void setTitle(String title)
    method isChecked (line 75) | public boolean isChecked()
    method setChecked (line 80) | public void setChecked(boolean checked)
    method isOpen (line 85) | public boolean isOpen()
    method setOpen (line 90) | public void setOpen(boolean open)
    method isNocheck (line 95) | public boolean isNocheck()
    method setNocheck (line 100) | public void setNocheck(boolean nocheck)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
  class SysDept (line 17) | public class SysDept extends BaseEntity
    method getDeptId (line 57) | public Long getDeptId()
    method setDeptId (line 62) | public void setDeptId(Long deptId)
    method getParentId (line 67) | public Long getParentId()
    method setParentId (line 72) | public void setParentId(Long parentId)
    method getAncestors (line 77) | public String getAncestors()
    method setAncestors (line 82) | public void setAncestors(String ancestors)
    method getDeptName (line 87) | @NotBlank(message = "部门名称不能为空")
    method setDeptName (line 94) | public void setDeptName(String deptName)
    method getOrderNum (line 99) | @NotNull(message = "显示顺序不能为空")
    method setOrderNum (line 105) | public void setOrderNum(Integer orderNum)
    method getLeader (line 110) | public String getLeader()
    method setLeader (line 115) | public void setLeader(String leader)
    method getPhone (line 120) | @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
    method setPhone (line 126) | public void setPhone(String phone)
    method getEmail (line 131) | @Email(message = "邮箱格式不正确")
    method setEmail (line 138) | public void setEmail(String email)
    method getStatus (line 143) | public String getStatus()
    method setStatus (line 148) | public void setStatus(String status)
    method getDelFlag (line 153) | public String getDelFlag()
    method setDelFlag (line 158) | public void setDelFlag(String delFlag)
    method getParentName (line 163) | public String getParentName()
    method setParentName (line 168) | public void setParentName(String parentName)
    method getExcludeId (line 173) | @JsonIgnore
    method setExcludeId (line 179) | public void setExcludeId(Long excludeId)
    method toString (line 184) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
  class SysDictData (line 16) | public class SysDictData extends BaseEntity
    method getDictCode (line 55) | public Long getDictCode()
    method setDictCode (line 60) | public void setDictCode(Long dictCode)
    method getDictSort (line 65) | public Long getDictSort()
    method setDictSort (line 70) | public void setDictSort(Long dictSort)
    method getDictLabel (line 75) | @NotBlank(message = "字典标签不能为空")
    method setDictLabel (line 82) | public void setDictLabel(String dictLabel)
    method getDictValue (line 87) | @NotBlank(message = "字典键值不能为空")
    method setDictValue (line 94) | public void setDictValue(String dictValue)
    method getDictType (line 99) | @NotBlank(message = "字典类型不能为空")
    method setDictType (line 106) | public void setDictType(String dictType)
    method getCssClass (line 111) | @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
    method setCssClass (line 117) | public void setCssClass(String cssClass)
    method getListClass (line 122) | public String getListClass()
    method setListClass (line 127) | public void setListClass(String listClass)
    method getDefault (line 132) | public boolean getDefault()
    method getIsDefault (line 137) | public String getIsDefault()
    method setIsDefault (line 142) | public void setIsDefault(String isDefault)
    method getStatus (line 147) | public String getStatus()
    method setStatus (line 152) | public void setStatus(String status)
    method toString (line 157) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
  class SysDictType (line 15) | public class SysDictType extends BaseEntity
    method getDictId (line 35) | public Long getDictId()
    method setDictId (line 40) | public void setDictId(Long dictId)
    method getDictName (line 45) | @NotBlank(message = "字典名称不能为空")
    method setDictName (line 52) | public void setDictName(String dictName)
    method getDictType (line 57) | @NotBlank(message = "字典类型不能为空")
    method setDictType (line 65) | public void setDictType(String dictType)
    method getStatus (line 70) | public String getStatus()
    method setStatus (line 75) | public void setStatus(String status)
    method toString (line 80) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
  class SysMenu (line 15) | public class SysMenu extends BaseEntity
    method getMenuId (line 58) | public Long getMenuId()
    method setMenuId (line 63) | public void setMenuId(Long menuId)
    method getMenuName (line 68) | @NotBlank(message = "菜单名称不能为空")
    method setMenuName (line 75) | public void setMenuName(String menuName)
    method getParentName (line 80) | public String getParentName()
    method setParentName (line 85) | public void setParentName(String parentName)
    method getParentId (line 90) | public Long getParentId()
    method setParentId (line 95) | public void setParentId(Long parentId)
    method getOrderNum (line 100) | @NotBlank(message = "显示顺序不能为空")
    method setOrderNum (line 106) | public void setOrderNum(String orderNum)
    method getUrl (line 111) | @Size(min = 0, max = 200, message = "请求地址不能超过200个字符")
    method setUrl (line 117) | public void setUrl(String url)
    method getTarget (line 122) | public String getTarget()
    method setTarget (line 127) | public void setTarget(String target)
    method getMenuType (line 132) | @NotBlank(message = "菜单类型不能为空")
    method setMenuType (line 138) | public void setMenuType(String menuType)
    method getVisible (line 143) | public String getVisible()
    method setVisible (line 148) | public void setVisible(String visible)
    method getIsRefresh (line 153) | public String getIsRefresh()
    method setIsRefresh (line 158) | public void setIsRefresh(String isRefresh)
    method getPerms (line 163) | @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
    method setPerms (line 169) | public void setPerms(String perms)
    method getIcon (line 174) | public String getIcon()
    method setIcon (line 179) | public void setIcon(String icon)
    method getChildren (line 184) | public List<SysMenu> getChildren()
    method setChildren (line 189) | public void setChildren(List<SysMenu> children)
    method toString (line 194) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
  class SysRole (line 16) | public class SysRole extends BaseEntity
    method SysRole (line 59) | public SysRole()
    method SysRole (line 64) | public SysRole(Long roleId)
    method getRoleId (line 69) | public Long getRoleId()
    method setRoleId (line 74) | public void setRoleId(Long roleId)
    method isAdmin (line 79) | public boolean isAdmin()
    method isAdmin (line 84) | public static boolean isAdmin(Long roleId)
    method getDataScope (line 89) | public String getDataScope()
    method setDataScope (line 94) | public void setDataScope(String dataScope)
    method getRoleName (line 99) | @NotBlank(message = "角色名称不能为空")
    method setRoleName (line 106) | public void setRoleName(String roleName)
    method getRoleKey (line 111) | @NotBlank(message = "权限字符不能为空")
    method setRoleKey (line 118) | public void setRoleKey(String roleKey)
    method getRoleSort (line 123) | @NotBlank(message = "显示顺序不能为空")
    method setRoleSort (line 129) | public void setRoleSort(String roleSort)
    method getStatus (line 134) | public String getStatus()
    method getDelFlag (line 139) | public String getDelFlag()
    method setDelFlag (line 144) | public void setDelFlag(String delFlag)
    method setStatus (line 149) | public void setStatus(String status)
    method isFlag (line 154) | public boolean isFlag()
    method setFlag (line 159) | public void setFlag(boolean flag)
    method getMenuIds (line 164) | public Long[] getMenuIds()
    method setMenuIds (line 169) | public void setMenuIds(Long[] menuIds)
    method getDeptIds (line 174) | public Long[] getDeptIds()
    method setDeptIds (line 179) | public void setDeptIds(Long[] deptIds)
    method getPermissions (line 184) | public Set<String> getPermissions()
    method setPermissions (line 189) | public void setPermissions(Set<String> permissions)
    method toString (line 194) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  class SysUser (line 22) | public class SysUser extends BaseEntity
    method SysUser (line 105) | public SysUser()
    method SysUser (line 110) | public SysUser(Long userId)
    method getUserId (line 115) | public Long getUserId()
    method setUserId (line 120) | public void setUserId(Long userId)
    method isAdmin (line 125) | public boolean isAdmin()
    method getDeptId (line 130) | public Long getDeptId()
    method setDeptId (line 135) | public void setDeptId(Long deptId)
    method getParentId (line 140) | public Long getParentId()
    method setParentId (line 145) | public void setParentId(Long parentId)
    method getRoleId (line 150) | public Long getRoleId()
    method setRoleId (line 155) | public void setRoleId(Long roleId)
    method getLoginName (line 160) | @Xss(message = "登录账号不能包含脚本字符")
    method setLoginName (line 168) | public void setLoginName(String loginName)
    method getUserName (line 173) | @Xss(message = "用户昵称不能包含脚本字符")
    method setUserName (line 180) | public void setUserName(String userName)
    method getUserType (line 185) | public String getUserType()
    method setUserType (line 190) | public void setUserType(String userType)
    method getEmail (line 195) | @Email(message = "邮箱格式不正确")
    method setEmail (line 202) | public void setEmail(String email)
    method getPhonenumber (line 207) | @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
    method setPhonenumber (line 213) | public void setPhonenumber(String phonenumber)
    method getSex (line 218) | public String getSex()
    method setSex (line 223) | public void setSex(String sex)
    method getAvatar (line 228) | public String getAvatar()
    method setAvatar (line 233) | public void setAvatar(String avatar)
    method getPassword (line 238) | @JsonIgnore
    method setPassword (line 244) | public void setPassword(String password)
    method getSalt (line 249) | @JsonIgnore
    method setSalt (line 255) | public void setSalt(String salt)
    method getStatus (line 260) | public String getStatus()
    method setStatus (line 265) | public void setStatus(String status)
    method getDelFlag (line 270) | public String getDelFlag()
    method setDelFlag (line 275) | public void setDelFlag(String delFlag)
    method getLoginIp (line 280) | public String getLoginIp()
    method setLoginIp (line 285) | public void setLoginIp(String loginIp)
    method getLoginDate (line 290) | public Date getLoginDate()
    method setLoginDate (line 295) | public void setLoginDate(Date loginDate)
    method getPwdUpdateDate (line 300) | public Date getPwdUpdateDate()
    method setPwdUpdateDate (line 305) | public void setPwdUpdateDate(Date pwdUpdateDate)
    method getDept (line 310) | public SysDept getDept()
    method setDept (line 319) | public void setDept(SysDept dept)
    method getRoles (line 324) | public List<SysRole> getRoles()
    method setRoles (line 329) | public void setRoles(List<SysRole> roles)
    method getRoleIds (line 334) | public Long[] getRoleIds()
    method setRoleIds (line 339) | public void setRoleIds(Long[] roleIds)
    method getPostIds (line 344) | public Long[] getPostIds()
    method setPostIds (line 349) | public void setPostIds(Long[] postIds)
    method toString (line 354) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
  class PageDomain (line 10) | public class PageDomain
    method getOrderBy (line 27) | public String getOrderBy()
    method getPageNum (line 36) | public Integer getPageNum()
    method setPageNum (line 41) | public void setPageNum(Integer pageNum)
    method getPageSize (line 46) | public Integer getPageSize()
    method setPageSize (line 51) | public void setPageSize(Integer pageSize)
    method getOrderByColumn (line 56) | public String getOrderByColumn()
    method setOrderByColumn (line 61) | public void setOrderByColumn(String orderByColumn)
    method getIsAsc (line 66) | public String getIsAsc()
    method setIsAsc (line 71) | public void setIsAsc(String isAsc)
    method getReasonable (line 76) | public Boolean getReasonable()
    method setReasonable (line 85) | public void setReasonable(Boolean reasonable)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
  class TableDataInfo (line 11) | public class TableDataInfo implements Serializable
    method TableDataInfo (line 30) | public TableDataInfo()
    method TableDataInfo (line 40) | public TableDataInfo(List<?> list, long total)
    method getTotal (line 46) | public long getTotal()
    method setTotal (line 51) | public void setTotal(long total)
    method getRows (line 56) | public List<?> getRows()
    method setRows (line 61) | public void setRows(List<?> rows)
    method getCode (line 66) | public int getCode()
    method setCode (line 71) | public void setCode(int code)
    method getMsg (line 76) | public String getMsg()
    method setMsg (line 81) | public void setMsg(String msg)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
  class TableSupport (line 11) | public class TableSupport
    method getPageDomain (line 41) | public static PageDomain getPageDomain()
    method buildPageRequest (line 52) | public static PageDomain buildPageRequest()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/session/OnlineSession.java
  class OnlineSession (line 13) | public class OnlineSession extends SimpleSession
    method getHost (line 44) | @Override
    method setHost (line 50) | @Override
    method getBrowser (line 56) | public String getBrowser()
    method setBrowser (line 61) | public void setBrowser(String browser)
    method getOs (line 66) | public String getOs()
    method setOs (line 71) | public void setOs(String os)
    method getUserId (line 76) | public Long getUserId()
    method setUserId (line 81) | public void setUserId(Long userId)
    method getLoginName (line 86) | public String getLoginName()
    method setLoginName (line 91) | public void setLoginName(String loginName)
    method getDeptName (line 96) | public String getDeptName()
    method setDeptName (line 101) | public void setDeptName(String deptName)
    method getStatus (line 106) | public OnlineStatus getStatus()
    method setStatus (line 111) | public void setStatus(OnlineStatus status)
    method markAttributeChanged (line 116) | public void markAttributeChanged()
    method resetAttributeChanged (line 121) | public void resetAttributeChanged()
    method isAttributeChanged (line 126) | public boolean isAttributeChanged()
    method getAvatar (line 131) | public String getAvatar() {
    method setAvatar (line 135) | public void setAvatar(String avatar) {
    method setAttribute (line 139) | @Override
    method removeAttribute (line 145) | @Override
    method toString (line 151) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java
  class CharsetKit (line 12) | public class CharsetKit
    method charset (line 34) | public static Charset charset(String charset)
    method convert (line 47) | public static String convert(String source, String srcCharset, String ...
    method convert (line 60) | public static String convert(String source, Charset srcCharset, Charse...
    method systemCharset (line 82) | public static String systemCharset()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
  class Convert (line 18) | public class Convert
    method toStr (line 29) | public static String toStr(Object value, String defaultValue)
    method toStr (line 50) | public static String toStr(Object value)
    method toChar (line 64) | public static Character toChar(Object value, Character defaultValue)
    method toChar (line 87) | public static Character toChar(Object value)
    method toByte (line 101) | public static Byte toByte(Object value, Byte defaultValue)
    method toByte (line 138) | public static Byte toByte(Object value)
    method toShort (line 152) | public static Short toShort(Object value, Short defaultValue)
    method toShort (line 189) | public static Short toShort(Object value)
    method toNumber (line 203) | public static Number toNumber(Object value, Number defaultValue)
    method toNumber (line 236) | public static Number toNumber(Object value)
    method toInt (line 250) | public static Integer toInt(Object value, Integer defaultValue)
    method toInt (line 287) | public static Integer toInt(Object value)
    method toIntArray (line 298) | public static Integer[] toIntArray(String str)
    method toLongArray (line 309) | public static Long[] toLongArray(String str)
    method toIntArray (line 321) | public static Integer[] toIntArray(String split, String str)
    method toLongArray (line 344) | public static Long[] toLongArray(String split, String str)
    method toStrArray (line 366) | public static String[] toStrArray(String str)
    method toStrArray (line 382) | public static String[] toStrArray(String split, String str)
    method toLong (line 396) | public static Long toLong(Object value, Long defaultValue)
    method toLong (line 434) | public static Long toLong(Object value)
    method toDouble (line 448) | public static Double toDouble(Object value, Double defaultValue)
    method toDouble (line 486) | public static Double toDouble(Object value)
    method toFloat (line 500) | public static Float toFloat(Object value, Float defaultValue)
    method toFloat (line 537) | public static Float toFloat(Object value)
    method toBool (line 551) | public static Boolean toBool(Object value, Boolean defaultValue)
    method toBool (line 591) | public static Boolean toBool(Object value)
    method toEnum (line 605) | public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object valu...
    method toEnum (line 640) | public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value)
    method toBigInteger (line 654) | public static BigInteger toBigInteger(Object value, BigInteger default...
    method toBigInteger (line 691) | public static BigInteger toBigInteger(Object value)
    method toBigDecimal (line 705) | public static BigDecimal toBigDecimal(Object value, BigDecimal default...
    method toBigDecimal (line 750) | public static BigDecimal toBigDecimal(Object value)
    method utf8Str (line 762) | public static String utf8Str(Object obj)
    method str (line 775) | public static String str(Object obj, String charsetName)
    method str (line 788) | public static String str(Object obj, Charset charset)
    method str (line 822) | public static String str(byte[] bytes, String charset)
    method str (line 834) | public static String str(byte[] data, Charset charset)
    method str (line 855) | public static String str(ByteBuffer data, String charset)
    method str (line 872) | public static String str(ByteBuffer data, Charset charset)
    method toSBC (line 888) | public static String toSBC(String input)
    method toSBC (line 900) | public static String toSBC(String input, Set<Character> notConvertSet)
    method toDBC (line 930) | public static String toDBC(String input)
    method toDBC (line 942) | public static String toDBC(String text, Set<Character> notConvertSet)
    method digitUppercase (line 973) | public static String digitUppercase(double n)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java
  class StrFormatter (line 10) | public class StrFormatter
    method format (line 30) | public static String format(final String strPattern, final Object... a...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java
  type BusinessStatus (line 8) | public enum BusinessStatus

FILE: ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java
  type BusinessType (line 8) | public enum BusinessType

FILE: ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java
  type DataSourceType (line 8) | public enum DataSourceType

FILE: ruoyi-common/src/main/java/com/ruoyi/common/enums/DesensitizedType.java
  type DesensitizedType (line 11) | public enum DesensitizedType
    method DesensitizedType (line 50) | DesensitizedType(Function<String, String> desensitizer)
    method desensitizer (line 55) | public Function<String, String> desensitizer()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java
  type OnlineStatus (line 8) | public enum OnlineStatus
    method OnlineStatus (line 15) | private OnlineStatus(String info)
    method getInfo (line 20) | public String getInfo()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java
  type OperatorType (line 8) | public enum OperatorType

FILE: ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
  type UserStatus (line 8) | public enum UserStatus
    method UserStatus (line 15) | UserStatus(String code, String info)
    method getCode (line 21) | public String getCode()
    method getInfo (line 26) | public String getInfo()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java
  class DemoModeException (line 8) | public class DemoModeException extends RuntimeException
    method DemoModeException (line 12) | public DemoModeException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java
  class GlobalException (line 8) | public class GlobalException extends RuntimeException
    method GlobalException (line 27) | public GlobalException()
    method GlobalException (line 31) | public GlobalException(String message)
    method getDetailMessage (line 36) | public String getDetailMessage()
    method setDetailMessage (line 41) | public GlobalException setDetailMessage(String detailMessage)
    method getMessage (line 47) | @Override
    method setMessage (line 53) | public GlobalException setMessage(String message)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java
  class ServiceException (line 8) | public final class ServiceException extends RuntimeException
    method ServiceException (line 27) | public ServiceException()
    method ServiceException (line 31) | public ServiceException(String message)
    method getDetailMessage (line 36) | public String getDetailMessage()
    method setDetailMessage (line 41) | public ServiceException setDetailMessage(String detailMessage)
    method getMessage (line 47) | @Override
    method setMessage (line 53) | public ServiceException setMessage(String message)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java
  class UtilException (line 8) | public class UtilException extends RuntimeException
    method UtilException (line 12) | public UtilException(Throwable e)
    method UtilException (line 17) | public UtilException(String message)
    method UtilException (line 22) | public UtilException(String message, Throwable throwable)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java
  class BaseException (line 11) | public class BaseException extends RuntimeException
    method BaseException (line 35) | public BaseException(String module, String code, Object[] args, String...
    method BaseException (line 43) | public BaseException(String module, String code, Object[] args)
    method BaseException (line 48) | public BaseException(String module, String defaultMessage)
    method BaseException (line 53) | public BaseException(String code, Object[] args)
    method BaseException (line 58) | public BaseException(String defaultMessage)
    method getMessage (line 63) | @Override
    method getModule (line 78) | public String getModule()
    method getCode (line 83) | public String getCode()
    method getArgs (line 88) | public Object[] getArgs()
    method getDefaultMessage (line 93) | public String getDefaultMessage()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java
  class FileException (line 10) | public class FileException extends BaseException
    method FileException (line 14) | public FileException(String code, Object[] args)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java
  class FileNameLengthLimitExceededException (line 8) | public class FileNameLengthLimitExceededException extends FileException
    method FileNameLengthLimitExceededException (line 12) | public FileNameLengthLimitExceededException(int defaultFileNameLength)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java
  class FileSizeLimitExceededException (line 8) | public class FileSizeLimitExceededException extends FileException
    method FileSizeLimitExceededException (line 12) | public FileSizeLimitExceededException(long defaultMaxSize)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileUploadException.java
  class FileUploadException (line 11) | public class FileUploadException extends Exception
    method FileUploadException (line 18) | public FileUploadException()
    method FileUploadException (line 23) | public FileUploadException(final String msg)
    method FileUploadException (line 28) | public FileUploadException(String msg, Throwable cause)
    method printStackTrace (line 34) | @Override
    method printStackTrace (line 45) | @Override
    method getCause (line 56) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
  class InvalidExtensionException (line 10) | public class InvalidExtensionException extends FileUploadException
    method InvalidExtensionException (line 18) | public InvalidExtensionException(String[] allowedExtension, String ext...
    method getAllowedExtension (line 26) | public String[] getAllowedExtension()
    method getExtension (line 31) | public String getExtension()
    method getFilename (line 36) | public String getFilename()
    class InvalidImageExtensionException (line 41) | public static class InvalidImageExtensionException extends InvalidExte...
      method InvalidImageExtensionException (line 45) | public InvalidImageExtensionException(String[] allowedExtension, Str...
    class InvalidFlashExtensionException (line 51) | public static class InvalidFlashExtensionException extends InvalidExte...
      method InvalidFlashExtensionException (line 55) | public InvalidFlashExtensionException(String[] allowedExtension, Str...
    class InvalidMediaExtensionException (line 61) | public static class InvalidMediaExtensionException extends InvalidExte...
      method InvalidMediaExtensionException (line 65) | public InvalidMediaExtensionException(String[] allowedExtension, Str...
    class InvalidVideoExtensionException (line 71) | public static class InvalidVideoExtensionException extends InvalidExte...
      method InvalidVideoExtensionException (line 75) | public InvalidVideoExtensionException(String[] allowedExtension, Str...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
  class TaskException (line 8) | public class TaskException extends Exception
    method TaskException (line 14) | public TaskException(String msg, Code code)
    method TaskException (line 19) | public TaskException(String msg, Code code, Exception nestedEx)
    method getCode (line 25) | public Code getCode()
    type Code (line 30) | public enum Code

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/BlackListException.java
  class BlackListException (line 8) | public class BlackListException extends UserException
    method BlackListException (line 12) | public BlackListException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java
  class CaptchaException (line 8) | public class CaptchaException extends UserException
    method CaptchaException (line 12) | public CaptchaException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java
  class RoleBlockedException (line 8) | public class RoleBlockedException extends UserException
    method RoleBlockedException (line 12) | public RoleBlockedException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java
  class UserBlockedException (line 8) | public class UserBlockedException extends UserException
    method UserBlockedException (line 12) | public UserBlockedException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java
  class UserDeleteException (line 8) | public class UserDeleteException extends UserException
    method UserDeleteException (line 12) | public UserDeleteException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java
  class UserException (line 10) | public class UserException extends BaseException
    method UserException (line 14) | public UserException(String code, Object[] args)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java
  class UserNotExistsException (line 8) | public class UserNotExistsException extends UserException
    method UserNotExistsException (line 12) | public UserNotExistsException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java
  class UserPasswordNotMatchException (line 8) | public class UserPasswordNotMatchException extends UserException
    method UserPasswordNotMatchException (line 12) | public UserPasswordNotMatchException()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java
  class UserPasswordRetryLimitCountException (line 8) | public class UserPasswordRetryLimitCountException extends UserException
    method UserPasswordRetryLimitCountException (line 12) | public UserPasswordRetryLimitCountException(int retryLimitCount)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java
  class UserPasswordRetryLimitExceedException (line 8) | public class UserPasswordRetryLimitExceedException extends UserException
    method UserPasswordRetryLimitExceedException (line 12) | public UserPasswordRetryLimitExceedException(int retryLimitCount)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java
  class JSON (line 18) | public class JSON
    method marshal (line 24) | public static void marshal(File file, Object value) throws Exception
    method marshal (line 44) | public static void marshal(OutputStream os, Object value) throws Excep...
    method marshal (line 64) | public static String marshal(Object value) throws Exception
    method marshalBytes (line 84) | public static byte[] marshalBytes(Object value) throws Exception
    method unmarshal (line 104) | public static <T> T unmarshal(File file, Class<T> valueType) throws Ex...
    method unmarshal (line 124) | public static <T> T unmarshal(InputStream is, Class<T> valueType) thro...
    method unmarshal (line 144) | public static <T> T unmarshal(String str, Class<T> valueType) throws E...
    method unmarshal (line 164) | public static <T> T unmarshal(byte[] bytes, Class<T> valueType) throws...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java
  class JSONObject (line 19) | public class JSONObject extends LinkedHashMap<String, Object>
    class JSONArray (line 28) | public static class JSONArray extends ArrayList<Object>
      method JSONArray (line 32) | public JSONArray()
      method JSONArray (line 37) | public JSONArray(int size)
      method toString (line 42) | @Override
      method set (line 55) | @Override
      method add (line 61) | @Override
      method add (line 67) | @Override
    method JSONObject (line 74) | public JSONObject()
    method JSONObject (line 79) | public JSONObject(final JSONObject other)
    method toString (line 84) | @Override
    method toCompactString (line 102) | public String toCompactString()
    method intValue (line 120) | public Integer intValue(final String name)
    method intValue (line 132) | public Integer intValue(final String name, final Integer defaultValue)
    method longValue (line 143) | public Long longValue(final String name)
    method longValue (line 155) | public Long longValue(final String name, final Long defaultValue)
    method boolValue (line 166) | public Boolean boolValue(final String name)
    method boolValue (line 178) | public Boolean boolValue(final String name, final Boolean defaultValue)
    method strValue (line 189) | public String strValue(final String name)
    method strValue (line 201) | public String strValue(final String name, final String defaultValue)
    method value (line 212) | public Object value(final String name)
    method value (line 247) | public JSONObject value(final String name, final Object value)
    method obj (line 283) | public JSONObject obj(final String name)
    method arr (line 315) | public JSONArray arr(final String name)
    method getObj (line 332) | public JSONObject getObj(final String name)
    method getArr (line 343) | public JSONArray getArr(final String name)
    method getInt (line 354) | public Integer getInt(final String name)
    method getInt (line 366) | public Integer getInt(final String name, Integer defaultValue)
    method getLong (line 377) | public Long getLong(final String name)
    method getLong (line 389) | public Long getLong(final String name, Long defaultValue)
    method getStr (line 400) | public String getStr(final String name)
    method getStr (line 412) | public String getStr(final String name, final String defaultValue)
    method getBool (line 423) | public Boolean getBool(final String name)
    method getBool (line 435) | public Boolean getBool(final String name, final Boolean defaultValue)
    method set (line 448) | public JSONObject set(final String name, final Object value)
    method asBean (line 460) | public <T> T asBean(Class<T> beanClass)
    method put (line 476) | @Override
    method valueAsInt (line 482) | public static Integer valueAsInt(Object value)
    method valueAsLong (line 506) | public static Long valueAsLong(Object value)
    method valueAsStr (line 530) | public static String valueAsStr(Object value)
    method valueAsBool (line 546) | public static Boolean valueAsBool(Object value)
    method transfer (line 572) | @SuppressWarnings("unchecked")
    method toArr (line 589) | private static JSONArray toArr(final Collection<Object> list)
    method toObj (line 599) | private static JSONObject toObj(final Map<String, Object> map)
    method arrayAt (line 616) | private static JSONArray arrayAt(JSONArray arr, int index)
    method objAt (line 633) | private static JSONObject objAt(final JSONArray arr, int index)
    method elementAt (line 650) | private static void elementAt(final JSONArray arr, final int index, fi...
    method elementAt (line 662) | private static Object elementAt(final JSONArray arr, final int index)
    method expand (line 674) | private static JSONArray expand(final JSONArray arr, final int index)
    type EndArrayCallback (line 690) | private interface EndArrayCallback<T>
      method callback (line 699) | T callback(JSONArray arr, int index);
    method endArray (line 711) | private <T> T endArray(final String name, final String indexesStr, fin...
    method parseIndexes (line 723) | private static int[] parseIndexes(final String s)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java
  class AddressUtils (line 15) | public class AddressUtils
    method getRealAddressByIP (line 25) | public static String getRealAddressByIP(String ip)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
  class Arith (line 11) | public class Arith
    method Arith (line 18) | private Arith()
    method add (line 28) | public static double add(double v1, double v2)
    method sub (line 41) | public static double sub(double v1, double v2)
    method mul (line 54) | public static double mul(double v1, double v2)
    method div (line 68) | public static double div(double v1, double v2)
    method div (line 81) | public static double div(double v1, double v2, int scale)
    method round (line 103) | public static double round(double v, int scale)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/CacheUtils.java
  class CacheUtils (line 17) | public class CacheUtils
    method get (line 31) | public static Object get(String key)
    method get (line 43) | public static Object get(String key, Object defaultValue)
    method put (line 55) | public static void put(String key, Object value)
    method remove (line 66) | public static void remove(String key)
    method get (line 78) | public static Object get(String cacheName, String key)
    method get (line 91) | public static Object get(String cacheName, String key, Object defaultV...
    method put (line 104) | public static void put(String cacheName, String key, Object value)
    method remove (line 115) | public static void remove(String cacheName, String key)
    method removeAll (line 125) | public static void removeAll(String cacheName)
    method removeByKeys (line 141) | public static void removeByKeys(Set<String> keys)
    method removeByKeys (line 152) | public static void removeByKeys(String cacheName, Set<String> keys)
    method getKey (line 167) | private static String getKey(String key)
    method getCache (line 178) | public static Cache<String, Object> getCache(String cacheName)
    method getCacheNames (line 193) | public static String[] getCacheNames()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/CookieUtils.java
  class CookieUtils (line 15) | public class CookieUtils
    method setCookie (line 23) | public static void setCookie(HttpServletResponse response, String name...
    method setCookie (line 36) | public static void setCookie(HttpServletResponse response, String name...
    method setCookie (line 49) | public static void setCookie(HttpServletResponse response, String name...
    method setCookie (line 62) | public static void setCookie(HttpServletResponse response, String name...
    method getCookie (line 84) | public static String getCookie(HttpServletRequest request, String name)
    method getCookie (line 95) | public static String getCookie(HttpServletRequest request, HttpServlet...
    method getCookie (line 109) | public static String getCookie(HttpServletRequest request, HttpServlet...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
  class DateUtils (line 19) | @SuppressWarnings("deprecation")
    method getNowDate (line 42) | public static Date getNowDate()
    method getDate (line 52) | public static String getDate()
    method getTime (line 57) | public static final String getTime()
    method dateTimeNow (line 62) | public static final String dateTimeNow()
    method dateTimeNow (line 67) | public static final String dateTimeNow(final String format)
    method dateTime (line 72) | public static final String dateTime(final Date date)
    method parseDateToStr (line 77) | public static final String parseDateToStr(final String format, final D...
    method dateTime (line 82) | public static final Date dateTime(final String format, final String ts)
    method datePath (line 97) | public static final String datePath()
    method dateTime (line 106) | public static final String dateTime()
    method parseDate (line 115) | public static Date parseDate(Object str)
    method getServerStartDate (line 134) | public static Date getServerStartDate()
    method differentDaysByMillisecond (line 143) | public static int differentDaysByMillisecond(Date date1, Date date2)
    method timeDistance (line 155) | public static String timeDistance(Date endDate, Date startTime)
    method toDate (line 177) | public static Date toDate(LocalDateTime temporalAccessor)
    method toDate (line 186) | public static Date toDate(LocalDate temporalAccessor)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/DesensitizedUtil.java
  class DesensitizedUtil (line 8) | public class DesensitizedUtil
    method password (line 16) | public static String password(String password)
    method carLicense (line 31) | public static String carLicense(String carLicense)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
  class DictUtils (line 13) | @Component
    method setDictCache (line 27) | public static void setDictCache(String key, List<SysDictData> dictDatas)
    method getDictCache (line 38) | public static List<SysDictData> getDictCache(String key)
    method getDictLabel (line 55) | public static String getDictLabel(String dictType, String dictValue)
    method getDictValue (line 71) | public static String getDictValue(String dictType, String dictLabel)
    method getDictLabel (line 88) | public static String getDictLabel(String dictType, String dictValue, S...
    method getDictValue (line 131) | public static String getDictValue(String dictType, String dictLabel, S...
    method getDictValues (line 172) | public static String getDictValues(String dictType)
    method getDictLabels (line 193) | public static String getDictLabels(String dictType)
    method removeDictCache (line 213) | public static void removeDictCache(String key)
    method clearDictCache (line 221) | public static void clearDictCache()
    method getCacheName (line 231) | public static String getCacheName()
    method getCacheKey (line 242) | public static String getCacheKey(String configKey)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java
  class ExceptionUtil (line 12) | public class ExceptionUtil
    method getExceptionMessage (line 17) | public static String getExceptionMessage(Throwable e)
    method getRootErrorMessage (line 24) | public static String getRootErrorMessage(Exception e)
    method isCausedBy (line 47) | public static boolean isCausedBy(final Throwable e, final Class<? exte...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/IpUtils.java
  class IpUtils (line 12) | public class IpUtils
    method getIpAddr (line 27) | public static String getIpAddr(HttpServletRequest request)
    method internalIp (line 65) | public static boolean internalIp(String ip)
    method internalIp (line 77) | private static boolean internalIp(byte[] addr)
    method textToNumericFormatV4 (line 120) | public static byte[] textToNumericFormatV4(String text)
    method getHostIp (line 207) | public static String getHostIp()
    method getHostName (line 224) | public static String getHostName()
    method getMultistageReverseProxyIp (line 242) | public static String getMultistageReverseProxyIp(String ip)
    method isUnknown (line 266) | public static boolean isUnknown(String checkString)
    method isIP (line 274) | public static boolean isIP(String ip)
    method isIpWildCard (line 282) | public static boolean isIpWildCard(String ip)
    method ipIsInWildCardNoCheck (line 290) | public static boolean ipIsInWildCardNoCheck(String ipWildCard, String ip)
    method isIPSegment (line 309) | public static boolean isIPSegment(String ipSeg)
    method ipIsInNetNoCheck (line 317) | public static boolean ipIsInNetNoCheck(String iparea, String ip)
    method isMatchedIp (line 346) | public static boolean isMatchedIp(String filter, String ip)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java
  class LogUtils (line 17) | public class LogUtils
    method logAccess (line 28) | public static void logAccess(HttpServletRequest request) throws Exception
    method logError (line 56) | public static void logError(String message, Throwable e)
    method logPageError (line 71) | public static void logPageError(HttpServletRequest request)
    method getBlock (line 106) | public static String getBlock(Object msg)
    method getParams (line 115) | protected static String getParams(HttpServletRequest request) throws E...
    method getUsername (line 121) | protected static String getUsername()
    method getAccessLog (line 126) | public static Logger getAccessLog()
    method getErrorLog (line 131) | public static Logger getErrorLog()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/MapDataUtil.java
  class MapDataUtil (line 14) | public class MapDataUtil
    method convertDataMap (line 16) | public static Map<String, Object> convertDataMap(HttpServletRequest re...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java
  class MessageUtils (line 12) | public class MessageUtils
    method message (line 21) | public static String message(String code, Object... args)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java
  class PageUtils (line 13) | public class PageUtils extends PageHelper
    method startPage (line 18) | public static void startPage()
    method clearPage (line 31) | public static void clearPage()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java
  class ServletUtils (line 23) | public class ServletUtils
    method getParameter (line 35) | public static String getParameter(String name)
    method getParameter (line 43) | public static String getParameter(String name, String defaultValue)
    method getParameterToInt (line 51) | public static Integer getParameterToInt(String name)
    method getParameterToInt (line 59) | public static Integer getParameterToInt(String name, Integer defaultVa...
    method getParameterToBool (line 67) | public static Boolean getParameterToBool(String name)
    method getParameterToBool (line 75) | public static Boolean getParameterToBool(String name, Boolean defaultV...
    method getRequest (line 83) | public static HttpServletRequest getRequest()
    method getResponse (line 91) | public static HttpServletResponse getResponse()
    method getSession (line 99) | public static HttpSession getSession()
    method getRequestAttributes (line 104) | public static ServletRequestAttributes getRequestAttributes()
    method renderString (line 117) | public static String renderString(HttpServletResponse response, String...
    method isAjaxRequest (line 137) | public static boolean isAjaxRequest(HttpServletRequest request)
    method checkAgentIsMobile (line 164) | public static boolean checkAgentIsMobile(String ua)
    method urlEncode (line 191) | public static String urlEncode(String str)
    method urlDecode (line 209) | public static String urlDecode(String str)
    method generateToken (line 226) | public static String generateToken()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/ShiroUtils.java
  class ShiroUtils (line 17) | public class ShiroUtils
    method getSubject (line 19) | public static Subject getSubject()
    method getSession (line 24) | public static Session getSession()
    method logout (line 29) | public static void logout()
    method getSysUser (line 34) | public static SysUser getSysUser()
    method setSysUser (line 46) | public static void setSysUser(SysUser user)
    method getUserId (line 56) | public static Long getUserId()
    method getLoginName (line 61) | public static String getLoginName()
    method getIp (line 66) | public static String getIp()
    method getSessionId (line 71) | public static String getSessionId()
    method isAdmin (line 81) | public static boolean isAdmin()
    method isAdmin (line 92) | public static boolean isAdmin(Long userId)
    method randomSalt (line 100) | public static String randomSalt()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
  class StringUtils (line 19) | @SuppressWarnings("deprecation")
    method nvl (line 37) | public static <T> T nvl(T value, T defaultValue)
    method isEmpty (line 48) | public static boolean isEmpty(Collection<?> coll)
    method isNotEmpty (line 59) | public static boolean isNotEmpty(Collection<?> coll)
    method isEmpty (line 70) | public static boolean isEmpty(Object[] objects)
    method isNotEmpty (line 81) | public static boolean isNotEmpty(Object[] objects)
    method isEmpty (line 92) | public static boolean isEmpty(Map<?, ?> map)
    method isNotEmpty (line 103) | public static boolean isNotEmpty(Map<?, ?> map)
    method isEmpty (line 114) | public static boolean isEmpty(String str)
    method isNotEmpty (line 125) | public static boolean isNotEmpty(String str)
    method isNull (line 136) | public static boolean isNull(Object object)
    method isNotNull (line 147) | public static boolean isNotNull(Object object)
    method isArray (line 158) | public static boolean isArray(Object object)
    method trim (line 166) | public static String trim(String str)
    method hide (line 179) | public static String hide(CharSequence str, int startInclude, int endE...
    method substring (line 221) | public static String substring(final String str, int start)
    method substring (line 253) | public static String substring(final String str, int start, int end)
    method substringBetweenLast (line 299) | public static String substringBetweenLast(final String str, final Stri...
    method format (line 330) | public static String format(String template, Object... params)
    method ishttp (line 345) | public static boolean ishttp(String link)
    method str2Set (line 357) | public static final Set<String> str2Set(String str, String sep)
    method str2List (line 369) | public static final List<String> str2List(String str, String sep)
    method str2List (line 383) | public static final List<String> str2List(String str, String sep, bool...
    method contains (line 420) | public static boolean contains(final CharSequence seq, final CharSeque...
    method containsAny (line 432) | public static boolean containsAny(Collection<String> collection, Strin...
    method containsAnyIgnoreCase (line 458) | public static boolean containsAnyIgnoreCase(CharSequence cs, CharSeque...
    method containsIgnoreCase (line 481) | public static boolean containsIgnoreCase(final CharSequence str, final...
    method startsWithAny (line 493) | public static boolean startsWithAny(final CharSequence sequence, final...
    method equals (line 505) | public static boolean equals(final CharSequence cs1, final CharSequenc...
    method replace (line 518) | public static String replace(final String text, final String searchStr...
    method indexOf (line 530) | public static int indexOf(final CharSequence seq, final CharSequence s...
    method endsWith (line 542) | public static boolean endsWith(final CharSequence str, final CharSeque...
    method equalsAny (line 554) | public static boolean equalsAny(final CharSequence string, final CharS...
    method endsWithAny (line 566) | public static boolean endsWithAny(final CharSequence sequence, final C...
    method endsWithIgnoreCase (line 578) | public static boolean endsWithIgnoreCase(final CharSequence str, final...
    method indexOfIgnoreCase (line 590) | public static int indexOfIgnoreCase(final CharSequence str, final Char...
    method equalsAnyIgnoreCase (line 603) | public static boolean equalsAnyIgnoreCase(final CharSequence string, f...
    method toUnderScoreCase (line 611) | public static String toUnderScoreCase(String str)
    method inStringIgnoreCase (line 664) | public static boolean inStringIgnoreCase(String str, String... strs)
    method lastStringDel (line 686) | public static String lastStringDel(String str, String spit)
    method convertToCamelCase (line 701) | public static String convertToCamelCase(String name)
    method toCamelCase (line 735) | public static String toCamelCase(String s)
    method matches (line 776) | public static boolean matches(String str, List<String> strs)
    method isMatch (line 802) | public static boolean isMatch(String pattern, String url)
    method cast (line 808) | @SuppressWarnings("unchecked")
    method padl (line 821) | public static final String padl(final Number num, final int size)
    method padl (line 834) | public static final String padl(final String s, final int size, final ...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java
  class Threads (line 16) | public class Threads
    method sleep (line 23) | public static void sleep(long milliseconds)
    method shutdownAndAwaitTermination (line 42) | public static void shutdownAndAwaitTermination(ExecutorService pool)
    method printException (line 69) | public static void printException(Runnable r, Throwable t)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java
  class BeanUtils (line 14) | public class BeanUtils extends org.springframework.beans.BeanUtils
    method copyBeanProp (line 31) | public static void copyBeanProp(Object dest, Object src)
    method getSetterMethods (line 49) | public static List<Method> getSetterMethods(Object obj)
    method getGetterMethods (line 78) | public static List<Method> getGetterMethods(Object obj)
    method isMethodPropEquals (line 106) | public static boolean isMethodPropEquals(String m1, String m2)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java
  class BeanValidators (line 13) | public class BeanValidators
    method validateWithException (line 15) | public static void validateWithException(Validator validator, Object o...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java
  class FileTypeUtils (line 11) | public class FileTypeUtils
    method getFileType (line 21) | public static String getFileType(File file)
    method getFileType (line 38) | public static String getFileType(String fileName)
    method getFileExtendName (line 54) | public static String getFileExtendName(byte[] photoByte)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
  class FileUploadUtils (line 24) | public class FileUploadUtils
    method setDefaultBaseDir (line 41) | public static void setDefaultBaseDir(String defaultBaseDir)
    method getDefaultBaseDir (line 46) | public static String getDefaultBaseDir()
    method upload (line 58) | public static final String upload(MultipartFile file) throws IOException
    method upload (line 78) | public static final String upload(String baseDir, MultipartFile file) ...
    method upload (line 102) | public static final String upload(String baseDir, MultipartFile file, ...
    method upload (line 122) | public static final String upload(String baseDir, MultipartFile file, ...
    method extractFilename (line 144) | public static final String extractFilename(MultipartFile file)
    method uuidFilename (line 152) | public static final String uuidFilename(MultipartFile file)
    method getAbsoluteFile (line 157) | public static final File getAbsoluteFile(String uploadDir, String file...
    method getPathFileName (line 171) | public static final String getPathFileName(String uploadDir, String fi...
    method assertAllowed (line 186) | public static final void assertAllowed(MultipartFile file, String[] al...
    method isAllowedExtension (line 233) | public static final boolean isAllowedExtension(String extension, Strin...
    method getExtension (line 251) | public static final String getExtension(MultipartFile file)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
  class FileUtils (line 28) | public class FileUtils
    method writeBytes (line 39) | public static void writeBytes(String filePath, OutputStream os) throws...
    method writeImportBytes (line 75) | public static String writeImportBytes(byte[] data) throws IOException
    method writeBytes (line 88) | public static String writeBytes(byte[] data, String uploadDir) throws ...
    method stripPrefix (line 113) | public static String stripPrefix(String filePath)
    method deleteFile (line 124) | public static boolean deleteFile(String filePath)
    method isValidFilename (line 142) | public static boolean isValidFilename(String filename)
    method checkAllowDownload (line 153) | public static boolean checkAllowDownload(String resource)
    method setFileDownloadHeader (line 178) | public static String setFileDownloadHeader(HttpServletRequest request,...
    method setAttachmentResponseHeader (line 213) | public static void setAttachmentResponseHeader(HttpServletResponse res...
    method percentEncode (line 234) | public static String percentEncode(String s) throws UnsupportedEncodin...
    method getFileExtendName (line 246) | public static String getFileExtendName(byte[] photoByte)
    method getName (line 275) | public static String getName(String fileName)
    method getNameNotSuffix (line 293) | public static String getNameNotSuffix(String fileName)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java
  class ImageUtils (line 21) | public class ImageUtils
    method getImage (line 25) | public static byte[] getImage(String imagePath)
    method getFile (line 43) | public static InputStream getFile(String imagePath)
    method readFile (line 64) | public static byte[] readFile(String url)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
  class MimeTypeUtils (line 8) | public class MimeTypeUtils
    method getExtension (line 41) | public static String getExtension(String prefix)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java
  class EscapeUtil (line 10) | public class EscapeUtil
    method escape (line 37) | public static String escape(String text)
    method unescape (line 48) | public static String unescape(String content)
    method clean (line 59) | public static String clean(String content)
    method encode (line 70) | private static String encode(String text)
    method decode (line 111) | public static String decode(String content)
    method main (line 156) | public static void main(String[] args)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java
  class HTMLFilter (line 18) | public final class HTMLFilter
    method HTMLFilter (line 103) | public HTMLFilter()
    method HTMLFilter (line 142) | @SuppressWarnings("unchecked")
    method reset (line 168) | private void reset()
    method chr (line 175) | public static String chr(final int decimal)
    method htmlSpecialChars (line 180) | public static String htmlSpecialChars(final String s)
    method filter (line 198) | public String filter(final String input)
    method isAlwaysMakeTags (line 216) | public boolean isAlwaysMakeTags()
    method isStripComments (line 221) | public boolean isStripComments()
    method escapeComments (line 226) | private String escapeComments(final String s)
    method balanceHTML (line 240) | private String balanceHTML(String s)
    method checkTags (line 272) | private String checkTags(String s)
    method processRemoveBlanks (line 300) | private String processRemoveBlanks(final String s)
    method regexReplace (line 320) | private static String regexReplace(final Pattern regex_pattern, final ...
    method processTag (line 326) | private String processTag(final String s)
    method processParamProtocol (line 437) | private String processParamProtocol(String s)
    method decodeEntities (line 458) | private String decodeEntities(String s)
    method validateEntities (line 498) | private String validateEntities(final String s)
    method encodeQuotes (line 515) | private String encodeQuotes(final String s)
    method checkEntity (line 538) | private String checkEntity(final String preamble, final String term)
    method isValidEntity (line 544) | private boolean isValidEntity(final String entity)
    method inArray (line 549) | private static boolean inArray(final String s, final String[] array)
    method allowed (line 561) | private boolean allowed(final String name)
    method allowedAttribute (line 566) | private boolean allowedAttribute(final String name, final String param...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
  class HttpUtils (line 31) | public class HttpUtils
    method sendGet (line 41) | public static String sendGet(String url)
    method sendGet (line 53) | public static String sendGet(String url, String param)
    method sendGet (line 66) | public static String sendGet(String url, String param, String contentT...
    method sendPost (line 128) | public static String sendPost(String url, String param)
    method sendPost (line 141) | public static String sendPost(String url, String param, String content...
    method sendSSLPost (line 206) | public static String sendSSLPost(String url, String param)
    method sendSSLPost (line 211) | public static String sendSSLPost(String url, String param, String cont...
    class TrustAnyTrustManager (line 266) | private static class TrustAnyTrustManager implements X509TrustManager
      method checkClientTrusted (line 268) | @Override
      method checkServerTrusted (line 273) | @Override
      method getAcceptedIssuers (line 278) | @Override
    class TrustAnyHostnameVerifier (line 285) | private static class TrustAnyHostnameVerifier implements HostnameVerifier
      method verify (line 287) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/http/UserAgentUtils.java
  class UserAgentUtils (line 14) | public class UserAgentUtils
    method getBrowser (line 50) | public static String getBrowser(String userAgent)
    method getOperatingSystem (line 64) | public static String getOperatingSystem(String userAgent)
    method formatBrowser (line 78) | private static String formatBrowser(String browser)
    method formatOperatingSystem (line 152) | private static String formatOperatingSystem(String operatingSystem)
    method extractMajorVersion (line 195) | private static String extractMajorVersion(String fullVersion)
    method getWindowsVersionDisplay (line 232) | private static String getWindowsVersionDisplay(String version)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java
  type ExcelHandlerAdapter (line 11) | public interface ExcelHandlerAdapter
    method format (line 23) | Object format(Object value, String[] args, Cell cell, Workbook wb);

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
  class ExcelUtil (line 94) | public class ExcelUtil<T>
    method ExcelUtil (line 209) | public ExcelUtil(Class<T> clazz)
    method showColumn (line 219) | public void showColumn(String... fields)
    method hideColumn (line 229) | public void hideColumn(String... fields)
    method init (line 234) | public void init(List<T> list, String sheetName, String title, Type type)
    method createTitle (line 253) | public void createTitle()
    method createSubHead (line 277) | public void createSubHead()
    method importExcel (line 318) | public List<T> importExcel(InputStream is)
    method importExcel (line 330) | public List<T> importExcel(InputStream is, int titleNum)
    method importExcel (line 357) | public List<T> importExcel(String sheetName, InputStream is, int title...
    method exportExcel (line 539) | public AjaxResult exportExcel(List<T> list, String sheetName)
    method exportExcel (line 552) | public AjaxResult exportExcel(List<T> list, String sheetName, String t...
    method exportExcel (line 566) | public void exportExcel(HttpServletResponse response, List<T> list, St...
    method exportExcel (line 580) | public void exportExcel(HttpServletResponse response, List<T> list, St...
    method importTemplateExcel (line 594) | public AjaxResult importTemplateExcel(String sheetName)
    method importTemplateExcel (line 606) | public AjaxResult importTemplateExcel(String sheetName, String title)
    method importTemplateExcel (line 618) | public void importTemplateExcel(HttpServletResponse response, String s...
    method importTemplateExcel (line 630) | public void importTemplateExcel(HttpServletResponse response, String s...
    method exportExcel (line 643) | public void exportExcel(HttpServletResponse response)
    method exportExcel (line 665) | public AjaxResult exportExcel()
    method writeSheet (line 691) | public void writeSheet()
    method fillExcelData (line 734) | @SuppressWarnings("unchecked")
    method getCurrentMaxSubListSize (line 802) | private int getCurrentMaxSubListSize(T vo)
    method createStyles (line 833) | private Map<String, CellStyle> createStyles(Workbook wb)
    method annotationHeaderStyles (line 889) | private Map<String, CellStyle> annotationHeaderStyles(Workbook wb, Map...
    method annotationDataStyles (line 925) | private Map<String, CellStyle> annotationDataStyles(Workbook wb)
    method annotationDataStyles (line 958) | public void annotationDataStyles(Map<String, CellStyle> styles, Field ...
    method createHeadCell (line 994) | public Cell createHeadCell(Excel attr, Row row, int column)
    method setCellVo (line 1021) | public void setCellVo(Object value, Excel attr, Cell cell)
    method getDrawingPatriarch (line 1063) | public static Drawing<?> getDrawingPatriarch(Sheet sheet)
    method getImageType (line 1075) | public int getImageType(byte[] value)
    method setDataValidation (line 1092) | public void setDataValidation(Excel attr, Row row, int column)
    method addCell (line 1132) | @SuppressWarnings("deprecation")
    method createCellStyle (line 1208) | private CellStyle createCellStyle(CellStyle cellStyle, String format)
    method setPromptOrValidation (line 1234) | public void setPromptOrValidation(Sheet sheet, String[] textlist, Stri...
    method setXSSFValidationWithHidden (line 1271) | public void setXSSFValidationWithHidden(Sheet sheet, String[] textlist...
    method convertByExp (line 1338) | public static String convertByExp(String propertyValue, String convert...
    method reverseByExp (line 1375) | public static String reverseByExp(String propertyValue, String convert...
    method convertDictByExp (line 1412) | public static String convertDictByExp(String dictValue, String dictTyp...
    method reverseDictByExp (line 1425) | public static String reverseDictByExp(String dictLabel, String dictTyp...
    method dataFormatHandlerAdapter (line 1437) | public String dataFormatHandlerAdapter(Object value, Excel excel, Cell...
    method addStatisticsData (line 1455) | private void addStatisticsData(Integer index, String text, Excel entity)
    method addStatisticsRow (line 1478) | public void addStatisticsRow()
    method encodingFilename (line 1501) | public String encodingFilename(String filename)
    method getAbsoluteFile (line 1511) | public String getAbsoluteFile(String filename)
    method getTargetValue (line 1531) | private Object getTargetValue(T vo, Field field, Excel excel) throws E...
    method getValue (line 1562) | private Object getValue(Object o, String name) throws Exception
    method createExcelField (line 1577) | private void createExcelField()
    method getFields (line 1587) | public List<Object[]> getFields()
    method addField (line 1628) | public void addField(List<Object[]> fields, Field field)
    method getRowHeight (line 1678) | public short getRowHeight()
    method createWorkbook (line 1692) | public void createWorkbook()
    method createSheet (line 1706) | public void createSheet(int sheetNo, int index)
    method getCellValue (line 1725) | public Object getCellValue(Row row, int column)
    method isRowEmpty (line 1784) | private boolean isRowEmpty(Row row)
    method getSheetPictures03 (line 1808) | public static Map<String, List<PictureData>> getSheetPictures03(HSSFSh...
    method getSheetPictures07 (line 1835) | public static Map<String, List<PictureData>> getSheetPictures07(XSSFSh...
    method parseDateToStr (line 1866) | public String parseDateToStr(String dateFormat, Object val)
    method isSubList (line 1895) | public boolean isSubList()
    method isSubListValue (line 1903) | public boolean isSubListValue(T vo)
    method getListCellValue (line 1911) | public int getListCellValue(Object obj)
    method getSubMethod (line 1940) | public Method getSubMethod(String name, Class<?> pojoClass)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java
  class ReflectUtils (line 24) | @SuppressWarnings("rawtypes")
    method invokeGetter (line 39) | @SuppressWarnings("unchecked")
    method invokeSetter (line 55) | public static <E> void invokeSetter(Object obj, String propertyName, E...
    method getFieldValue (line 77) | @SuppressWarnings("unchecked")
    method setFieldValue (line 101) | public static <E> void setFieldValue(final Object obj, final String fi...
    method invokeMethod (line 125) | @SuppressWarnings("unchecked")
    method invokeMethodByName (line 155) | @SuppressWarnings("unchecked")
    method getAccessibleField (line 231) | public static Field getAccessibleField(final Object obj, final String ...
    method getAccessibleMethod (line 261) | public static Method getAccessibleMethod(final Object obj, final Strin...
    method getAccessibleMethodByName (line 292) | public static Method getAccessibleMethodByName(final Object obj, final...
    method makeAccessible (line 318) | @SuppressWarnings("deprecation")
    method makeAccessible (line 331) | @SuppressWarnings("deprecation")
    method getClassGenricType (line 345) | @SuppressWarnings("unchecked")
    method getClassGenricType (line 355) | public static Class getClassGenricType(final Class clazz, final int in...
    method getUserClass (line 382) | public static Class<?> getUserClass(Object instance)
    method convertReflectionExceptionToUnchecked (line 404) | public static RuntimeException convertReflectionExceptionToUnchecked(S...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/security/CipherUtils.java
  class CipherUtils (line 12) | public class CipherUtils
    method generateNewKey (line 21) | public static Key generateNewKey(int keyBitSize, String algorithmName)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/security/Md5Utils.java
  class Md5Utils (line 13) | public class Md5Utils
    method md5 (line 17) | private static byte[] md5(String s)
    method toHex (line 35) | private static final String toHex(byte hash[])
    method hash (line 55) | public static String hash(String s)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java
  class PermissionUtils (line 19) | public class PermissionUtils
    method getMsg (line 59) | public static String getMsg(String permissionsStr)
    method getPrincipalProperty (line 93) | public static Object getPrincipalProperty(String property)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java
  class SpringUtils (line 18) | @Component
    method postProcessBeanFactory (line 26) | @Override
    method setApplicationContext (line 32) | @Override
    method getBean (line 46) | @SuppressWarnings("unchecked")
    method getBean (line 60) | public static <T> T getBean(Class<T> clz) throws BeansException
    method containsBean (line 72) | public static boolean containsBean(String name)
    method isSingleton (line 85) | public static boolean isSingleton(String name) throws NoSuchBeanDefini...
    method getType (line 96) | public static Class<?> getType(String name) throws NoSuchBeanDefinitio...
    method getAliases (line 109) | public static String[] getAliases(String name) throws NoSuchBeanDefini...
    method getAopProxy (line 120) | @SuppressWarnings("unchecked")
    method getActiveProfiles (line 131) | public static String[] getActiveProfiles()
    method getActiveProfile (line 141) | public static String getActiveProfile()
    method getRequiredProperty (line 154) | public static String getRequiredProperty(String key)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java
  class SqlUtil (line 11) | public class SqlUtil
    method escapeOrderBySql (line 31) | public static String escapeOrderBySql(String value)
    method isValidOrderBySql (line 47) | public static boolean isValidOrderBySql(String value)
    method filterKeyword (line 55) | public static void filterKeyword(String value)

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java
  class IdUtils (line 8) | public class IdUtils
    method randomUUID (line 15) | public static String randomUUID()
    method simpleUUID (line 25) | public static String simpleUUID()
    method fastUUID (line 35) | public static String fastUUID()
    method fastSimpleUUID (line 45) | public static String fastSimpleUUID()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java
  class Seq (line 10) | public class Seq
    method getId (line 32) | public static String getId()
    method getId (line 42) | public static String getId(String type)
    method getId (line 59) | public static String getId(AtomicInteger atomicInt, int length)
    method getSeq (line 72) | private synchronized static String getSeq(AtomicInteger atomicInt, int...

FILE: ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java
  class UUID (line 15) | public final class UUID implements java.io.Serializable, Comparable<UUID>
    class Holder (line 23) | private static class Holder
    method UUID (line 39) | private UUID(byte[] data)
    method UUID (line 62) | public UUID(long mostSigBits, long leastSigBits)
    method fastUUID (line 73) | public static UUID fastUUID()
    method randomUUID (line 83) | public static UUID randomUUID()
    method randomUUID (line 94) | public static UUID randomUUID(boolean isSecure)
    method nameUUIDFromBytes (line 114) | public static UUID nameUUIDFromBytes(byte[] name)
    method fromString (line 141) | public static UUID fromString(String name)
    method getLeastSignificantBits (line 171) | public long getLeastSignificantBits()
    method getMostSignificantBits (line 181) | public long getMostSignificantBits()
    method version (line 199) | public int version()
    method variant (line 218) | public int variant()
    method timestamp (line 241) | public long timestamp() throws UnsupportedOperationException
    method clockSequence (line 262) | public int clockSequence() throws UnsupportedOperationException
    method node (line 281) | public long node() throws UnsupportedOperationException
    method toString (line 311) | @Override
    method toString (line 341) | public String toString(boolean isSimple)
    method hashCode (line 379) | @Override
    method equals (line 395) | @Override
    method compareTo (line 419) | @Override
    method digits (line 440) | private static String digits(long val, int digits)
    method checkTimeBase (line 449) | private void checkTimeBase()
    method getSecureRandom (line 462) | public static SecureRandom getSecureRandom()
    method getRandom (line 480) | public static ThreadLocalRandom getRandom()

FILE: ruoyi-common/src/main/java/com/ruoyi/common/xss/XssFilter.java
  class XssFilter (line 21) | public class XssFilter implements Filter
    method init (line 28) | @Override
    method doFilter (line 42) | @Override
    method handleExcludeURL (line 57) | private boolean handleExcludeURL(HttpServletRequest request, HttpServl...
    method destroy (line 69) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/xss/XssHttpServletRequestWrapper.java
  class XssHttpServletRequestWrapper (line 12) | public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
    method XssHttpServletRequestWrapper (line 17) | public XssHttpServletRequestWrapper(HttpServletRequest request)
    method getParameterValues (line 22) | @Override

FILE: ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java
  class XssValidator (line 14) | public class XssValidator implements ConstraintValidator<Xss, String>
    method isValid (line 18) | @Override
    method containsHtml (line 28) | public static boolean containsHtml(String value)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
  class DataScopeAspect (line 25) | @Aspect
    method doBefore (line 34) | @Before("@annotation(controllerDataScope)")
    method handleDataScope (line 41) | protected void handleDataScope(final JoinPoint joinPoint, DataScope co...
    method dataScopeFilter (line 65) | public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, ...
    method clearDataScope (line 149) | private void clearDataScope(final JoinPoint joinPoint)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
  class DataSourceAspect (line 23) | @Aspect
    method dsPointCut (line 30) | @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)"
    method around (line 37) | @Around("dsPointCut()")
    method getDataSource (line 61) | public DataSource getDataSource(ProceedingJoinPoint point)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
  class LogAspect (line 38) | @Aspect
    method doBefore (line 56) | @Before(value = "@annotation(controllerLog)")
    method doAfterReturning (line 67) | @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "...
    method doAfterThrowing (line 79) | @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")
    method handleLog (line 85) | protected void handleLog(final JoinPoint joinPoint, Log controllerLog,...
    method getControllerMethodDescription (line 146) | public void getControllerMethodDescription(JoinPoint joinPoint, Log lo...
    method setRequestValue (line 173) | private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog, ...
    method excludePropertyPreFilter (line 195) | public PropertyPreFilters.MySimplePropertyPreFilter excludePropertyPre...
    method argsArrayToString (line 203) | private String argsArrayToString(Object[] paramsArray, String[] exclud...
    method isFilterObject (line 237) | @SuppressWarnings("rawtypes")

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/PermissionsAspect.java
  class PermissionsAspect (line 16) | @Aspect
    method doBefore (line 20) | @Before("@annotation(controllerRequiresPermissions)")
    method handleRequiresPermissions (line 26) | protected void handleRequiresPermissions(final JoinPoint joinPoint, Re...

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
  class ApplicationConfig (line 12) | @Configuration

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java
  class CaptchaConfig (line 15) | @Configuration
    method getKaptchaBean (line 18) | @Bean(name = "captchaProducer")
    method getKaptchaBeanMath (line 46) | @Bean(name = "captchaProducerMath")

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
  class DruidConfig (line 32) | @Configuration
    method masterDataSource (line 35) | @Bean
    method slaveDataSource (line 43) | @Bean
    method dataSource (line 52) | @Bean(name = "dynamicDataSource")
    method setDataSource (line 69) | public void setDataSource(Map<Object, Object> targetDataSources, Strin...
    method removeDruidFilterRegistrationBean (line 84) | @SuppressWarnings({ "rawtypes", "unchecked" })

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
  class FilterConfig (line 19) | @Configuration
    method xssFilterRegistration (line 29) | @SuppressWarnings({ "rawtypes", "unchecked" })

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java
  class I18nConfig (line 17) | @Configuration
    method localeResolver (line 20) | @Bean
    method localeChangeInterceptor (line 29) | @Bean
    method addInterceptors (line 38) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java
  class KaptchaTextCreator (line 12) | public class KaptchaTextCreator extends DefaultTextCreator
    method getText (line 16) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java
  class MyBatisConfig (line 32) | @Configuration
    method setTypeAliasesPackage (line 40) | public static String setTypeAliasesPackage(String typeAliasesPackage)
    method resolveMapperLocations (line 94) | public Resource[] resolveMapperLocations(String[] mapperLocations)
    method sqlSessionFactory (line 116) | @Bean

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
  class ResourcesConfig (line 19) | @Configuration
    method addViewControllers (line 34) | @Override
    method addResourceHandlers (line 40) | @Override
    method addInterceptors (line 53) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
  class ShiroConfig (line 47) | @Configuration
    method getEhCacheManager (line 149) | @Bean
    method getCacheManagerConfigFileInputStream (line 169) | protected InputStream getCacheManagerConfigFileInputStream()
    method userRealm (line 194) | @Bean
    method sessionDAO (line 206) | @Bean
    method sessionFactory (line 216) | @Bean
    method sessionManager (line 226) | @Bean
    method securityManager (line 252) | @Bean
    method logoutFilter (line 270) | public LogoutFilter logoutFilter()
    method csrfValidateFilter (line 280) | public CsrfValidateFilter csrfValidateFilter()
    method shiroFilterFactoryBean (line 291) | @Bean
    method onlineSessionFilter (line 344) | public OnlineSessionFilter onlineSessionFilter()
    method syncOnlineSessionFilter (line 355) | public SyncOnlineSessionFilter syncOnlineSessionFilter()
    method captchaValidateFilter (line 365) | public CaptchaValidateFilter captchaValidateFilter()
    method rememberMeCookie (line 376) | public SimpleCookie rememberMeCookie()
    method rememberMeManager (line 389) | public CustomCookieRememberMeManager rememberMeManager()
    method kickoutSessionFilter (line 407) | public KickoutSessionFilter kickoutSessionFilter()
    method shiroDialect (line 424) | @Bean
    method authorizationAttributeSourceAdvisor (line 433) | @Bean

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java
  class DruidProperties (line 12) | @Configuration
    method dataSource (line 54) | public DruidDataSource dataSource(DruidDataSource datasource)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java
  class DynamicDataSource (line 13) | public class DynamicDataSource extends AbstractRoutingDataSource
    method DynamicDataSource (line 15) | public DynamicDataSource(DataSource defaultTargetDataSource, Map<Objec...
    method determineCurrentLookupKey (line 22) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java
  class RepeatSubmitInterceptor (line 19) | @Component
    method preHandle (line 22) | @Override
    method isRepeatSubmit (line 54) | public abstract boolean isRepeatSubmit(HttpServletRequest request, Rep...

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
  class SameUrlDataInterceptor (line 18) | @Component
    method isRepeatSubmit (line 27) | @SuppressWarnings("unchecked")
    method compareParams (line 63) | private boolean compareParams(Map<String, Object> nowMap, Map<String, ...
    method compareTime (line 73) | private boolean compareTime(Map<String, Object> nowMap, Map<String, Ob...

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java
  class AsyncManager (line 14) | public class AsyncManager
    method AsyncManager (line 29) | private AsyncManager(){}
    method me (line 33) | public static AsyncManager me()
    method execute (line 43) | public void execute(TimerTask task)
    method shutdown (line 51) | public void shutdown()

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java
  class ShutdownManager (line 17) | @Component
    method destroy (line 28) | @PreDestroy
    method shutdownSpringSessionValidationScheduler (line 39) | private void shutdownSpringSessionValidationScheduler()
    method shutdownAsyncManager (line 58) | private void shutdownAsyncManager()
    method shutdownEhCacheManager (line 71) | private void shutdownEhCacheManager()

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
  class AsyncFactory (line 30) | public class AsyncFactory
    method syncSessionToDb (line 40) | public static TimerTask syncSessionToDb(final OnlineSession session)
    method recordOper (line 84) | public static TimerTask recordOper(final SysOperLog operLog)
    method recordLogininfor (line 107) | public static TimerTask recordLogininfor(final String username, final ...

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java
  class UserRealm (line 40) | public class UserRealm extends AuthorizingRealm
    method doGetAuthorizationInfo (line 56) | @Override
    method doGetAuthenticationInfo (line 86) | @Override
    method clearCachedAuthorizationInfo (line 138) | public void clearCachedAuthorizationInfo(Object principal)
    method clearAllCachedAuthorizationInfo (line 147) | public void clearAllCachedAuthorizationInfo()

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/rememberMe/CustomCookieRememberMeManager.java
  class CustomCookieRememberMeManager (line 21) | public class CustomCookieRememberMeManager extends CookieRememberMeManager
    method rememberIdentity (line 26) | @Override
    method getRememberedPrincipals (line 62) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysLoginService.java
  class SysLoginService (line 36) | @Component
    method login (line 54) | public SysUser login(String username, String password)
    method setRolePermission (line 158) | public void setRolePermission(SysUser user)
    method recordLoginInfo (line 180) | public void recordLoginInfo(Long userId)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysPasswordService.java
  class SysPasswordService (line 25) | @Component
    method init (line 36) | @PostConstruct
    method validate (line 42) | public void validate(SysUser user, String password)
    method matches (line 71) | public boolean matches(SysUser user, String newPassword)
    method clearLoginRecordCache (line 76) | public void clearLoginRecordCache(String loginName)
    method encryptPassword (line 81) | public String encryptPassword(String loginName, String password, Strin...

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysRegisterService.java
  class SysRegisterService (line 23) | @Component
    method register (line 35) | public String register(SysUser user)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysShiroService.java
  class SysShiroService (line 18) | @Component
    method deleteSession (line 32) | public void deleteSession(OnlineSession onlineSession)
    method getSession (line 43) | public Session getSession(Serializable sessionId)
    method createSession (line 49) | public Session createSession(SysUserOnline userOnline)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java
  class OnlineSessionDAO (line 21) | public class OnlineSessionDAO extends EnterpriseCacheSessionDAO
    method OnlineSessionDAO (line 37) | public OnlineSessionDAO()
    method OnlineSessionDAO (line 42) | public OnlineSessionDAO(long expireTime)
    method doReadSession (line 53) | @Override
    method update (line 59) | @Override
    method syncToDb (line 68) | public void syncToDb(OnlineSession onlineSession)
    method doDelete (line 107) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java
  class OnlineSessionFactory (line 24) | @Component
    method createSession (line 29) | public Session createSession(SysUserOnline userOnline)
    method createSession (line 61) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/util/AuthorizationUtils.java
  class AuthorizationUtils (line 12) | public class AuthorizationUtils
    method clearAllCachedAuthorizationInfo (line 17) | public static void clearAllCachedAuthorizationInfo()
    method getUserRealm (line 25) | public static UserRealm getUserRealm()

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/CustomShiroFilterFactoryBean.java
  class CustomShiroFilterFactoryBean (line 21) | public class CustomShiroFilterFactoryBean extends ShiroFilterFactoryBean
    method getObjectType (line 23) | @Override
    method createInstance (line 29) | @Override
    class MySpringShiroFilter (line 67) | private static final class MySpringShiroFilter extends AbstractShiroFi...
      method MySpringShiroFilter (line 69) | protected MySpringShiroFilter(WebSecurityManager webSecurityManager,...

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java
  class LogoutFilter (line 24) | public class LogoutFilter extends org.apache.shiro.web.filter.authc.Logo...
    method getLoginUrl (line 33) | public String getLoginUrl()
    method setLoginUrl (line 38) | public void setLoginUrl(String loginUrl)
    method preHandle (line 43) | @Override
    method getRedirectUrl (line 80) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java
  class CaptchaValidateFilter (line 17) | public class CaptchaValidateFilter extends AccessControlFilter
    method setCaptchaEnabled (line 29) | public void setCaptchaEnabled(boolean captchaEnabled)
    method setCaptchaType (line 34) | public void setCaptchaType(String captchaType)
    method onPreHandle (line 39) | @Override
    method isAccessAllowed (line 47) | @Override
    method validateResponse (line 60) | public boolean validateResponse(HttpServletRequest request, String val...
    method onAccessDenied (line 73) | @Override

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/csrf/CsrfValidateFilter.java
  class CsrfValidateFilter (line 20) | public class CsrfValidateFilter extends AccessControlFilter
    method isAccessAllowed (line 27) | @Override
    method validateResponse (line 43) | public boolean validateResponse(HttpServletRequest request, String req...
    method onAccessDenied (line 54) | @Override
    method isAllowMethod (line 61) | private boolean isAllowMethod(HttpServletRequest request)
    method getCsrfWhites (line 67) | public List<String> getCsrfWhites()
    method setCsrfWhites (line 72) | public void setCsrfWhites(List<String> csrfWhites)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/kickout/KickoutSessionFilter.java
  class KickoutSessionFilter (line 31) | public class KickoutSessionFilter extends AccessControlFilter
    method isAccessAllowed (line 53) | @Override
    method onAccessDenied (line 60) | @Override
    method isAjaxResponse (line 134) | private boolean isAjaxResponse(ServletRequest request, ServletResponse...
    method setMaxSession (line 150) | public void setMaxSession(int maxSession)
    method setKickoutAfter (line 155) | public void setKickoutAfter(boolean kickoutAfter)
    method setKickoutUrl (line 160) | public void setKickoutUrl(String kickoutUrl)
    method setSessionManager (line 165) | public void setSessionManager(SessionManager sessionManager)
    method setCacheManager (line 171) | public void setCacheManager(CacheManager cacheManager)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java
  class OnlineSessionFilter (line 23) | public class OnlineSessionFilter extends AccessControlFilter
    method isAccessAllowed (line 36) | @Override
    method onAccessDenied (line 77) | @Override
    method redirectToLogin (line 90) | @Override
    method setOnlineSessionDAO (line 96) | public void setOnlineSessionDAO(OnlineSessionDAO onlineSessionDAO)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java
  class SyncOnlineSessionFilter (line 15) | public class SyncOnlineSessionFilter extends PathMatchingFilter
    method onPreHandle (line 22) | @Override
    method setOnlineSessionDAO (line 35) | public void setOnlineSessionDAO(OnlineSessionDAO onlineSessionDAO)

FILE: ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java
  class OnlineWebSessionManager (line 29) | public class OnlineWebSessionManager extends DefaultWebSessionManager
    method setAttribute (line 33) | @Override
    method needMarkAttributeChanged (line 44) | private boolean needMarkAttributeChanged(Object attributeKey)
    method removeAttribute (line 67) | @Override
    method getOnlineSession (line 80) | public OnlineSession getOnlineSession(SessionKey sessionKey)
    method validateSessions (line 95) | @Override
   
Condensed preview — 574 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,116K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 53,
    "preview": "custom: http://doc.ruoyi.vip/ruoyi/other/donate.html\n"
  },
  {
    "path": ".gitignore",
    "chars": 653,
    "preview": "######################################################################\n# Build Tools\n\n.gradle\n/build/\n!gradle/wrapper/gr"
  },
  {
    "path": "LICENSE",
    "chars": 1090,
    "preview": "The MIT License (MIT)\r\n\r\nCopyright (c) 2018 RuoYi\r\n\r\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "README.md",
    "chars": 8573,
    "preview": "<p align=\"center\">\r\n\t<img alt=\"logo\" src=\"https://oscimg.oschina.net/oscnet/up-dd77653d7c9f197dd9d93684f3c8dcfbab6.png\">"
  },
  {
    "path": "bin/clean.bat",
    "chars": 82,
    "preview": "@echo off\necho.\necho [Ϣ] target·\necho.\n\n%~d0\ncd %~dp0\n\ncd ..\ncall mvn clean\n\npause"
  },
  {
    "path": "bin/package.bat",
    "chars": 118,
    "preview": "@echo off\necho.\necho [Ϣ] Weḅwar/jarļ\necho.\n\n%~d0\ncd %~dp0\n\ncd ..\ncall mvn clean package -Dmaven.test.skip=true\n\npause"
  },
  {
    "path": "bin/run.bat",
    "chars": 210,
    "preview": "@echo off\necho.\necho [Ϣ] ʹJarWeb̡\necho.\n\ncd %~dp0\ncd ../ruoyi-admin/target\n\nset JAVA_OPTS=-Xms256m -Xmx1024m -XX:Metaspa"
  },
  {
    "path": "pom.xml",
    "chars": 9497,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "ruoyi-admin/pom.xml",
    "chars": 4411,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java",
    "chars": 1175,
    "preview": "package com.ruoyi;\r\n\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure."
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java",
    "chars": 481,
    "preview": "package com.ruoyi;\r\n\r\nimport org.springframework.boot.builder.SpringApplicationBuilder;\r\nimport org.springframework.boot"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java",
    "chars": 5835,
    "preview": "package com.ruoyi.web.controller.common;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport jakarta.servlet."
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoDialogController.java",
    "chars": 1681,
    "preview": "package com.ruoyi.web.controller.demo.controller;\r\n\r\nimport org.springframework.stereotype.Controller;\r\nimport org.sprin"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoFormController.java",
    "chars": 13575,
    "preview": "package com.ruoyi.web.controller.demo.controller;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport org.spr"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoIconController.java",
    "chars": 719,
    "preview": "package com.ruoyi.web.controller.demo.controller;\r\n\r\nimport org.springframework.stereotype.Controller;\r\nimport org.sprin"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoOperateController.java",
    "chars": 12029,
    "preview": "package com.ruoyi.web.controller.demo.controller;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.LinkedHashMap;\r\nimpor"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoReportController.java",
    "chars": 975,
    "preview": "package com.ruoyi.web.controller.demo.controller;\r\n\r\nimport org.springframework.stereotype.Controller;\r\nimport org.sprin"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java",
    "chars": 31970,
    "preview": "package com.ruoyi.web.controller.demo.controller;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java."
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/CustomerModel.java",
    "chars": 2051,
    "preview": "package com.ruoyi.web.controller.demo.domain;\r\n\r\nimport java.util.List;\r\nimport org.apache.commons.lang3.builder.ToStrin"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/GoodsModel.java",
    "chars": 1680,
    "preview": "package com.ruoyi.web.controller.demo.domain;\r\n\r\nimport java.util.Date;\r\nimport org.apache.commons.lang3.builder.ToStrin"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/domain/UserOperateModel.java",
    "chars": 3152,
    "preview": "package com.ruoyi.web.controller.demo.domain;\r\n\r\nimport java.util.Date;\r\nimport com.ruoyi.common.annotation.Excel;\r\nimpo"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java",
    "chars": 2951,
    "preview": "package com.ruoyi.web.controller.monitor;\r\n\r\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\r\nimport org.s"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/DruidController.java",
    "chars": 692,
    "preview": "package com.ruoyi.web.controller.monitor;\r\n\r\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\r\nimport org.s"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java",
    "chars": 909,
    "preview": "package com.ruoyi.web.controller.monitor;\r\n\r\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\r\nimport org.s"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java",
    "chars": 3140,
    "preview": "package com.ruoyi.web.controller.monitor;\r\n\r\nimport java.util.List;\r\nimport com.ruoyi.framework.shiro.service.SysPasswor"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java",
    "chars": 2992,
    "preview": "package com.ruoyi.web.controller.monitor;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPe"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java",
    "chars": 3148,
    "preview": "package com.ruoyi.web.controller.monitor;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.Logical;\r\n"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysCaptchaController.java",
    "chars": 3010,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.awt.image.BufferedImage;\r\nimport java.io.IOException;\r\nimport ja"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java",
    "chars": 4638,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPer"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java",
    "chars": 6328,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPer"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java",
    "chars": 3856,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPer"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java",
    "chars": 5657,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPer"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java",
    "chars": 6503,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\nimport jakarta.servlet.http."
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java",
    "chars": 2586,
    "preview": "package com.ruoyi.web.controller.system;\n\nimport jakarta.servlet.http.HttpServletRequest;\nimport jakarta.servlet.http.Ht"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java",
    "chars": 6079,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPer"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java",
    "chars": 5018,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPer"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java",
    "chars": 4619,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport org.apache.shiro.authz.annotation.RequiresPer"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java",
    "chars": 6228,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\nimport org.spring"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java",
    "chars": 1409,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.s"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java",
    "chars": 10243,
    "preview": "package com.ruoyi.web.controller.system;\n\nimport java.util.List;\nimport org.apache.shiro.authz.annotation.RequiresPermis"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java",
    "chars": 12286,
    "preview": "package com.ruoyi.web.controller.system;\r\n\r\nimport java.util.List;\r\nimport java.util.stream.Collectors;\r\nimport org.apac"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/BuildController.java",
    "chars": 676,
    "preview": "package com.ruoyi.web.controller.tool;\r\n\r\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\r\nimport org.spri"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java",
    "chars": 654,
    "preview": "package com.ruoyi.web.controller.tool;\r\n\r\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\r\nimport org.spri"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java",
    "chars": 4543,
    "preview": "package com.ruoyi.web.controller.tool;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.LinkedHashMap;\r\nimport java.util"
  },
  {
    "path": "ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java",
    "chars": 1826,
    "preview": "package com.ruoyi.web.core.config;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springf"
  },
  {
    "path": "ruoyi-admin/src/main/resources/application-druid.yml",
    "chars": 2036,
    "preview": "# 数据源配置\r\nspring:\r\n    datasource:\r\n        type: com.alibaba.druid.pool.DruidDataSource\r\n        driverClassName: com.my"
  },
  {
    "path": "ruoyi-admin/src/main/resources/application.yml",
    "chars": 3140,
    "preview": "# 项目相关配置\r\nruoyi:\r\n  # 名称\r\n  name: RuoYi\r\n  # 版本\r\n  version: 4.8.2\r\n  # 版权年份\r\n  copyrightYear: 2026\r\n  # 实例演示开关\r\n  demoEn"
  },
  {
    "path": "ruoyi-admin/src/main/resources/banner.txt",
    "chars": 1612,
    "preview": "Application Version: ${ruoyi.version}\r\nSpring Boot Version: ${spring-boot.version}\r\n////////////////////////////////////"
  },
  {
    "path": "ruoyi-admin/src/main/resources/ehcache/ehcache-shiro.xml",
    "chars": 2766,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<ehcache name=\"ruoyi\" updateCheck=\"false\">\r\n\r\n    <!-- 磁盘缓存位置 -->\r\n    <diskStor"
  },
  {
    "path": "ruoyi-admin/src/main/resources/logback.xml",
    "chars": 3490,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<configuration>\r\n    <!-- 日志存放路径 -->\r\n\t<property name=\"log.path\" value=\"/home/ru"
  },
  {
    "path": "ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml",
    "chars": 796,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE configuration\nPUBLIC \"-//mybatis.org//DTD Config 3.0//EN\"\n\"http://myba"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/beautifyhtml/beautifyhtml.js",
    "chars": 25772,
    "preview": "/*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */\r\n/*\r\n\r\n  The MIT License (MIT)\r\n\r\n  Copyright (c) 2007"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/blockUI/jquery.blockUI.js",
    "chars": 20633,
    "preview": "/*!\r\n * jQuery blockUI plugin\r\n * Version 2.70.0-2014.11.23\r\n * Requires jQuery v1.7 or later\r\n *\r\n * Examples at: http"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-fileinput/fileinput.css",
    "chars": 13646,
    "preview": "/*!\r\n * bootstrap-fileinput v5.5.4\r\n * http://plugins.krajee.com/file-input\r\n *\r\n * Krajee default styling for bootstrap"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-fileinput/fileinput.js",
    "chars": 267289,
    "preview": "/*!\n * bootstrap-fileinput v5.5.4\n * http://plugins.krajee.com/file-input\n *\n * Author: Kartik Visweswaran\n * Copyright:"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-select/bootstrap-select.css",
    "chars": 13344,
    "preview": "/*!\r\n * Bootstrap-select v1.13.18 (https://developer.snapappointments.com/bootstrap-select)\r\n *\r\n * Copyright 2012-2020 "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-select/bootstrap-select.js",
    "chars": 119217,
    "preview": "/*!\r\n * Bootstrap-select v1.13.18 (https://developer.snapappointments.com/bootstrap-select)\r\n *\r\n * Copyright 2012-2020 "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.js",
    "chars": 2555,
    "preview": "/**\r\n * @author: Alec Fenichel\r\n * @webSite: https://fenichelar.com\r\n * @update: zhixin wen <wenzhixin2010@gmail.com>\r\n "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.js",
    "chars": 30145,
    "preview": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * @github: bootstrap-table/dist/extensions/fixed-columns/bootstrap-"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/cookie/bootstrap-table-cookie.js",
    "chars": 20400,
    "preview": "/**\n * @author: Dennis Hernández\n * @update zhixin wen <wenzhixin2010@gmail.com>\n */\nvar Utils = $.fn.bootstrapTable.uti"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/custom-view/bootstrap-table-custom-view.js",
    "chars": 3875,
    "preview": "/**\n * @author: Dustin Utecht\n * @github: https://github.com/UtechtDustin\n */\n\nvar Utils = $.fn.bootstrapTable.utils\n\nOb"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-editable.css",
    "chars": 22148,
    "preview": "/*! X-editable - v1.5.3 \r\n* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery\r\n* http://github.com/vital"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js",
    "chars": 5761,
    "preview": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * extensions: https://github.com/vitalets/x-editable\n */\n\nvar Utils"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js",
    "chars": 9093,
    "preview": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * extensions: https://github.com/hhurz/tableExport.jquery.plugin\n *"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js",
    "chars": 3046,
    "preview": "/**\n * @author: Dennis Hernández\n * @update zhixin wen <wenzhixin2010@gmail.com>\n */\n\nconst debounce = (func, wait) => {"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/print/bootstrap-table-print.js",
    "chars": 8396,
    "preview": "/**\n * @update zhixin wen <wenzhixin2010@gmail.com>\n */\n\nvar Utils = $.fn.bootstrapTable.utils\n\nfunction printPageBuilde"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js",
    "chars": 5537,
    "preview": "/**\r\n * @author: Dennis Hernández\r\n * @update: https://github.com/wenzhixin\r\n * @version: v1.2.0\r\n */\r\n\r\n$.akottr.dragta"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-columns/jquery.dragtable.js",
    "chars": 7590,
    "preview": "/**\r\n * Minified by jsDelivr using Terser v5.3.5.\r\n * Original file: /gh/akottr/dragtable@master/jquery.dragtable.js\r\n *"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js",
    "chars": 4007,
    "preview": "/**\n * @author: Dennis Hernández\n * @update zhixin wen <wenzhixin2010@gmail.com>\n */\n\nconst rowAttr = (row, index) => ({"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/reorder-rows/jquery.tablednd.js",
    "chars": 23958,
    "preview": "/**\n * TableDnD plug-in for JQuery, allows you to drag and drop table rows\n * You can set up various options to control "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js",
    "chars": 1385,
    "preview": "/**\r\n * @author: Dennis Hernández\r\n * @version: v2.0.0\r\n */\r\n\r\nconst isInit = that => that.$el.data('resizableColumns') "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.js",
    "chars": 49046,
    "preview": "/**\n * 基于bootstrapTreeTable/bootstrap-table-treegrid修改\n * Copyright (c) 2019 ruoyi\n */\n(function($) {\n    \"use strict\";\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.js",
    "chars": 3401,
    "preview": "/**\r\n * Bootstrap Table Chinese translation\r\n * Author: Zhixin Wen<wenzhixin2010@gmail.com>\r\n */\r\n$.fn.bootstrapTable.lo"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/cropper/cropper.css",
    "chars": 4657,
    "preview": "/*!\n * Cropper.js v1.5.12\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Rele"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/cropper/cropper.js",
    "chars": 113923,
    "preview": "/*!\n * Cropper.js v1.5.12\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Rele"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/cxselect/jquery.cxselect.js",
    "chars": 12706,
    "preview": "/*!\r\n * jQuery cxSelect\r\n * @name jquery.cxselect.js\r\n * @version 1.4.2\r\n * @date 2017-09-26\r\n * @author ciaoca\r\n * @ema"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datetimepicker.css",
    "chars": 12339,
    "preview": "/*!\n * Datetimepicker for Bootstrap\n *\n * Copyright 2012 Stefan Petre\n * Improvements by Andrew Rowls\n * Licensed under "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datetimepicker.js",
    "chars": 70651,
    "preview": "/* =========================================================\n * bootstrap-datetimepicker.js\n * ========================"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/duallistbox/bootstrap-duallistbox.css",
    "chars": 1982,
    "preview": "/*\n *  Bootstrap Duallistbox - v3.0.9\n *  A responsive dual listbox widget optimized for Twitter Bootstrap. It works on "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/duallistbox/bootstrap-duallistbox.js",
    "chars": 32648,
    "preview": "/*\r\n *  Bootstrap Duallistbox - v3.0.9\r\n *  A responsive dual listbox widget optimized for Twitter Bootstrap. It works o"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/flot/curvedLines.js",
    "chars": 12370,
    "preview": "/* The MIT License\n\n Copyright (c) 2011 by Michael Zinsmaier and nergal.dev\n Copyright (c) 2012 by Thomas Ritou\n\n Permis"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.js",
    "chars": 104603,
    "preview": "/*! Javascript plotting library for jQuery, v. 0.7.\n *\n * Released under the MIT license by IOLA, December 2007.\n *\n */\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.pie.js",
    "chars": 21501,
    "preview": "/*\nFlot plugin for rendering pie charts. The plugin assumes the data is\ncoming is as a single data value for each series"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.resize.js",
    "chars": 2484,
    "preview": "/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laurs"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.spline.js",
    "chars": 6252,
    "preview": "/**\n * Flot plugin that provides spline interpolation for line graphs\n * author: Alex Bardas < alex.bardas@gmail.com >\n "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/flot/jquery.flot.symbol.js",
    "chars": 2497,
    "preview": "/* Flot plugin that adds some extra symbols for plotting points.\n\n Copyright (c) 2007-2014 IOLA and Ole Laursen.\n Licens"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/fullscreen/jquery.fullscreen.js",
    "chars": 6373,
    "preview": "/**\r\n * 基于jQuery FullScreen修改\r\n * 新增支持IE全屏显示\r\n * Copyright (c) 2019 ruoyi\r\n */\r\n(function(jQuery) {\r\n    \r\n    /**\r\n    "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/custom.css",
    "chars": 1957,
    "preview": "/* iCheck plugin Square skin, green\r\n----------------------------------- */\r\n.icheckbox_square-green,\r\n.iradio_square-gr"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jasny/jasny-bootstrap.css",
    "chars": 16239,
    "preview": "/*!\n * Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)\n * Copyright 2012-2014 Arnold Daniels\n * Licensed under"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jasny/jasny-bootstrap.js",
    "chars": 9838,
    "preview": "/*!\n * Jasny Bootstrap v4.0.0 (http://jasny.github.io/bootstrap)\n * Copyright 2012-2014 Arnold Daniels\n * Licensed under"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.css",
    "chars": 2956,
    "preview": ".ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-layout-pane{overflow:auto}.ui-layout-content{padding:10"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.js",
    "chars": 88914,
    "preview": "(function($){var min=Math.min,max=Math.max,round=Math.floor,isStr=function(v){return $.type(v)===\"string\"},runPluginCall"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/zTreeStyle.css",
    "chars": 6645,
    "preview": "/*-------------------------------------\r\nzTree Style\r\n\r\nversion:\t3.4\r\nauthor:\t\tHunter.z\r\nemail:\t\thunter.z@263.net\r\nwebsi"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css",
    "chars": 7564,
    "preview": "/*-------------------------------------\r\nzTree Style\r\n\r\nversion:    3.4\r\nauthor:     Hunter.z\r\nemail:      hunter.z@263."
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/zTreeStyle.css",
    "chars": 7975,
    "preview": "/*-------------------------------------\r\nzTree Style\r\n\r\nversion:    3.4\r\nauthor:     Hunter.z\r\nemail:      hunter.z@263."
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js",
    "chars": 132556,
    "preview": "\r\n/*\r\n * JQuery zTree core 3.5.12\r\n * http://zTree.me/\r\n *\r\n * Copyright (c) 2010 Hunter.z\r\n *\r\n * Licensed same as jque"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js",
    "chars": 56682,
    "preview": "/*\r\n * JQuery zTree core 3.5.12\r\n * http://zTree.me/\r\n *\r\n * Copyright (c) 2010 Hunter.z\r\n *\r\n * Licensed same as jquery"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js",
    "chars": 21949,
    "preview": "/*\r\n * JQuery zTree excheck 3.5.12\r\n * http://zTree.me/\r\n *\r\n * Copyright (c) 2010 Hunter.z\r\n *\r\n * Licensed same as jqu"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exedit-3.5.js",
    "chars": 43373,
    "preview": "/*\r\n * JQuery zTree exedit 3.5.12\r\n * http://zTree.me/\r\n *\r\n * Copyright (c) 2010 Hunter.z\r\n *\r\n * Licensed same as jque"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exhide-3.5.js",
    "chars": 10542,
    "preview": "/*\r\n * JQuery zTree exHideNodes 3.5.12\r\n * http://zTree.me/\r\n *\r\n * Copyright (c) 2010 Hunter.z\r\n *\r\n * Licensed same as"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/log v3.x.txt",
    "chars": 8569,
    "preview": "=ZTree v3.x (JQuery Tree插件) 更新日志=\r\n\r\n<font color=\"red\">为了更好的优化及扩展zTree, 因此决定升级为v3.x,并且对之前的v2.x不兼容,会有很多结构上的修改,对此深感无奈与抱歉,"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jsonview/jquery.jsonview.css",
    "chars": 1159,
    "preview": "@charset \"UTF-8\";\n.jsonview {\n  font-family: monospace;\n  font-size: 1.1em;\n  white-space: pre-wrap; }\n  .jsonview .prop"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/jsonview/jquery.jsonview.js",
    "chars": 8036,
    "preview": "(function(jQuery) {\n  var $, Collapser, JSONFormatter, JSONView;\n  JSONFormatter = (function() {\n    function JSONFormat"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/layer/css/layer.css",
    "chars": 20034,
    "preview": "html #layuicss-layer{display: none; position: absolute; width: 1989px;}\n\n/* common */\n.layui-layer-shade, .layui-layer{p"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/moon/style.css",
    "chars": 5391,
    "preview": "/**\n * layer皮肤\n * Copyright (c) 2019 ruoyi\n */\nhtml #layui_layer_skinmoonstylecss {\n\tdisplay: none;\n\tposition: absolute;"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate.css",
    "chars": 8075,
    "preview": "/*! laydate-v5.5.0 日期与时间组件 */\n@font-face{font-family: 'laydate-icon';src: url('../../../../../fonts/iconfont.woff?v=282'"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/layui/modules/laydate.js",
    "chars": 54604,
    "preview": "/*! laydate-v5.5.0 日期与时间组件 */\r\n!function(window){var MOD_NAME=\"lay\";var document=window.document;var lay=function(select"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/select2/select2.css",
    "chars": 17358,
    "preview": ".select2-container {\n  box-sizing: border-box;\n  display: inline-block;\n  margin: 0;\n  position: relative;\n  vertical-al"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/select2/select2.js",
    "chars": 153460,
    "preview": "/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/se"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/suggest/bootstrap-suggest.js",
    "chars": 32812,
    "preview": "/**\r\n * bootstrap-suggest-plugin - v0.1.29\r\n * @description 这是一个基于 bootstrap 按钮式下拉菜单组件的搜索建议插件,必须使用于按钮式下拉菜单组件上。\r\n * @auth"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.js",
    "chars": 3643,
    "preview": "(function ($) {\n  $.extend($.summernote.lang, {\n    'zh-CN': {\n      font: {\n        bold: '粗体',\n        italic: '斜体',\n "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.css",
    "chars": 19405,
    "preview": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js",
    "chars": 332894,
    "preview": "/*!\n * \n * Super simple wysiwyg editor v0.8.18\n * https://summernote.org\n * \n * \n * Copyright 2013- Alan Hong. and other"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/typeahead/bootstrap-typeahead.js",
    "chars": 29233,
    "preview": "/* =============================================================\r\n * bootstrap3-typeahead.js v4.0.2\r\n * https://github.c"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js",
    "chars": 5257,
    "preview": "/*this is basic form validation using for validation person's basic information author:Clara Guo data:2017/07/20*/\r\n$(do"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ajax/libs/validate/messages_zh.js",
    "chars": 947,
    "preview": "/*\r\n * Translated default messages for the jQuery validation plugin.\r\n * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)\r\n *"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/css/login.css",
    "chars": 3896,
    "preview": "html {\r\n\theight:100%\r\n}\r\nbody.signin {\r\n\theight:auto;\r\n\tbackground:url(../img/login-background.jpg) no-repeat center fix"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/css/skins.css",
    "chars": 23207,
    "preview": "/*\n *\n *   SKIN blue 若依管理系统\n *   NAME - blue/green/purple/red/yellow\n *\n*/\n.nav-tabs {\n    border-bottom: 0px;\n}\n\n.navb"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/css/style.css",
    "chars": 139521,
    "preview": "h1, h2, h3, h4, h5, h6 {\r\n    font-weight: 100;\r\n}\r\n\r\nh1 {\r\n    font-size: 30px;\r\n}\r\n\r\nh2 {\r\n    font-size: 24px;\r\n}\r\n\r\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/css/zen-checkbox.css",
    "chars": 4127,
    "preview": "@font-face {\n\tfont-family:ZenIcon;src:url(../fonts/zenicon.woff?v=2.2.0) format('woff')\n}\n\n.checkbox-primary,.radio-prim"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/file/rml.txt",
    "chars": 6,
    "preview": "下载临时目录"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/html/ie.html",
    "chars": 23052,
    "preview": "\r\n<!DOCTYPE html>\r\n<html lang=\"zh-CN\">\r\n<head>\r\n    <meta charset=\"UTF-8\" />\r\n    <title>请升级您的浏览器</title>\r\n    <meta htt"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/i18n/messages.properties",
    "chars": 1128,
    "preview": "#错误消息\r\nnot.null=* 必须填写\r\nuser.jcaptcha.error=验证码错误\r\nuser.not.exists=用户不存在/密码错误\r\nuser.password.not.match=用户不存在/密码错误\r\nuser."
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/js/cron.js",
    "chars": 22663,
    "preview": "$().ready(function () {\r\n    $(\"#unrunBtn\").click(function () {\r\n        var str = $(\"#cron\").val();\r\n        var str_ar"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/js/jquery.tmpl.js",
    "chars": 19815,
    "preview": "/*!\r\n * jQuery Templates Plugin 1.0.0pre\r\n * http://github.com/jquery/jquery-tmpl\r\n * Requires jQuery 1.4.2\r\n *\r\n * Copy"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js",
    "chars": 3265,
    "preview": "/*\r\n * metismenu - v2.0.2\r\n * A jQuery menu plugin\r\n * https://github.com/onokumus/metisMenu\r\n *\r\n * Made by Osman Nuri "
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/js/resize-tabs.js",
    "chars": 3765,
    "preview": "(function(c,a,e){var b,d=\"resizeTabs\",f={navSelector:\".nav-tabs\",itemSelector:\">li\",dropdownSelector:\">.dropdown\",dropdo"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css",
    "chars": 27490,
    "preview": "/**\r\n * 通用css样式布局处理\r\n * Copyright (c) 2019 ruoyi\r\n */\r\n\r\n/** 基础通用 **/\r\n.pt5 {\r\n\tpadding-top: 5px;\r\n}\r\n.pr5 {\r\n\tpadding-r"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ruoyi/index.js",
    "chars": 23551,
    "preview": "/**\n * 首页方法封装处理\n * Copyright (c) 2019 ruoyi\n */\nvar isMobile = false;\nvar sidebarHeight = isMobile ? '100%' : '96%';\n\n$("
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ruoyi/js/common.js",
    "chars": 20519,
    "preview": "/**\n * 通用方法封装处理\n * Copyright (c) 2019 ruoyi \n */\n\nvar startLayDate;\nvar endLayDate;\nvar isScrollToTop = parent.isScrollT"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js",
    "chars": 82986,
    "preview": "/**\n * 通用js方法封装处理\n * Copyright (c) 2019 ruoyi\n */\n\n// 当前table相关信息\nvar table = {\n    config: {},\n    // 当前实例配置\n    option"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ruoyi/login.js",
    "chars": 2851,
    "preview": "\r\n$(function() {\r\n    validateKickout();\r\n    validateRule();\r\n    $('.imgcode').click(function() {\r\n        var url = c"
  },
  {
    "path": "ruoyi-admin/src/main/resources/static/ruoyi/register.js",
    "chars": 2553,
    "preview": "\r\n$(function() {\r\n    validateRule();\r\n    $('.imgcode').click(function() {\r\n        var url = ctx + \"captcha/captchaIma"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/autocomplete.html",
    "chars": 14334,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('搜索自动补全')\" />\r\n</head>\r\n<body class="
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/basic.html",
    "chars": 33812,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('基本表单')\" />\r\n</head>\r\n<body class=\"g"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/button.html",
    "chars": 33998,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('按钮')\" />\r\n</head>\r\n<body class=\"gra"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/cards.html",
    "chars": 14725,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n\t<th:block th:include=\"include :: header('卡片列表')\" />\n</head>\n<body class=\"gray-b"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/cxselect.html",
    "chars": 5973,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('多级联动下拉')\" />\r\n</head>\r\n<body class="
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/datetime.html",
    "chars": 10927,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('日期和时间')\" />\r\n\t<th:block th:include="
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/duallistbox.html",
    "chars": 3010,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('左右互选组件')\" />\r\n\t<th:block th:include"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/grid.html",
    "chars": 21465,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('栅格')\" />\r\n</head>\r\n<body class=\"gra"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/invoice.html",
    "chars": 5292,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('单据打印')\" />\r\n</head>\r\n<body class=\"g"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/jasny.html",
    "chars": 7036,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('功能扩展')\" />\r\n\t<th:block th:include=\""
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/labels_tips.html",
    "chars": 12164,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('标签 & 提示')\" />\r\n</head>\r\n<body class"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/localrefresh.html",
    "chars": 1654,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n<th:block th:include=\"include :: header('局部刷新')\" />\r\n</head>\r\n<body class=\"gr"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/progress_bars.html",
    "chars": 4639,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('进度条')\" />\r\n</head>\r\n<body class=\"gr"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/select.html",
    "chars": 7519,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('下拉框')\" />\r\n\t<th:block th:include=\"i"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/sortable.html",
    "chars": 10929,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('拖动排序')\" />\r\n</head>\r\n<body class=\"g"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/summernote.html",
    "chars": 3923,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n\t<th:block th:include=\"include :: header('Summernote富文本编辑器')\" />\n\t<th:block th:i"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/tabs_panels.html",
    "chars": 18147,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('选项卡 & 面板')\" />\r\n</head>\r\n<body clas"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/timeline.html",
    "chars": 5095,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/upload.html",
    "chars": 3240,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('文件上传')\" />\r\n\t<th:block th:include=\""
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/validate.html",
    "chars": 9200,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('表单校验')\" />\r\n</head>\r\n<body class=\"g"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/form/wizard.html",
    "chars": 13639,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n<th:block th:include=\"include :: header('表单向导')\" />\r\n<th:block th:include=\"in"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/icon/fontawesome.html",
    "chars": 138599,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('fontawesome图标')\" />\r\n\t<style type=\""
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/icon/glyphicons.html",
    "chars": 78429,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('glyphicons图标')\" />\r\n</head>\r\n<body "
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/dialog.html",
    "chars": 12765,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('模态窗口')\" />\r\n</head>\r\n<body class=\"g"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/form.html",
    "chars": 4617,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" >\r\n<head>\r\n\t<th:block th:include=\"include :: header"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/layer.html",
    "chars": 10636,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('弹层组件')\" />\r\n\t<style>\r\n        /* 解决"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/table/check.html",
    "chars": 2383,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/table/frame1.html",
    "chars": 1723,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/table/frame2.html",
    "chars": 831,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/table/parent.html",
    "chars": 3040,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/table/radio.html",
    "chars": 2380,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/modal/table.html",
    "chars": 4159,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n<head>\r\n\t<th:block th:include=\"include :: header('弹层表格')\" />\r\n</head>\r\n<body class=\"g"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/operate/add.html",
    "chars": 2670,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" >\r\n<head>\r\n\t<th:block th:include=\"include :: header"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/operate/detail.html",
    "chars": 2205,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" >\r\n<head>\r\n\t<th:block th:include=\"include :: header"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/operate/edit.html",
    "chars": 2868,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" >\r\n<head>\r\n\t<th:block th:include=\"include :: header"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/operate/other.html",
    "chars": 3005,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/operate/table.html",
    "chars": 4468,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/report/echarts.html",
    "chars": 60319,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/report/metrics.html",
    "chars": 18428,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/report/peity.html",
    "chars": 9062,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/report/sparkline.html",
    "chars": 9972,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/asynTree.html",
    "chars": 3079,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/button.html",
    "chars": 2656,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/child.html",
    "chars": 3281,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/cookie.html",
    "chars": 2225,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/curd.html",
    "chars": 5360,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/customView.html",
    "chars": 4011,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/data.html",
    "chars": 2134,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/detail.html",
    "chars": 2459,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/dynamicColumns.html",
    "chars": 3964,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/editable.html",
    "chars": 3594,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/event.html",
    "chars": 4092,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/export.html",
    "chars": 2525,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/exportSelected.html",
    "chars": 3918,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/fixedColumns.html",
    "chars": 3343,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/footer.html",
    "chars": 2710,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/groupHeader.html",
    "chars": 2422,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/headerStyle.html",
    "chars": 2568,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/image.html",
    "chars": 2229,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/multi.html",
    "chars": 7451,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/other.html",
    "chars": 3285,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/pageGo.html",
    "chars": 2163,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/params.html",
    "chars": 4392,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/print.html",
    "chars": 3833,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">\n"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/refresh.html",
    "chars": 2323,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/remember.html",
    "chars": 2489,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  },
  {
    "path": "ruoyi-admin/src/main/resources/templates/demo/table/reorderColumns.html",
    "chars": 2364,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\" xmlns:th=\"http://www.thymeleaf.org\" xmlns:shiro=\"http://www.pollix.at/thymeleaf/shiro\">"
  }
]

// ... and 374 more files (download for full content)

About this extraction

This page contains the full source code of the yangzongzhuan/RuoYi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 574 files (5.4 MB), approximately 1.4M tokens, and a symbol index with 3531 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!