├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── sql ├── quartz.sql ├── ry_20230223.sql └── tool_excel.sql ├── src ├── controller │ ├── chat_controller.rs │ ├── common_controller.rs │ ├── dept_controller.rs │ ├── dict_controller.rs │ ├── excel_controller.rs │ ├── menu_controller.rs │ ├── mod.rs │ ├── monitor_controller.rs │ ├── notice_controller.rs │ ├── post_controller.rs │ ├── role_controller.rs │ ├── swagger_controller.rs │ └── user_controller.rs ├── entity │ ├── excel_entity.rs │ ├── mod.rs │ ├── sys_captcha_entity.rs │ ├── sys_dept_entity.rs │ ├── sys_dict_data_entity.rs │ ├── sys_dict_type_entity.rs │ ├── sys_menu_entity.rs │ ├── sys_notice_entity.rs │ ├── sys_post_entity.rs │ ├── sys_role_entity.rs │ ├── sys_role_menu_entity.rs │ ├── sys_user_entity.rs │ ├── sys_user_post_entity.rs │ └── sys_user_role_entity.rs ├── main.rs ├── mapper │ ├── captcha_mapper.rs │ ├── dept_mapper.rs │ ├── dict_mapper.rs │ ├── excel_mapper.rs │ ├── menu_mapper.rs │ ├── mod.rs │ ├── notice_mapper.rs │ ├── post_mapper.rs │ ├── role_mapper.rs │ ├── role_menu_mapper.rs │ ├── user_mapper.rs │ ├── user_post_mapper.rs │ ├── user_role_mapper.rs │ └── xml │ │ ├── dept_xml.html │ │ ├── dict_xml.html │ │ ├── excel_xml.html │ │ ├── menu_xml.html │ │ ├── notice_xml.html │ │ ├── post_xml.html │ │ ├── role_menu_xml.html │ │ ├── role_xml.html │ │ ├── user_role_xml.html │ │ └── user_xml.html ├── model │ ├── chat_model.rs │ ├── common_model.rs │ ├── dept_model.rs │ ├── dict_model.rs │ ├── excel_model.rs │ ├── menu_model.rs │ ├── mod.rs │ ├── monitor_model.rs │ ├── notice_model.rs │ ├── post_model.rs │ ├── role_model.rs │ ├── swagger_model.rs │ └── user_model.rs ├── router │ ├── dept_router.rs │ ├── dict_router.rs │ ├── excel_router.rs │ ├── menu_router.rs │ ├── mod.rs │ ├── monitor_router.rs │ ├── notice_router.rs │ ├── post_router.rs │ ├── role_router.rs │ └── user_router.rs ├── service │ ├── dept_service.rs │ ├── dict_service.rs │ ├── excel_service.rs │ ├── menu_service.rs │ ├── mod.rs │ ├── monitor_service.rs │ ├── notice_service.rs │ ├── post_service.rs │ ├── role_service.rs │ └── user_service.rs ├── utils │ ├── captcha.rs │ ├── func.rs │ ├── md5.rs │ ├── mod.rs │ ├── mysql.rs │ ├── redis.rs │ ├── res.rs │ ├── system.rs │ └── webtoken.rs └── websocket │ ├── excel_websocket.rs │ └── mod.rs ├── static └── text1.txt └── ui ├── .env.development ├── .env.production ├── .env.staging ├── .github └── FUNDING.yml ├── .gitignore ├── bin ├── build.bat ├── package.bat └── run-web.bat ├── html └── ie.html ├── index.html ├── package.json ├── public └── favicon.ico ├── src ├── App.vue ├── api │ ├── login.js │ ├── menu.js │ ├── monitor │ │ ├── cache.js │ │ ├── job.js │ │ ├── jobLog.js │ │ ├── logininfor.js │ │ ├── online.js │ │ ├── operlog.js │ │ └── server.js │ ├── system │ │ ├── config.js │ │ ├── dept.js │ │ ├── dict │ │ │ ├── data.js │ │ │ └── type.js │ │ ├── menu.js │ │ ├── notice.js │ │ ├── post.js │ │ ├── role.js │ │ └── user.js │ └── tool │ │ ├── excel.js │ │ └── gen.js ├── assets │ ├── 401_images │ │ └── 401.gif │ ├── 404_images │ │ ├── 404.png │ │ └── 404_cloud.png │ ├── icons │ │ └── svg │ │ │ ├── 404.svg │ │ │ ├── bug.svg │ │ │ ├── build.svg │ │ │ ├── button.svg │ │ │ ├── cascader.svg │ │ │ ├── chart.svg │ │ │ ├── checkbox.svg │ │ │ ├── clipboard.svg │ │ │ ├── code.svg │ │ │ ├── color.svg │ │ │ ├── component.svg │ │ │ ├── dashboard.svg │ │ │ ├── date-range.svg │ │ │ ├── date.svg │ │ │ ├── dict.svg │ │ │ ├── documentation.svg │ │ │ ├── download.svg │ │ │ ├── drag.svg │ │ │ ├── druid.svg │ │ │ ├── edit.svg │ │ │ ├── education.svg │ │ │ ├── email.svg │ │ │ ├── example.svg │ │ │ ├── excel.svg │ │ │ ├── exit-fullscreen.svg │ │ │ ├── eye-open.svg │ │ │ ├── eye.svg │ │ │ ├── form.svg │ │ │ ├── fullscreen.svg │ │ │ ├── github.svg │ │ │ ├── guide.svg │ │ │ ├── icon.svg │ │ │ ├── input.svg │ │ │ ├── international.svg │ │ │ ├── job.svg │ │ │ ├── language.svg │ │ │ ├── link.svg │ │ │ ├── list.svg │ │ │ ├── lock.svg │ │ │ ├── log.svg │ │ │ ├── logininfor.svg │ │ │ ├── message.svg │ │ │ ├── money.svg │ │ │ ├── monitor.svg │ │ │ ├── nested.svg │ │ │ ├── number.svg │ │ │ ├── online.svg │ │ │ ├── password.svg │ │ │ ├── pdf.svg │ │ │ ├── people.svg │ │ │ ├── peoples.svg │ │ │ ├── phone.svg │ │ │ ├── post.svg │ │ │ ├── qq.svg │ │ │ ├── question.svg │ │ │ ├── radio.svg │ │ │ ├── rate.svg │ │ │ ├── redis-list.svg │ │ │ ├── redis.svg │ │ │ ├── row.svg │ │ │ ├── search.svg │ │ │ ├── select.svg │ │ │ ├── server.svg │ │ │ ├── shopping.svg │ │ │ ├── size.svg │ │ │ ├── skill.svg │ │ │ ├── slider.svg │ │ │ ├── star.svg │ │ │ ├── swagger.svg │ │ │ ├── switch.svg │ │ │ ├── system.svg │ │ │ ├── tab.svg │ │ │ ├── table.svg │ │ │ ├── textarea.svg │ │ │ ├── theme.svg │ │ │ ├── time-range.svg │ │ │ ├── time.svg │ │ │ ├── tool.svg │ │ │ ├── tree-table.svg │ │ │ ├── tree.svg │ │ │ ├── upload.svg │ │ │ ├── user.svg │ │ │ ├── validCode.svg │ │ │ ├── wechat.svg │ │ │ └── zip.svg │ ├── images │ │ ├── dark.svg │ │ ├── light.svg │ │ ├── login-background.jpg │ │ └── profile.jpg │ ├── logo │ │ └── logo.png │ └── styles │ │ ├── btn.scss │ │ ├── element-ui.scss │ │ ├── index.scss │ │ ├── mixin.scss │ │ ├── ruoyi.scss │ │ ├── sidebar.scss │ │ ├── transition.scss │ │ └── variables.module.scss ├── components │ ├── Breadcrumb │ │ └── index.vue │ ├── Crontab │ │ ├── day.vue │ │ ├── hour.vue │ │ ├── index.vue │ │ ├── min.vue │ │ ├── month.vue │ │ ├── result.vue │ │ ├── second.vue │ │ ├── week.vue │ │ └── year.vue │ ├── DictTag │ │ └── index.vue │ ├── Editor │ │ └── index.vue │ ├── FileUpload │ │ └── index.vue │ ├── Hamburger │ │ └── index.vue │ ├── HeaderSearch │ │ └── index.vue │ ├── IconSelect │ │ ├── index.vue │ │ └── requireIcons.js │ ├── ImagePreview │ │ └── index.vue │ ├── ImageUpload │ │ └── index.vue │ ├── Pagination │ │ └── index.vue │ ├── ParentView │ │ └── index.vue │ ├── RightToolbar │ │ └── index.vue │ ├── RuoYi │ │ ├── Doc │ │ │ └── index.vue │ │ └── Git │ │ │ └── index.vue │ ├── Screenfull │ │ └── index.vue │ ├── SizeSelect │ │ └── index.vue │ ├── SvgIcon │ │ ├── index.vue │ │ └── svgicon.js │ ├── TopNav │ │ └── index.vue │ ├── TreeSelect │ │ └── index.vue │ ├── UploadImg.vue │ └── iFrame │ │ └── index.vue ├── directive │ ├── common │ │ └── copyText.js │ ├── index.js │ └── permission │ │ ├── hasPermi.js │ │ └── hasRole.js ├── layout │ ├── components │ │ ├── AppMain.vue │ │ ├── IframeToggle │ │ │ └── index.vue │ │ ├── InnerLink │ │ │ └── index.vue │ │ ├── Navbar.vue │ │ ├── Settings │ │ │ └── index.vue │ │ ├── Sidebar │ │ │ ├── Link.vue │ │ │ ├── Logo.vue │ │ │ ├── SidebarItem.vue │ │ │ └── index.vue │ │ ├── TagsView │ │ │ ├── ScrollPane.vue │ │ │ └── index.vue │ │ └── index.js │ └── index.vue ├── main.js ├── permission.js ├── plugins │ ├── auth.js │ ├── cache.js │ ├── download.js │ ├── index.js │ ├── modal.js │ └── tab.js ├── router │ └── index.js ├── settings.js ├── store │ ├── index.js │ └── modules │ │ ├── app.js │ │ ├── dict.js │ │ ├── permission.js │ │ ├── settings.js │ │ ├── tagsView.js │ │ └── user.js ├── utils │ ├── auth.js │ ├── dict.js │ ├── dynamicTitle.js │ ├── errorCode.js │ ├── index.js │ ├── jsencrypt.js │ ├── permission.js │ ├── request.js │ ├── ruoyi.js │ ├── scroll-to.js │ ├── theme.js │ └── validate.js └── views │ ├── error │ ├── 401.vue │ └── 404.vue │ ├── index.vue │ ├── login.vue │ ├── monitor │ ├── cache │ │ ├── index.vue │ │ └── list.vue │ ├── druid │ │ └── index.vue │ ├── job │ │ ├── index.vue │ │ └── log.vue │ ├── logininfor │ │ └── index.vue │ ├── online │ │ └── index.vue │ ├── operlog │ │ └── index.vue │ └── server │ │ └── index.vue │ ├── redirect │ └── index.vue │ ├── register.vue │ ├── system │ ├── chat │ │ └── index.vue │ ├── config │ │ └── index.vue │ ├── dept │ │ └── index.vue │ ├── dict │ │ ├── data.vue │ │ └── index.vue │ ├── menu │ │ └── index.vue │ ├── notice │ │ └── index.vue │ ├── post │ │ └── index.vue │ ├── role │ │ ├── authUser.vue │ │ ├── index.vue │ │ └── selectUser.vue │ └── user │ │ ├── authRole.vue │ │ ├── index.vue │ │ └── profile │ │ ├── index.vue │ │ ├── resetPwd.vue │ │ ├── userAvatar.vue │ │ └── userInfo.vue │ └── tool │ ├── build │ └── index.vue │ ├── excel │ └── index.vue │ ├── gen │ ├── basicInfoForm.vue │ ├── editTable.vue │ ├── genInfoForm.vue │ ├── importTable.vue │ └── index.vue │ └── swagger │ └── index.vue ├── vite.config.js └── vite └── plugins ├── auto-import.js ├── compression.js ├── index.js ├── setup-extend.js └── svg-icon.js /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.idea 3 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "salvo-admin" 3 | version = "0.2.1" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | salvo = { version = "0.73.0", features = [ 10 | "serve-static", 11 | "oapi", 12 | "logging", 13 | "catch-panic", 14 | "websocket", 15 | "session", 16 | ] } 17 | captcha = "0.0.9" 18 | md5 = "0.7.0" 19 | jsonwebtoken = "8" 20 | serde = { version = "1", features = ["derive"] } 21 | serde_json = "1" 22 | rbs = { version = "4.5" } 23 | rbatis = { version = "4.5", features = ["debug_mode"] } 24 | rbdc-mysql = { version = "4.5" } 25 | tokio = { version = "1", features = ["full"] } 26 | tokio-stream = { version = "0.1.14", features = ["net"] } 27 | futures-util = "0.3" 28 | once_cell = "1.16.0" 29 | uuid = { version = "1.3.2", features = [ 30 | "v4", # Lets you generate random UUIDs 31 | "fast-rng", # Use a faster (but still sufficiently random) RNG 32 | "macro-diagnostics", # Enable better diagnostics for compile-time UUIDs 33 | ] } 34 | redis = { version = "0.23.0", features = ["tokio-comp"] } 35 | sysinfo = "0.30.1" 36 | byte-unit = "5.1.2" 37 | tracing = "0.1" 38 | tracing-subscriber = "0.3" 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |