From faacd46fdbf8b76651e00ce8675251a9d544d257 Mon Sep 17 00:00:00 2001
From: yinguofeng <11544672@qq.com>
Date: Sat, 13 Mar 2021 13:06:28 +0800
Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E5=90=8E=E7=AB=AF=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 1 +
jiajiakang-admin/pom.xml | 8 +-
.../com/jiajiakang/JiaJiaKangApplication.java | 2 +-
jiajiakang-demo/pom.xml | 28 +
.../demo/controller/FeignTestController.java | 24 +
.../ruoyi/demo/controller/package-info.java | 1 +
.../com/ruoyi/demo/domain/package-info.java | 1 +
.../ruoyi/demo/feign/FeignTestService.java | 13 +
.../feign/fallback/FeignTestFallback.java | 12 +
.../demo/feign/fallback/package-info.java | 1 +
.../com/ruoyi/demo/feign/package-info.java | 1 +
.../com/ruoyi/demo/mapper/package-info.java | 1 +
.../ruoyi/demo/service/impl/package-info.java | 1 +
.../com/ruoyi/demo/service/package-info.java | 1 +
.../resources/mapper/demo/package-info.md | 0
jiajiakang-ui/.editorconfig | 22 +
jiajiakang-ui/.env.development | 8 +
jiajiakang-ui/.env.production | 5 +
jiajiakang-ui/.env.staging | 7 +
jiajiakang-ui/.eslintignore | 10 +
jiajiakang-ui/.eslintrc.js | 199 ++++
jiajiakang-ui/.gitignore | 23 +
jiajiakang-ui/README.md | 30 +
jiajiakang-ui/babel.config.js | 13 +
jiajiakang-ui/bin/build.bat | 12 +
jiajiakang-ui/bin/package.bat | 12 +
jiajiakang-ui/bin/run-web.bat | 12 +
jiajiakang-ui/build/index.js | 35 +
jiajiakang-ui/package.json | 87 ++
jiajiakang-ui/public/favicon.ico | Bin 0 -> 5663 bytes
jiajiakang-ui/public/index.html | 207 ++++
jiajiakang-ui/public/robots.txt | 2 +
jiajiakang-ui/src/App.vue | 11 +
jiajiakang-ui/src/api/login.js | 40 +
jiajiakang-ui/src/api/menu.js | 9 +
jiajiakang-ui/src/api/monitor/cache.js | 9 +
jiajiakang-ui/src/api/monitor/job.js | 80 ++
jiajiakang-ui/src/api/monitor/jobLog.js | 35 +
jiajiakang-ui/src/api/monitor/logininfor.js | 35 +
jiajiakang-ui/src/api/monitor/online.js | 18 +
jiajiakang-ui/src/api/monitor/operlog.js | 35 +
jiajiakang-ui/src/api/monitor/server.js | 9 +
jiajiakang-ui/src/api/system/config.js | 69 ++
jiajiakang-ui/src/api/system/dept.js | 68 ++
jiajiakang-ui/src/api/system/dict/data.js | 61 ++
jiajiakang-ui/src/api/system/dict/type.js | 69 ++
jiajiakang-ui/src/api/system/menu.js | 60 ++
jiajiakang-ui/src/api/system/notice.js | 44 +
jiajiakang-ui/src/api/system/post.js | 53 +
jiajiakang-ui/src/api/system/role.js | 75 ++
jiajiakang-ui/src/api/system/user.js | 127 +++
jiajiakang-ui/src/api/tool/gen.js | 76 ++
jiajiakang-ui/src/assets/401_images/401.gif | Bin 0 -> 164227 bytes
jiajiakang-ui/src/assets/404_images/404.png | Bin 0 -> 98071 bytes
.../src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes
jiajiakang-ui/src/assets/icons/index.js | 9 +
jiajiakang-ui/src/assets/icons/svg/404.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/bug.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/build.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/button.svg | 1 +
.../src/assets/icons/svg/cascader.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/chart.svg | 1 +
.../src/assets/icons/svg/checkbox.svg | 1 +
.../src/assets/icons/svg/clipboard.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/code.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/color.svg | 1 +
.../src/assets/icons/svg/component.svg | 1 +
.../src/assets/icons/svg/dashboard.svg | 1 +
.../src/assets/icons/svg/date-range.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/date.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/dict.svg | 1 +
.../src/assets/icons/svg/documentation.svg | 1 +
.../src/assets/icons/svg/download.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/drag.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/druid.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/edit.svg | 1 +
.../src/assets/icons/svg/education.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/email.svg | 1 +
.../src/assets/icons/svg/example.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/excel.svg | 1 +
.../src/assets/icons/svg/exit-fullscreen.svg | 1 +
.../src/assets/icons/svg/eye-open.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/eye.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/form.svg | 1 +
.../src/assets/icons/svg/fullscreen.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/github.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/guide.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/icon.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/input.svg | 1 +
.../src/assets/icons/svg/international.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/job.svg | 1 +
.../src/assets/icons/svg/language.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/link.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/list.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/lock.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/log.svg | 1 +
.../src/assets/icons/svg/logininfor.svg | 1 +
.../src/assets/icons/svg/message.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/money.svg | 1 +
.../src/assets/icons/svg/monitor.svg | 2 +
jiajiakang-ui/src/assets/icons/svg/nested.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/number.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/online.svg | 1 +
.../src/assets/icons/svg/password.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/pdf.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/people.svg | 1 +
.../src/assets/icons/svg/peoples.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/phone.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/post.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/qq.svg | 1 +
.../src/assets/icons/svg/question.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/radio.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/rate.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/redis.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/row.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/search.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/select.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/server.svg | 1 +
.../src/assets/icons/svg/shopping.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/size.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/skill.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/slider.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/star.svg | 1 +
.../src/assets/icons/svg/swagger.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/switch.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/system.svg | 2 +
jiajiakang-ui/src/assets/icons/svg/tab.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/table.svg | 1 +
.../src/assets/icons/svg/textarea.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/theme.svg | 1 +
.../src/assets/icons/svg/time-range.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/time.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/tool.svg | 1 +
.../src/assets/icons/svg/tree-table.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/tree.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/upload.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/user.svg | 1 +
.../src/assets/icons/svg/validCode.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/wechat.svg | 1 +
jiajiakang-ui/src/assets/icons/svg/zip.svg | 1 +
jiajiakang-ui/src/assets/icons/svgo.yml | 22 +
jiajiakang-ui/src/assets/images/dark.svg | 39 +
jiajiakang-ui/src/assets/images/light.svg | 39 +
.../src/assets/images/login-background.jpg | Bin 0 -> 521275 bytes
jiajiakang-ui/src/assets/images/profile.jpg | Bin 0 -> 81131 bytes
jiajiakang-ui/src/assets/logo/logo.png | Bin 0 -> 5663 bytes
jiajiakang-ui/src/assets/styles/btn.scss | 99 ++
.../src/assets/styles/element-ui.scss | 84 ++
.../src/assets/styles/element-variables.scss | 31 +
jiajiakang-ui/src/assets/styles/index.scss | 191 ++++
jiajiakang-ui/src/assets/styles/mixin.scss | 66 ++
jiajiakang-ui/src/assets/styles/ruoyi.scss | 240 +++++
jiajiakang-ui/src/assets/styles/sidebar.scss | 226 +++++
.../src/assets/styles/transition.scss | 48 +
.../src/assets/styles/variables.scss | 44 +
.../src/components/Breadcrumb/index.vue | 74 ++
jiajiakang-ui/src/components/Editor/index.vue | 200 ++++
.../src/components/FileUpload/index.vue | 179 ++++
.../src/components/Hamburger/index.vue | 44 +
.../src/components/HeaderSearch/index.vue | 188 ++++
.../src/components/IconSelect/index.vue | 68 ++
.../src/components/IconSelect/requireIcons.js | 11 +
.../src/components/ImageUpload/index.vue | 100 ++
.../src/components/Pagination/index.vue | 101 ++
.../src/components/PanThumb/index.vue | 142 +++
.../src/components/ParentView/index.vue | 3 +
.../src/components/RightPanel/index.vue | 149 +++
.../src/components/RightToolbar/index.vue | 80 ++
.../src/components/RuoYi/Doc/index.vue | 21 +
.../src/components/RuoYi/Git/index.vue | 21 +
.../src/components/Screenfull/index.vue | 57 ++
.../src/components/SizeSelect/index.vue | 57 ++
.../src/components/SvgIcon/index.vue | 61 ++
.../src/components/ThemePicker/index.vue | 175 ++++
.../src/directive/permission/hasPermi.js | 28 +
.../src/directive/permission/hasRole.js | 28 +
.../src/directive/permission/index.js | 15 +
.../src/layout/components/AppMain.vue | 57 ++
.../src/layout/components/Navbar.vue | 187 ++++
.../src/layout/components/Settings/index.vue | 197 ++++
.../layout/components/Sidebar/FixiOSBug.js | 25 +
.../src/layout/components/Sidebar/Item.vue | 29 +
.../src/layout/components/Sidebar/Link.vue | 43 +
.../src/layout/components/Sidebar/Logo.vue | 93 ++
.../layout/components/Sidebar/SidebarItem.vue | 96 ++
.../src/layout/components/Sidebar/index.vue | 57 ++
.../layout/components/TagsView/ScrollPane.vue | 94 ++
.../src/layout/components/TagsView/index.vue | 303 ++++++
jiajiakang-ui/src/layout/components/index.js | 5 +
jiajiakang-ui/src/layout/index.vue | 108 ++
.../src/layout/mixin/ResizeHandler.js | 45 +
jiajiakang-ui/src/main.js | 73 ++
jiajiakang-ui/src/permission.js | 52 +
jiajiakang-ui/src/router/index.js | 128 +++
jiajiakang-ui/src/settings.js | 36 +
jiajiakang-ui/src/store/getters.js | 16 +
jiajiakang-ui/src/store/index.js | 23 +
jiajiakang-ui/src/store/modules/app.js | 56 ++
jiajiakang-ui/src/store/modules/permission.js | 95 ++
jiajiakang-ui/src/store/modules/settings.js | 35 +
jiajiakang-ui/src/store/modules/tagsView.js | 159 +++
jiajiakang-ui/src/store/modules/user.js | 96 ++
jiajiakang-ui/src/utils/auth.js | 15 +
jiajiakang-ui/src/utils/errorCode.js | 6 +
jiajiakang-ui/src/utils/generator/config.js | 438 ++++++++
jiajiakang-ui/src/utils/generator/css.js | 18 +
.../src/utils/generator/drawingDefalut.js | 29 +
jiajiakang-ui/src/utils/generator/html.js | 359 +++++++
jiajiakang-ui/src/utils/generator/icon.json | 1 +
jiajiakang-ui/src/utils/generator/js.js | 236 +++++
jiajiakang-ui/src/utils/generator/render.js | 126 +++
jiajiakang-ui/src/utils/index.js | 390 ++++++++
jiajiakang-ui/src/utils/jsencrypt.js | 30 +
jiajiakang-ui/src/utils/permission.js | 51 +
jiajiakang-ui/src/utils/request.js | 103 ++
jiajiakang-ui/src/utils/ruoyi.js | 152 +++
jiajiakang-ui/src/utils/scroll-to.js | 58 ++
jiajiakang-ui/src/utils/validate.js | 83 ++
jiajiakang-ui/src/utils/zipdownload.js | 40 +
.../views/components/icons/element-icons.js | 3 +
.../src/views/components/icons/index.vue | 87 ++
.../src/views/components/icons/svg-icons.js | 10 +
.../src/views/dashboard/BarChart.vue | 102 ++
.../src/views/dashboard/LineChart.vue | 135 +++
.../src/views/dashboard/PanelGroup.vue | 181 ++++
.../src/views/dashboard/PieChart.vue | 79 ++
.../src/views/dashboard/RaddarChart.vue | 116 +++
.../src/views/dashboard/mixins/resize.js | 56 ++
jiajiakang-ui/src/views/error/401.vue | 88 ++
jiajiakang-ui/src/views/error/404.vue | 233 +++++
jiajiakang-ui/src/views/index.vue | 602 +++++++++++
jiajiakang-ui/src/views/index_v1.vue | 98 ++
jiajiakang-ui/src/views/login.vue | 203 ++++
.../src/views/monitor/cache/index.vue | 153 +++
.../src/views/monitor/druid/index.vue | 26 +
jiajiakang-ui/src/views/monitor/job/index.vue | 488 +++++++++
jiajiakang-ui/src/views/monitor/job/log.vue | 299 ++++++
.../src/views/monitor/logininfor/index.vue | 233 +++++
.../src/views/monitor/online/index.vue | 128 +++
.../src/views/monitor/operlog/index.vue | 321 ++++++
.../src/views/monitor/server/index.vue | 210 ++++
jiajiakang-ui/src/views/redirect.vue | 12 +
.../src/views/system/config/index.vue | 361 +++++++
jiajiakang-ui/src/views/system/dept/index.vue | 317 ++++++
jiajiakang-ui/src/views/system/dict/data.vue | 354 +++++++
jiajiakang-ui/src/views/system/dict/index.vue | 365 +++++++
jiajiakang-ui/src/views/system/menu/index.vue | 400 ++++++++
.../src/views/system/notice/index.vue | 343 +++++++
jiajiakang-ui/src/views/system/post/index.vue | 326 ++++++
jiajiakang-ui/src/views/system/role/index.vue | 610 +++++++++++
jiajiakang-ui/src/views/system/user/index.vue | 675 +++++++++++++
.../src/views/system/user/profile/index.vue | 91 ++
.../views/system/user/profile/resetPwd.vue | 72 ++
.../views/system/user/profile/userAvatar.vue | 167 ++++
.../views/system/user/profile/userInfo.vue | 76 ++
.../src/views/tool/build/CodeTypeDialog.vue | 106 ++
.../src/views/tool/build/DraggableItem.vue | 100 ++
.../src/views/tool/build/IconsDialog.vue | 123 +++
.../src/views/tool/build/RightPanel.vue | 944 ++++++++++++++++++
.../src/views/tool/build/TreeNodeDialog.vue | 149 +++
jiajiakang-ui/src/views/tool/build/index.vue | 789 +++++++++++++++
.../src/views/tool/gen/basicInfoForm.vue | 61 ++
.../src/views/tool/gen/editTable.vue | 232 +++++
.../src/views/tool/gen/genInfoForm.vue | 300 ++++++
.../src/views/tool/gen/importTable.vue | 117 +++
jiajiakang-ui/src/views/tool/gen/index.vue | 340 +++++++
.../src/views/tool/swagger/index.vue | 26 +
jiajiakang-ui/vue.config.js | 118 +++
pom.xml | 12 +-
269 files changed, 20457 insertions(+), 11 deletions(-)
create mode 100644 jiajiakang-demo/pom.xml
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/package-info.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/domain/package-info.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/mapper/package-info.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/service/impl/package-info.java
create mode 100644 jiajiakang-demo/src/main/java/com/ruoyi/demo/service/package-info.java
create mode 100644 jiajiakang-demo/src/main/resources/mapper/demo/package-info.md
create mode 100644 jiajiakang-ui/.editorconfig
create mode 100644 jiajiakang-ui/.env.development
create mode 100644 jiajiakang-ui/.env.production
create mode 100644 jiajiakang-ui/.env.staging
create mode 100644 jiajiakang-ui/.eslintignore
create mode 100644 jiajiakang-ui/.eslintrc.js
create mode 100644 jiajiakang-ui/.gitignore
create mode 100644 jiajiakang-ui/README.md
create mode 100644 jiajiakang-ui/babel.config.js
create mode 100644 jiajiakang-ui/bin/build.bat
create mode 100644 jiajiakang-ui/bin/package.bat
create mode 100644 jiajiakang-ui/bin/run-web.bat
create mode 100644 jiajiakang-ui/build/index.js
create mode 100644 jiajiakang-ui/package.json
create mode 100644 jiajiakang-ui/public/favicon.ico
create mode 100644 jiajiakang-ui/public/index.html
create mode 100644 jiajiakang-ui/public/robots.txt
create mode 100644 jiajiakang-ui/src/App.vue
create mode 100644 jiajiakang-ui/src/api/login.js
create mode 100644 jiajiakang-ui/src/api/menu.js
create mode 100644 jiajiakang-ui/src/api/monitor/cache.js
create mode 100644 jiajiakang-ui/src/api/monitor/job.js
create mode 100644 jiajiakang-ui/src/api/monitor/jobLog.js
create mode 100644 jiajiakang-ui/src/api/monitor/logininfor.js
create mode 100644 jiajiakang-ui/src/api/monitor/online.js
create mode 100644 jiajiakang-ui/src/api/monitor/operlog.js
create mode 100644 jiajiakang-ui/src/api/monitor/server.js
create mode 100644 jiajiakang-ui/src/api/system/config.js
create mode 100644 jiajiakang-ui/src/api/system/dept.js
create mode 100644 jiajiakang-ui/src/api/system/dict/data.js
create mode 100644 jiajiakang-ui/src/api/system/dict/type.js
create mode 100644 jiajiakang-ui/src/api/system/menu.js
create mode 100644 jiajiakang-ui/src/api/system/notice.js
create mode 100644 jiajiakang-ui/src/api/system/post.js
create mode 100644 jiajiakang-ui/src/api/system/role.js
create mode 100644 jiajiakang-ui/src/api/system/user.js
create mode 100644 jiajiakang-ui/src/api/tool/gen.js
create mode 100644 jiajiakang-ui/src/assets/401_images/401.gif
create mode 100644 jiajiakang-ui/src/assets/404_images/404.png
create mode 100644 jiajiakang-ui/src/assets/404_images/404_cloud.png
create mode 100644 jiajiakang-ui/src/assets/icons/index.js
create mode 100644 jiajiakang-ui/src/assets/icons/svg/404.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/bug.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/build.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/button.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/cascader.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/chart.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/checkbox.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/clipboard.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/code.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/color.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/component.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/dashboard.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/date-range.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/date.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/dict.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/documentation.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/download.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/drag.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/druid.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/edit.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/education.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/email.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/example.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/excel.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/exit-fullscreen.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/eye-open.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/eye.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/form.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/fullscreen.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/github.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/guide.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/icon.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/input.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/international.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/job.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/language.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/link.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/list.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/lock.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/log.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/logininfor.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/message.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/money.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/monitor.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/nested.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/number.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/online.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/password.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/pdf.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/people.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/peoples.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/phone.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/post.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/qq.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/question.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/radio.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/rate.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/redis.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/row.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/search.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/select.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/server.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/shopping.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/size.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/skill.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/slider.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/star.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/swagger.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/switch.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/system.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/tab.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/table.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/textarea.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/theme.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/time-range.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/time.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/tool.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/tree-table.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/tree.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/upload.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/user.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/validCode.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/wechat.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svg/zip.svg
create mode 100644 jiajiakang-ui/src/assets/icons/svgo.yml
create mode 100644 jiajiakang-ui/src/assets/images/dark.svg
create mode 100644 jiajiakang-ui/src/assets/images/light.svg
create mode 100644 jiajiakang-ui/src/assets/images/login-background.jpg
create mode 100644 jiajiakang-ui/src/assets/images/profile.jpg
create mode 100644 jiajiakang-ui/src/assets/logo/logo.png
create mode 100644 jiajiakang-ui/src/assets/styles/btn.scss
create mode 100644 jiajiakang-ui/src/assets/styles/element-ui.scss
create mode 100644 jiajiakang-ui/src/assets/styles/element-variables.scss
create mode 100644 jiajiakang-ui/src/assets/styles/index.scss
create mode 100644 jiajiakang-ui/src/assets/styles/mixin.scss
create mode 100644 jiajiakang-ui/src/assets/styles/ruoyi.scss
create mode 100644 jiajiakang-ui/src/assets/styles/sidebar.scss
create mode 100644 jiajiakang-ui/src/assets/styles/transition.scss
create mode 100644 jiajiakang-ui/src/assets/styles/variables.scss
create mode 100644 jiajiakang-ui/src/components/Breadcrumb/index.vue
create mode 100644 jiajiakang-ui/src/components/Editor/index.vue
create mode 100644 jiajiakang-ui/src/components/FileUpload/index.vue
create mode 100644 jiajiakang-ui/src/components/Hamburger/index.vue
create mode 100644 jiajiakang-ui/src/components/HeaderSearch/index.vue
create mode 100644 jiajiakang-ui/src/components/IconSelect/index.vue
create mode 100644 jiajiakang-ui/src/components/IconSelect/requireIcons.js
create mode 100644 jiajiakang-ui/src/components/ImageUpload/index.vue
create mode 100644 jiajiakang-ui/src/components/Pagination/index.vue
create mode 100644 jiajiakang-ui/src/components/PanThumb/index.vue
create mode 100644 jiajiakang-ui/src/components/ParentView/index.vue
create mode 100644 jiajiakang-ui/src/components/RightPanel/index.vue
create mode 100644 jiajiakang-ui/src/components/RightToolbar/index.vue
create mode 100644 jiajiakang-ui/src/components/RuoYi/Doc/index.vue
create mode 100644 jiajiakang-ui/src/components/RuoYi/Git/index.vue
create mode 100644 jiajiakang-ui/src/components/Screenfull/index.vue
create mode 100644 jiajiakang-ui/src/components/SizeSelect/index.vue
create mode 100644 jiajiakang-ui/src/components/SvgIcon/index.vue
create mode 100644 jiajiakang-ui/src/components/ThemePicker/index.vue
create mode 100644 jiajiakang-ui/src/directive/permission/hasPermi.js
create mode 100644 jiajiakang-ui/src/directive/permission/hasRole.js
create mode 100644 jiajiakang-ui/src/directive/permission/index.js
create mode 100644 jiajiakang-ui/src/layout/components/AppMain.vue
create mode 100644 jiajiakang-ui/src/layout/components/Navbar.vue
create mode 100644 jiajiakang-ui/src/layout/components/Settings/index.vue
create mode 100644 jiajiakang-ui/src/layout/components/Sidebar/FixiOSBug.js
create mode 100644 jiajiakang-ui/src/layout/components/Sidebar/Item.vue
create mode 100644 jiajiakang-ui/src/layout/components/Sidebar/Link.vue
create mode 100644 jiajiakang-ui/src/layout/components/Sidebar/Logo.vue
create mode 100644 jiajiakang-ui/src/layout/components/Sidebar/SidebarItem.vue
create mode 100644 jiajiakang-ui/src/layout/components/Sidebar/index.vue
create mode 100644 jiajiakang-ui/src/layout/components/TagsView/ScrollPane.vue
create mode 100644 jiajiakang-ui/src/layout/components/TagsView/index.vue
create mode 100644 jiajiakang-ui/src/layout/components/index.js
create mode 100644 jiajiakang-ui/src/layout/index.vue
create mode 100644 jiajiakang-ui/src/layout/mixin/ResizeHandler.js
create mode 100644 jiajiakang-ui/src/main.js
create mode 100644 jiajiakang-ui/src/permission.js
create mode 100644 jiajiakang-ui/src/router/index.js
create mode 100644 jiajiakang-ui/src/settings.js
create mode 100644 jiajiakang-ui/src/store/getters.js
create mode 100644 jiajiakang-ui/src/store/index.js
create mode 100644 jiajiakang-ui/src/store/modules/app.js
create mode 100644 jiajiakang-ui/src/store/modules/permission.js
create mode 100644 jiajiakang-ui/src/store/modules/settings.js
create mode 100644 jiajiakang-ui/src/store/modules/tagsView.js
create mode 100644 jiajiakang-ui/src/store/modules/user.js
create mode 100644 jiajiakang-ui/src/utils/auth.js
create mode 100644 jiajiakang-ui/src/utils/errorCode.js
create mode 100644 jiajiakang-ui/src/utils/generator/config.js
create mode 100644 jiajiakang-ui/src/utils/generator/css.js
create mode 100644 jiajiakang-ui/src/utils/generator/drawingDefalut.js
create mode 100644 jiajiakang-ui/src/utils/generator/html.js
create mode 100644 jiajiakang-ui/src/utils/generator/icon.json
create mode 100644 jiajiakang-ui/src/utils/generator/js.js
create mode 100644 jiajiakang-ui/src/utils/generator/render.js
create mode 100644 jiajiakang-ui/src/utils/index.js
create mode 100644 jiajiakang-ui/src/utils/jsencrypt.js
create mode 100644 jiajiakang-ui/src/utils/permission.js
create mode 100644 jiajiakang-ui/src/utils/request.js
create mode 100644 jiajiakang-ui/src/utils/ruoyi.js
create mode 100644 jiajiakang-ui/src/utils/scroll-to.js
create mode 100644 jiajiakang-ui/src/utils/validate.js
create mode 100644 jiajiakang-ui/src/utils/zipdownload.js
create mode 100644 jiajiakang-ui/src/views/components/icons/element-icons.js
create mode 100644 jiajiakang-ui/src/views/components/icons/index.vue
create mode 100644 jiajiakang-ui/src/views/components/icons/svg-icons.js
create mode 100644 jiajiakang-ui/src/views/dashboard/BarChart.vue
create mode 100644 jiajiakang-ui/src/views/dashboard/LineChart.vue
create mode 100644 jiajiakang-ui/src/views/dashboard/PanelGroup.vue
create mode 100644 jiajiakang-ui/src/views/dashboard/PieChart.vue
create mode 100644 jiajiakang-ui/src/views/dashboard/RaddarChart.vue
create mode 100644 jiajiakang-ui/src/views/dashboard/mixins/resize.js
create mode 100644 jiajiakang-ui/src/views/error/401.vue
create mode 100644 jiajiakang-ui/src/views/error/404.vue
create mode 100644 jiajiakang-ui/src/views/index.vue
create mode 100644 jiajiakang-ui/src/views/index_v1.vue
create mode 100644 jiajiakang-ui/src/views/login.vue
create mode 100644 jiajiakang-ui/src/views/monitor/cache/index.vue
create mode 100644 jiajiakang-ui/src/views/monitor/druid/index.vue
create mode 100644 jiajiakang-ui/src/views/monitor/job/index.vue
create mode 100644 jiajiakang-ui/src/views/monitor/job/log.vue
create mode 100644 jiajiakang-ui/src/views/monitor/logininfor/index.vue
create mode 100644 jiajiakang-ui/src/views/monitor/online/index.vue
create mode 100644 jiajiakang-ui/src/views/monitor/operlog/index.vue
create mode 100644 jiajiakang-ui/src/views/monitor/server/index.vue
create mode 100644 jiajiakang-ui/src/views/redirect.vue
create mode 100644 jiajiakang-ui/src/views/system/config/index.vue
create mode 100644 jiajiakang-ui/src/views/system/dept/index.vue
create mode 100644 jiajiakang-ui/src/views/system/dict/data.vue
create mode 100644 jiajiakang-ui/src/views/system/dict/index.vue
create mode 100644 jiajiakang-ui/src/views/system/menu/index.vue
create mode 100644 jiajiakang-ui/src/views/system/notice/index.vue
create mode 100644 jiajiakang-ui/src/views/system/post/index.vue
create mode 100644 jiajiakang-ui/src/views/system/role/index.vue
create mode 100644 jiajiakang-ui/src/views/system/user/index.vue
create mode 100644 jiajiakang-ui/src/views/system/user/profile/index.vue
create mode 100644 jiajiakang-ui/src/views/system/user/profile/resetPwd.vue
create mode 100644 jiajiakang-ui/src/views/system/user/profile/userAvatar.vue
create mode 100644 jiajiakang-ui/src/views/system/user/profile/userInfo.vue
create mode 100644 jiajiakang-ui/src/views/tool/build/CodeTypeDialog.vue
create mode 100644 jiajiakang-ui/src/views/tool/build/DraggableItem.vue
create mode 100644 jiajiakang-ui/src/views/tool/build/IconsDialog.vue
create mode 100644 jiajiakang-ui/src/views/tool/build/RightPanel.vue
create mode 100644 jiajiakang-ui/src/views/tool/build/TreeNodeDialog.vue
create mode 100644 jiajiakang-ui/src/views/tool/build/index.vue
create mode 100644 jiajiakang-ui/src/views/tool/gen/basicInfoForm.vue
create mode 100644 jiajiakang-ui/src/views/tool/gen/editTable.vue
create mode 100644 jiajiakang-ui/src/views/tool/gen/genInfoForm.vue
create mode 100644 jiajiakang-ui/src/views/tool/gen/importTable.vue
create mode 100644 jiajiakang-ui/src/views/tool/gen/index.vue
create mode 100644 jiajiakang-ui/src/views/tool/swagger/index.vue
create mode 100644 jiajiakang-ui/vue.config.js
diff --git a/.gitignore b/.gitignore
index 2c0e049aa..5433d4642 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,6 +32,7 @@ nbbuild/
dist/
nbdist/
.nb-gradle/
+node_modules/
######################################################################
# Others
diff --git a/jiajiakang-admin/pom.xml b/jiajiakang-admin/pom.xml
index eb555912c..2ee6d463b 100644
--- a/jiajiakang-admin/pom.xml
+++ b/jiajiakang-admin/pom.xml
@@ -74,10 +74,10 @@
-
-
-
-
+
+ com.jiajiakang
+ jiajiakang-demo
+
diff --git a/jiajiakang-admin/src/main/java/com/jiajiakang/JiaJiaKangApplication.java b/jiajiakang-admin/src/main/java/com/jiajiakang/JiaJiaKangApplication.java
index 7f5116574..7a61c1f8e 100644
--- a/jiajiakang-admin/src/main/java/com/jiajiakang/JiaJiaKangApplication.java
+++ b/jiajiakang-admin/src/main/java/com/jiajiakang/JiaJiaKangApplication.java
@@ -18,6 +18,6 @@ public class JiaJiaKangApplication
{
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(JiaJiaKangApplication.class, args);
- System.out.println("(♥◠‿◠)ノ゙ ~~ 若依启动成功 ~~ ლ(´ڡ`ლ)゙");
+ System.out.println("(♥◠‿◠)ノ゙ ~~ 佳家康管理系统启动成功 ~~ ლ(´ڡ`ლ)゙");
}
}
diff --git a/jiajiakang-demo/pom.xml b/jiajiakang-demo/pom.xml
new file mode 100644
index 000000000..b54371aa0
--- /dev/null
+++ b/jiajiakang-demo/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ jiajiakang
+ com.jiajiakang
+ 3.4.0
+
+ 4.0.0
+
+ jiajiakang-demo
+
+
+ demo模块
+
+
+
+
+
+
+ com.jiajiakang
+ jiajiakang-common
+
+
+
+
+
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
new file mode 100644
index 000000000..9a2ccd887
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
@@ -0,0 +1,24 @@
+package com.jiajiakang.demo.controller;
+
+import com.jiajiakang.common.core.domain.AjaxResult;
+import com.jiajiakang.demo.feign.FeignTestService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/feign/test")
+public class FeignTestController {
+
+ private final FeignTestService feignTestService;
+
+ @GetMapping("/search/{wd}")
+ public AjaxResult search(@PathVariable String wd) {
+ String search = feignTestService.search(wd);
+ return AjaxResult.success("操作成功",search);
+ }
+}
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/package-info.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/package-info.java
new file mode 100644
index 000000000..fdcd3751c
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/controller/package-info.java
@@ -0,0 +1 @@
+package com.jiajiakang.demo.controller;
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/domain/package-info.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/domain/package-info.java
new file mode 100644
index 000000000..e588637b2
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/domain/package-info.java
@@ -0,0 +1 @@
+package com.jiajiakang.demo.domain;
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
new file mode 100644
index 000000000..7941f5354
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
@@ -0,0 +1,13 @@
+package com.jiajiakang.demo.feign;
+
+import com.jiajiakang.demo.feign.fallback.FeignTestFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = "baidu",url = "http://www.baidu.com",fallback = FeignTestFallback.class)
+public interface FeignTestService {
+
+ @GetMapping("/s")
+ String search(@RequestParam("wd") String wd);
+}
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
new file mode 100644
index 000000000..171873ac1
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
@@ -0,0 +1,12 @@
+package com.jiajiakang.demo.feign.fallback;
+
+
+import com.jiajiakang.demo.feign.FeignTestService;
+
+public class FeignTestFallback implements FeignTestService {
+
+ @Override
+ public String search(String wd) {
+ return null;
+ }
+}
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
new file mode 100644
index 000000000..76ac93ac7
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
@@ -0,0 +1 @@
+package com.jiajiakang.demo.feign.fallback;
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/package-info.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
new file mode 100644
index 000000000..ed3124300
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
@@ -0,0 +1 @@
+package com.jiajiakang.demo.feign;
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/mapper/package-info.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/mapper/package-info.java
new file mode 100644
index 000000000..76910e5f0
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/mapper/package-info.java
@@ -0,0 +1 @@
+package com.jiajiakang.demo.mapper;
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/service/impl/package-info.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/service/impl/package-info.java
new file mode 100644
index 000000000..0d704372b
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/service/impl/package-info.java
@@ -0,0 +1 @@
+package com.jiajiakang.demo.service.impl;
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/java/com/ruoyi/demo/service/package-info.java b/jiajiakang-demo/src/main/java/com/ruoyi/demo/service/package-info.java
new file mode 100644
index 000000000..30e480eea
--- /dev/null
+++ b/jiajiakang-demo/src/main/java/com/ruoyi/demo/service/package-info.java
@@ -0,0 +1 @@
+package com.jiajiakang.demo.service;
\ No newline at end of file
diff --git a/jiajiakang-demo/src/main/resources/mapper/demo/package-info.md b/jiajiakang-demo/src/main/resources/mapper/demo/package-info.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/jiajiakang-ui/.editorconfig b/jiajiakang-ui/.editorconfig
new file mode 100644
index 000000000..7034f9bf3
--- /dev/null
+++ b/jiajiakang-ui/.editorconfig
@@ -0,0 +1,22 @@
+# 告诉EditorConfig插件,这是根文件,不用继续往上查找
+root = true
+
+# 匹配全部文件
+[*]
+# 设置字符集
+charset = utf-8
+# 缩进风格,可选space、tab
+indent_style = space
+# 缩进的空格数
+indent_size = 2
+# 结尾换行符,可选lf、cr、crlf
+end_of_line = lf
+# 在文件结尾插入新行
+insert_final_newline = true
+# 删除一行中的前后空格
+trim_trailing_whitespace = true
+
+# 匹配md结尾的文件
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/jiajiakang-ui/.env.development b/jiajiakang-ui/.env.development
new file mode 100644
index 000000000..28b97c7e1
--- /dev/null
+++ b/jiajiakang-ui/.env.development
@@ -0,0 +1,8 @@
+# 开发环境配置
+ENV = 'development'
+
+# 若依管理系统/开发环境
+VUE_APP_BASE_API = '/dev-api'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/jiajiakang-ui/.env.production b/jiajiakang-ui/.env.production
new file mode 100644
index 000000000..27c717e97
--- /dev/null
+++ b/jiajiakang-ui/.env.production
@@ -0,0 +1,5 @@
+# 生产环境配置
+ENV = 'production'
+
+# 若依管理系统/生产环境
+VUE_APP_BASE_API = '/prod-api'
diff --git a/jiajiakang-ui/.env.staging b/jiajiakang-ui/.env.staging
new file mode 100644
index 000000000..619573673
--- /dev/null
+++ b/jiajiakang-ui/.env.staging
@@ -0,0 +1,7 @@
+NODE_ENV = production
+
+# 测试环境配置
+ENV = 'staging'
+
+# 若依管理系统/测试环境
+VUE_APP_BASE_API = '/stage-api'
diff --git a/jiajiakang-ui/.eslintignore b/jiajiakang-ui/.eslintignore
new file mode 100644
index 000000000..89be6f659
--- /dev/null
+++ b/jiajiakang-ui/.eslintignore
@@ -0,0 +1,10 @@
+# 忽略build目录下类型为js的文件的语法检查
+build/*.js
+# 忽略src/assets目录下文件的语法检查
+src/assets
+# 忽略public目录下文件的语法检查
+public
+# 忽略当前目录下为js的文件的语法检查
+*.js
+# 忽略当前目录下为vue的文件的语法检查
+*.vue
\ No newline at end of file
diff --git a/jiajiakang-ui/.eslintrc.js b/jiajiakang-ui/.eslintrc.js
new file mode 100644
index 000000000..82bbdeea6
--- /dev/null
+++ b/jiajiakang-ui/.eslintrc.js
@@ -0,0 +1,199 @@
+// ESlint 检查配置
+module.exports = {
+ root: true,
+ parserOptions: {
+ parser: 'babel-eslint',
+ sourceType: 'module'
+ },
+ env: {
+ browser: true,
+ node: true,
+ es6: true,
+ },
+ extends: ['plugin:vue/recommended', 'eslint:recommended'],
+
+ // add your custom rules here
+ //it is base on https://github.com/vuejs/eslint-config-vue
+ rules: {
+ "vue/max-attributes-per-line": [2, {
+ "singleline": 10,
+ "multiline": {
+ "max": 1,
+ "allowFirstLine": false
+ }
+ }],
+ "vue/singleline-html-element-content-newline": "off",
+ "vue/multiline-html-element-content-newline":"off",
+ "vue/name-property-casing": ["error", "PascalCase"],
+ "vue/no-v-html": "off",
+ 'accessor-pairs': 2,
+ 'arrow-spacing': [2, {
+ 'before': true,
+ 'after': true
+ }],
+ 'block-spacing': [2, 'always'],
+ 'brace-style': [2, '1tbs', {
+ 'allowSingleLine': true
+ }],
+ 'camelcase': [0, {
+ 'properties': 'always'
+ }],
+ 'comma-dangle': [2, 'never'],
+ 'comma-spacing': [2, {
+ 'before': false,
+ 'after': true
+ }],
+ 'comma-style': [2, 'last'],
+ 'constructor-super': 2,
+ 'curly': [2, 'multi-line'],
+ 'dot-location': [2, 'property'],
+ 'eol-last': 2,
+ 'eqeqeq': ["error", "always", {"null": "ignore"}],
+ 'generator-star-spacing': [2, {
+ 'before': true,
+ 'after': true
+ }],
+ 'handle-callback-err': [2, '^(err|error)$'],
+ 'indent': [2, 2, {
+ 'SwitchCase': 1
+ }],
+ 'jsx-quotes': [2, 'prefer-single'],
+ 'key-spacing': [2, {
+ 'beforeColon': false,
+ 'afterColon': true
+ }],
+ 'keyword-spacing': [2, {
+ 'before': true,
+ 'after': true
+ }],
+ 'new-cap': [2, {
+ 'newIsCap': true,
+ 'capIsNew': false
+ }],
+ 'new-parens': 2,
+ 'no-array-constructor': 2,
+ 'no-caller': 2,
+ 'no-console': 'off',
+ 'no-class-assign': 2,
+ 'no-cond-assign': 2,
+ 'no-const-assign': 2,
+ 'no-control-regex': 0,
+ 'no-delete-var': 2,
+ 'no-dupe-args': 2,
+ 'no-dupe-class-members': 2,
+ 'no-dupe-keys': 2,
+ 'no-duplicate-case': 2,
+ 'no-empty-character-class': 2,
+ 'no-empty-pattern': 2,
+ 'no-eval': 2,
+ 'no-ex-assign': 2,
+ 'no-extend-native': 2,
+ 'no-extra-bind': 2,
+ 'no-extra-boolean-cast': 2,
+ 'no-extra-parens': [2, 'functions'],
+ 'no-fallthrough': 2,
+ 'no-floating-decimal': 2,
+ 'no-func-assign': 2,
+ 'no-implied-eval': 2,
+ 'no-inner-declarations': [2, 'functions'],
+ 'no-invalid-regexp': 2,
+ 'no-irregular-whitespace': 2,
+ 'no-iterator': 2,
+ 'no-label-var': 2,
+ 'no-labels': [2, {
+ 'allowLoop': false,
+ 'allowSwitch': false
+ }],
+ 'no-lone-blocks': 2,
+ 'no-mixed-spaces-and-tabs': 2,
+ 'no-multi-spaces': 2,
+ 'no-multi-str': 2,
+ 'no-multiple-empty-lines': [2, {
+ 'max': 1
+ }],
+ 'no-native-reassign': 2,
+ 'no-negated-in-lhs': 2,
+ 'no-new-object': 2,
+ 'no-new-require': 2,
+ 'no-new-symbol': 2,
+ 'no-new-wrappers': 2,
+ 'no-obj-calls': 2,
+ 'no-octal': 2,
+ 'no-octal-escape': 2,
+ 'no-path-concat': 2,
+ 'no-proto': 2,
+ 'no-redeclare': 2,
+ 'no-regex-spaces': 2,
+ 'no-return-assign': [2, 'except-parens'],
+ 'no-self-assign': 2,
+ 'no-self-compare': 2,
+ 'no-sequences': 2,
+ 'no-shadow-restricted-names': 2,
+ 'no-spaced-func': 2,
+ 'no-sparse-arrays': 2,
+ 'no-this-before-super': 2,
+ 'no-throw-literal': 2,
+ 'no-trailing-spaces': 2,
+ 'no-undef': 2,
+ 'no-undef-init': 2,
+ 'no-unexpected-multiline': 2,
+ 'no-unmodified-loop-condition': 2,
+ 'no-unneeded-ternary': [2, {
+ 'defaultAssignment': false
+ }],
+ 'no-unreachable': 2,
+ 'no-unsafe-finally': 2,
+ 'no-unused-vars': [2, {
+ 'vars': 'all',
+ 'args': 'none'
+ }],
+ 'no-useless-call': 2,
+ 'no-useless-computed-key': 2,
+ 'no-useless-constructor': 2,
+ 'no-useless-escape': 0,
+ 'no-whitespace-before-property': 2,
+ 'no-with': 2,
+ 'one-var': [2, {
+ 'initialized': 'never'
+ }],
+ 'operator-linebreak': [2, 'after', {
+ 'overrides': {
+ '?': 'before',
+ ':': 'before'
+ }
+ }],
+ 'padded-blocks': [2, 'never'],
+ 'quotes': [2, 'single', {
+ 'avoidEscape': true,
+ 'allowTemplateLiterals': true
+ }],
+ 'semi': [2, 'never'],
+ 'semi-spacing': [2, {
+ 'before': false,
+ 'after': true
+ }],
+ 'space-before-blocks': [2, 'always'],
+ 'space-before-function-paren': [2, 'never'],
+ 'space-in-parens': [2, 'never'],
+ 'space-infix-ops': 2,
+ 'space-unary-ops': [2, {
+ 'words': true,
+ 'nonwords': false
+ }],
+ 'spaced-comment': [2, 'always', {
+ 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
+ }],
+ 'template-curly-spacing': [2, 'never'],
+ 'use-isnan': 2,
+ 'valid-typeof': 2,
+ 'wrap-iife': [2, 'any'],
+ 'yield-star-spacing': [2, 'both'],
+ 'yoda': [2, 'never'],
+ 'prefer-const': 2,
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+ 'object-curly-spacing': [2, 'always', {
+ objectsInObjects: false
+ }],
+ 'array-bracket-spacing': [2, 'never']
+ }
+}
diff --git a/jiajiakang-ui/.gitignore b/jiajiakang-ui/.gitignore
new file mode 100644
index 000000000..78a752d87
--- /dev/null
+++ b/jiajiakang-ui/.gitignore
@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock
diff --git a/jiajiakang-ui/README.md b/jiajiakang-ui/README.md
new file mode 100644
index 000000000..a857617b6
--- /dev/null
+++ b/jiajiakang-ui/README.md
@@ -0,0 +1,30 @@
+## 开发
+
+```bash
+# 克隆项目
+git clone https://gitee.com/y_project/RuoYi-Vue
+
+# 进入项目目录
+cd ruoyi-ui
+
+# 安装依赖
+npm install
+
+# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
+npm install --registry=https://registry.npm.taobao.org
+
+# 启动服务
+npm run dev
+```
+
+浏览器访问 http://localhost:80
+
+## 发布
+
+```bash
+# 构建测试环境
+npm run build:stage
+
+# 构建生产环境
+npm run build:prod
+```
\ No newline at end of file
diff --git a/jiajiakang-ui/babel.config.js b/jiajiakang-ui/babel.config.js
new file mode 100644
index 000000000..b99f00148
--- /dev/null
+++ b/jiajiakang-ui/babel.config.js
@@ -0,0 +1,13 @@
+module.exports = {
+ presets: [
+ // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
+ '@vue/cli-plugin-babel/preset'
+ ],
+ 'env': {
+ 'development': {
+ // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
+ // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
+ 'plugins': ['dynamic-import-node']
+ }
+ }
+}
diff --git a/jiajiakang-ui/bin/build.bat b/jiajiakang-ui/bin/build.bat
new file mode 100644
index 000000000..dda590d22
--- /dev/null
+++ b/jiajiakang-ui/bin/build.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [Ϣ] Weḅdistļ
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+npm run build:prod
+
+pause
\ No newline at end of file
diff --git a/jiajiakang-ui/bin/package.bat b/jiajiakang-ui/bin/package.bat
new file mode 100644
index 000000000..82817497e
--- /dev/null
+++ b/jiajiakang-ui/bin/package.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [Ϣ] װWeḅnode_modulesļ
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+npm install --registry=https://registry.npm.taobao.org
+
+pause
\ No newline at end of file
diff --git a/jiajiakang-ui/bin/run-web.bat b/jiajiakang-ui/bin/run-web.bat
new file mode 100644
index 000000000..a938e8921
--- /dev/null
+++ b/jiajiakang-ui/bin/run-web.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [Ϣ] ʹ Vue Web ̡
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+npm run dev
+
+pause
\ No newline at end of file
diff --git a/jiajiakang-ui/build/index.js b/jiajiakang-ui/build/index.js
new file mode 100644
index 000000000..0c57de2aa
--- /dev/null
+++ b/jiajiakang-ui/build/index.js
@@ -0,0 +1,35 @@
+const { run } = require('runjs')
+const chalk = require('chalk')
+const config = require('../vue.config.js')
+const rawArgv = process.argv.slice(2)
+const args = rawArgv.join(' ')
+
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
+ const report = rawArgv.includes('--report')
+
+ run(`vue-cli-service build ${args}`)
+
+ const port = 9526
+ const publicPath = config.publicPath
+
+ var connect = require('connect')
+ var serveStatic = require('serve-static')
+ const app = connect()
+
+ app.use(
+ publicPath,
+ serveStatic('./dist', {
+ index: ['index.html', '/']
+ })
+ )
+
+ app.listen(port, function () {
+ console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
+ if (report) {
+ console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
+ }
+
+ })
+} else {
+ run(`vue-cli-service build ${args}`)
+}
diff --git a/jiajiakang-ui/package.json b/jiajiakang-ui/package.json
new file mode 100644
index 000000000..57fa9dbb5
--- /dev/null
+++ b/jiajiakang-ui/package.json
@@ -0,0 +1,87 @@
+{
+ "name": "ruoyi",
+ "version": "3.4.0",
+ "description": "若依管理系统",
+ "author": "若依",
+ "license": "MIT",
+ "scripts": {
+ "dev": "vue-cli-service serve",
+ "build:prod": "vue-cli-service build",
+ "build:stage": "vue-cli-service build --mode staging",
+ "preview": "node build/index.js --preview",
+ "lint": "eslint --ext .js,.vue src"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "src/**/*.{js,vue}": [
+ "eslint --fix",
+ "git add"
+ ]
+ },
+ "keywords": [
+ "vue",
+ "admin",
+ "dashboard",
+ "element-ui",
+ "boilerplate",
+ "admin-template",
+ "management-system"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://gitee.com/y_project/RuoYi-Vue.git"
+ },
+ "dependencies": {
+ "@riophae/vue-treeselect": "0.4.0",
+ "axios": "0.21.0",
+ "clipboard": "2.0.6",
+ "core-js": "3.8.1",
+ "echarts": "4.9.0",
+ "element-ui": "2.15.0",
+ "file-saver": "2.0.4",
+ "fuse.js": "6.4.3",
+ "highlight.js": "9.18.5",
+ "js-beautify": "1.13.0",
+ "js-cookie": "2.2.1",
+ "jsencrypt": "3.0.0-rc.1",
+ "nprogress": "0.2.0",
+ "quill": "1.3.7",
+ "screenfull": "5.0.2",
+ "sortablejs": "1.10.2",
+ "vue": "2.6.12",
+ "vue-count-to": "1.0.13",
+ "vue-cropper": "0.5.5",
+ "vue-router": "3.4.9",
+ "vuedraggable": "2.24.3",
+ "vuex": "3.6.0"
+ },
+ "devDependencies": {
+ "@vue/cli-plugin-babel": "4.4.6",
+ "@vue/cli-plugin-eslint": "4.4.6",
+ "@vue/cli-service": "4.4.6",
+ "babel-eslint": "10.1.0",
+ "chalk": "4.1.0",
+ "connect": "3.6.6",
+ "eslint": "7.15.0",
+ "eslint-plugin-vue": "7.2.0",
+ "lint-staged": "10.5.3",
+ "runjs": "4.4.2",
+ "sass": "1.32.0",
+ "sass-loader": "10.1.0",
+ "script-ext-html-webpack-plugin": "2.1.5",
+ "svg-sprite-loader": "5.1.1",
+ "vue-template-compiler": "2.6.12"
+ },
+ "engines": {
+ "node": ">=8.9",
+ "npm": ">= 3.0.0"
+ },
+ "browserslist": [
+ "> 1%",
+ "last 2 versions"
+ ]
+}
diff --git a/jiajiakang-ui/public/favicon.ico b/jiajiakang-ui/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..e26376026420542212ed58d90d0ed34f554fa4ae
GIT binary patch
literal 5663
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
+
+
+
+
+
+
+
+ <%= webpackConfig.name %>
+
+
+
+
+
+
diff --git a/jiajiakang-ui/public/robots.txt b/jiajiakang-ui/public/robots.txt
new file mode 100644
index 000000000..77470cb39
--- /dev/null
+++ b/jiajiakang-ui/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
\ No newline at end of file
diff --git a/jiajiakang-ui/src/App.vue b/jiajiakang-ui/src/App.vue
new file mode 100644
index 000000000..e448b1130
--- /dev/null
+++ b/jiajiakang-ui/src/App.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/jiajiakang-ui/src/api/login.js b/jiajiakang-ui/src/api/login.js
new file mode 100644
index 000000000..869cd9fda
--- /dev/null
+++ b/jiajiakang-ui/src/api/login.js
@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+ const data = {
+ username,
+ password,
+ code,
+ uuid
+ }
+ return request({
+ url: '/login',
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+ return request({
+ url: '/getInfo',
+ method: 'get'
+ })
+}
+
+// 退出方法
+export function logout() {
+ return request({
+ url: '/logout',
+ method: 'post'
+ })
+}
+
+// 获取验证码
+export function getCodeImg() {
+ return request({
+ url: '/captchaImage',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/menu.js b/jiajiakang-ui/src/api/menu.js
new file mode 100644
index 000000000..faef101c4
--- /dev/null
+++ b/jiajiakang-ui/src/api/menu.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 获取路由
+export const getRouters = () => {
+ return request({
+ url: '/getRouters',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/monitor/cache.js b/jiajiakang-ui/src/api/monitor/cache.js
new file mode 100644
index 000000000..59d3505a4
--- /dev/null
+++ b/jiajiakang-ui/src/api/monitor/cache.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 查询缓存详细
+export function getCache() {
+ return request({
+ url: '/monitor/cache',
+ method: 'get'
+ })
+}
diff --git a/jiajiakang-ui/src/api/monitor/job.js b/jiajiakang-ui/src/api/monitor/job.js
new file mode 100644
index 000000000..58c43434a
--- /dev/null
+++ b/jiajiakang-ui/src/api/monitor/job.js
@@ -0,0 +1,80 @@
+import request from '@/utils/request'
+
+// 查询定时任务调度列表
+export function listJob(query) {
+ return request({
+ url: '/monitor/job/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询定时任务调度详细
+export function getJob(jobId) {
+ return request({
+ url: '/monitor/job/' + jobId,
+ method: 'get'
+ })
+}
+
+// 新增定时任务调度
+export function addJob(data) {
+ return request({
+ url: '/monitor/job',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改定时任务调度
+export function updateJob(data) {
+ return request({
+ url: '/monitor/job',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除定时任务调度
+export function delJob(jobId) {
+ return request({
+ url: '/monitor/job/' + jobId,
+ method: 'delete'
+ })
+}
+
+// 导出定时任务调度
+export function exportJob(query) {
+ return request({
+ url: '/monitor/job/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// 任务状态修改
+export function changeJobStatus(jobId, status) {
+ const data = {
+ jobId,
+ status
+ }
+ return request({
+ url: '/monitor/job/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
+
+
+// 定时任务立即执行一次
+export function runJob(jobId, jobGroup) {
+ const data = {
+ jobId,
+ jobGroup
+ }
+ return request({
+ url: '/monitor/job/run',
+ method: 'put',
+ data: data
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/monitor/jobLog.js b/jiajiakang-ui/src/api/monitor/jobLog.js
new file mode 100644
index 000000000..be1fffdfa
--- /dev/null
+++ b/jiajiakang-ui/src/api/monitor/jobLog.js
@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 查询调度日志列表
+export function listJobLog(query) {
+ return request({
+ url: '/monitor/jobLog/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除调度日志
+export function delJobLog(jobLogId) {
+ return request({
+ url: '/monitor/jobLog/' + jobLogId,
+ method: 'delete'
+ })
+}
+
+// 清空调度日志
+export function cleanJobLog() {
+ return request({
+ url: '/monitor/jobLog/clean',
+ method: 'delete'
+ })
+}
+
+// 导出调度日志
+export function exportJobLog(query) {
+ return request({
+ url: '/monitor/jobLog/export',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/monitor/logininfor.js b/jiajiakang-ui/src/api/monitor/logininfor.js
new file mode 100644
index 000000000..383d61f30
--- /dev/null
+++ b/jiajiakang-ui/src/api/monitor/logininfor.js
@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 查询登录日志列表
+export function list(query) {
+ return request({
+ url: '/monitor/logininfor/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除登录日志
+export function delLogininfor(infoId) {
+ return request({
+ url: '/monitor/logininfor/' + infoId,
+ method: 'delete'
+ })
+}
+
+// 清空登录日志
+export function cleanLogininfor() {
+ return request({
+ url: '/monitor/logininfor/clean',
+ method: 'delete'
+ })
+}
+
+// 导出登录日志
+export function exportLogininfor(query) {
+ return request({
+ url: '/monitor/logininfor/export',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/monitor/online.js b/jiajiakang-ui/src/api/monitor/online.js
new file mode 100644
index 000000000..bd2213780
--- /dev/null
+++ b/jiajiakang-ui/src/api/monitor/online.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 查询在线用户列表
+export function list(query) {
+ return request({
+ url: '/monitor/online/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 强退用户
+export function forceLogout(tokenId) {
+ return request({
+ url: '/monitor/online/' + tokenId,
+ method: 'delete'
+ })
+}
diff --git a/jiajiakang-ui/src/api/monitor/operlog.js b/jiajiakang-ui/src/api/monitor/operlog.js
new file mode 100644
index 000000000..f09b8ed8f
--- /dev/null
+++ b/jiajiakang-ui/src/api/monitor/operlog.js
@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 查询操作日志列表
+export function list(query) {
+ return request({
+ url: '/monitor/operlog/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除操作日志
+export function delOperlog(operId) {
+ return request({
+ url: '/monitor/operlog/' + operId,
+ method: 'delete'
+ })
+}
+
+// 清空操作日志
+export function cleanOperlog() {
+ return request({
+ url: '/monitor/operlog/clean',
+ method: 'delete'
+ })
+}
+
+// 导出操作日志
+export function exportOperlog(query) {
+ return request({
+ url: '/monitor/operlog/export',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/monitor/server.js b/jiajiakang-ui/src/api/monitor/server.js
new file mode 100644
index 000000000..feed7836c
--- /dev/null
+++ b/jiajiakang-ui/src/api/monitor/server.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 查询服务器详细
+export function getServer() {
+ return request({
+ url: '/monitor/server',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/system/config.js b/jiajiakang-ui/src/api/system/config.js
new file mode 100644
index 000000000..aff093d43
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/config.js
@@ -0,0 +1,69 @@
+import request from '@/utils/request'
+
+// 查询参数列表
+export function listConfig(query) {
+ return request({
+ url: '/system/config/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询参数详细
+export function getConfig(configId) {
+ return request({
+ url: '/system/config/' + configId,
+ method: 'get'
+ })
+}
+
+// 根据参数键名查询参数值
+export function getConfigKey(configKey) {
+ return request({
+ url: '/system/config/configKey/' + configKey,
+ method: 'get'
+ })
+}
+
+// 新增参数配置
+export function addConfig(data) {
+ return request({
+ url: '/system/config',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改参数配置
+export function updateConfig(data) {
+ return request({
+ url: '/system/config',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除参数配置
+export function delConfig(configId) {
+ return request({
+ url: '/system/config/' + configId,
+ method: 'delete'
+ })
+}
+
+// 清理参数缓存
+export function clearCache() {
+ return request({
+ url: '/system/config/clearCache',
+ method: 'delete'
+ })
+}
+
+// 导出参数
+export function exportConfig(query) {
+ return request({
+ url: '/system/config/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/jiajiakang-ui/src/api/system/dept.js b/jiajiakang-ui/src/api/system/dept.js
new file mode 100644
index 000000000..2804676ff
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/dept.js
@@ -0,0 +1,68 @@
+import request from '@/utils/request'
+
+// 查询部门列表
+export function listDept(query) {
+ return request({
+ url: '/system/dept/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询部门列表(排除节点)
+export function listDeptExcludeChild(deptId) {
+ return request({
+ url: '/system/dept/list/exclude/' + deptId,
+ method: 'get'
+ })
+}
+
+// 查询部门详细
+export function getDept(deptId) {
+ return request({
+ url: '/system/dept/' + deptId,
+ method: 'get'
+ })
+}
+
+// 查询部门下拉树结构
+export function treeselect() {
+ return request({
+ url: '/system/dept/treeselect',
+ method: 'get'
+ })
+}
+
+// 根据角色ID查询部门树结构
+export function roleDeptTreeselect(roleId) {
+ return request({
+ url: '/system/dept/roleDeptTreeselect/' + roleId,
+ method: 'get'
+ })
+}
+
+// 新增部门
+export function addDept(data) {
+ return request({
+ url: '/system/dept',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改部门
+export function updateDept(data) {
+ return request({
+ url: '/system/dept',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除部门
+export function delDept(deptId) {
+ return request({
+ url: '/system/dept/' + deptId,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/system/dict/data.js b/jiajiakang-ui/src/api/system/dict/data.js
new file mode 100644
index 000000000..d7aca8923
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/dict/data.js
@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询字典数据列表
+export function listData(query) {
+ return request({
+ url: '/system/dict/data/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'get'
+ })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+ return request({
+ url: '/system/dict/data/type/' + dictType,
+ method: 'get'
+ })
+}
+
+// 新增字典数据
+export function addData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典数据
+export function updateData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'delete'
+ })
+}
+
+// 导出字典数据
+export function exportData(query) {
+ return request({
+ url: '/system/dict/data/export',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/system/dict/type.js b/jiajiakang-ui/src/api/system/dict/type.js
new file mode 100644
index 000000000..37034d2fc
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/dict/type.js
@@ -0,0 +1,69 @@
+import request from '@/utils/request'
+
+// 查询字典类型列表
+export function listType(query) {
+ return request({
+ url: '/system/dict/type/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典类型详细
+export function getType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'get'
+ })
+}
+
+// 新增字典类型
+export function addType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典类型
+export function updateType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典类型
+export function delType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'delete'
+ })
+}
+
+// 清理参数缓存
+export function clearCache() {
+ return request({
+ url: '/system/dict/type/clearCache',
+ method: 'delete'
+ })
+}
+
+// 导出字典类型
+export function exportType(query) {
+ return request({
+ url: '/system/dict/type/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+ return request({
+ url: '/system/dict/type/optionselect',
+ method: 'get'
+ })
+}
diff --git a/jiajiakang-ui/src/api/system/menu.js b/jiajiakang-ui/src/api/system/menu.js
new file mode 100644
index 000000000..f6415c656
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/menu.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询菜单列表
+export function listMenu(query) {
+ return request({
+ url: '/system/menu/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询菜单详细
+export function getMenu(menuId) {
+ return request({
+ url: '/system/menu/' + menuId,
+ method: 'get'
+ })
+}
+
+// 查询菜单下拉树结构
+export function treeselect() {
+ return request({
+ url: '/system/menu/treeselect',
+ method: 'get'
+ })
+}
+
+// 根据角色ID查询菜单下拉树结构
+export function roleMenuTreeselect(roleId) {
+ return request({
+ url: '/system/menu/roleMenuTreeselect/' + roleId,
+ method: 'get'
+ })
+}
+
+// 新增菜单
+export function addMenu(data) {
+ return request({
+ url: '/system/menu',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改菜单
+export function updateMenu(data) {
+ return request({
+ url: '/system/menu',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除菜单
+export function delMenu(menuId) {
+ return request({
+ url: '/system/menu/' + menuId,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/system/notice.js b/jiajiakang-ui/src/api/system/notice.js
new file mode 100644
index 000000000..c274ea5ba
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/notice.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询公告列表
+export function listNotice(query) {
+ return request({
+ url: '/system/notice/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询公告详细
+export function getNotice(noticeId) {
+ return request({
+ url: '/system/notice/' + noticeId,
+ method: 'get'
+ })
+}
+
+// 新增公告
+export function addNotice(data) {
+ return request({
+ url: '/system/notice',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改公告
+export function updateNotice(data) {
+ return request({
+ url: '/system/notice',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除公告
+export function delNotice(noticeId) {
+ return request({
+ url: '/system/notice/' + noticeId,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/system/post.js b/jiajiakang-ui/src/api/system/post.js
new file mode 100644
index 000000000..434cd3513
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/post.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询岗位列表
+export function listPost(query) {
+ return request({
+ url: '/system/post/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询岗位详细
+export function getPost(postId) {
+ return request({
+ url: '/system/post/' + postId,
+ method: 'get'
+ })
+}
+
+// 新增岗位
+export function addPost(data) {
+ return request({
+ url: '/system/post',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改岗位
+export function updatePost(data) {
+ return request({
+ url: '/system/post',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除岗位
+export function delPost(postId) {
+ return request({
+ url: '/system/post/' + postId,
+ method: 'delete'
+ })
+}
+
+// 导出岗位
+export function exportPost(query) {
+ return request({
+ url: '/system/post/export',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/system/role.js b/jiajiakang-ui/src/api/system/role.js
new file mode 100644
index 000000000..463501ce8
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/role.js
@@ -0,0 +1,75 @@
+import request from '@/utils/request'
+
+// 查询角色列表
+export function listRole(query) {
+ return request({
+ url: '/system/role/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询角色详细
+export function getRole(roleId) {
+ return request({
+ url: '/system/role/' + roleId,
+ method: 'get'
+ })
+}
+
+// 新增角色
+export function addRole(data) {
+ return request({
+ url: '/system/role',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改角色
+export function updateRole(data) {
+ return request({
+ url: '/system/role',
+ method: 'put',
+ data: data
+ })
+}
+
+// 角色数据权限
+export function dataScope(data) {
+ return request({
+ url: '/system/role/dataScope',
+ method: 'put',
+ data: data
+ })
+}
+
+// 角色状态修改
+export function changeRoleStatus(roleId, status) {
+ const data = {
+ roleId,
+ status
+ }
+ return request({
+ url: '/system/role/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除角色
+export function delRole(roleId) {
+ return request({
+ url: '/system/role/' + roleId,
+ method: 'delete'
+ })
+}
+
+// 导出角色
+export function exportRole(query) {
+ return request({
+ url: '/system/role/export',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/jiajiakang-ui/src/api/system/user.js b/jiajiakang-ui/src/api/system/user.js
new file mode 100644
index 000000000..3b9a776a7
--- /dev/null
+++ b/jiajiakang-ui/src/api/system/user.js
@@ -0,0 +1,127 @@
+import request from '@/utils/request'
+import { praseStrEmpty } from "@/utils/ruoyi";
+
+// 查询用户列表
+export function listUser(query) {
+ return request({
+ url: '/system/user/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询用户详细
+export function getUser(userId) {
+ return request({
+ url: '/system/user/' + praseStrEmpty(userId),
+ method: 'get'
+ })
+}
+
+// 新增用户
+export function addUser(data) {
+ return request({
+ url: '/system/user',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改用户
+export function updateUser(data) {
+ return request({
+ url: '/system/user',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除用户
+export function delUser(userId) {
+ return request({
+ url: '/system/user/' + userId,
+ method: 'delete'
+ })
+}
+
+// 导出用户
+export function exportUser(query) {
+ return request({
+ url: '/system/user/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// 用户密码重置
+export function resetUserPwd(userId, password) {
+ const data = {
+ userId,
+ password
+ }
+ return request({
+ url: '/system/user/resetPwd',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户状态修改
+export function changeUserStatus(userId, status) {
+ const data = {
+ userId,
+ status
+ }
+ return request({
+ url: '/system/user/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+ return request({
+ url: '/system/user/profile',
+ method: 'get'
+ })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+ return request({
+ url: '/system/user/profile',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+ const data = {
+ oldPassword,
+ newPassword
+ }
+ return request({
+ url: '/system/user/profile/updatePwd',
+ method: 'put',
+ params: data
+ })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+ return request({
+ url: '/system/user/profile/avatar',
+ method: 'post',
+ data: data
+ })
+}
+
+// 下载用户导入模板
+export function importTemplate() {
+ return request({
+ url: '/system/user/importTemplate',
+ method: 'get'
+ })
+}
diff --git a/jiajiakang-ui/src/api/tool/gen.js b/jiajiakang-ui/src/api/tool/gen.js
new file mode 100644
index 000000000..45069278f
--- /dev/null
+++ b/jiajiakang-ui/src/api/tool/gen.js
@@ -0,0 +1,76 @@
+import request from '@/utils/request'
+
+// 查询生成表数据
+export function listTable(query) {
+ return request({
+ url: '/tool/gen/list',
+ method: 'get',
+ params: query
+ })
+}
+// 查询db数据库列表
+export function listDbTable(query) {
+ return request({
+ url: '/tool/gen/db/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询表详细信息
+export function getGenTable(tableId) {
+ return request({
+ url: '/tool/gen/' + tableId,
+ method: 'get'
+ })
+}
+
+// 修改代码生成信息
+export function updateGenTable(data) {
+ return request({
+ url: '/tool/gen',
+ method: 'put',
+ data: data
+ })
+}
+
+// 导入表
+export function importTable(data) {
+ return request({
+ url: '/tool/gen/importTable',
+ method: 'post',
+ params: data
+ })
+}
+
+// 预览生成代码
+export function previewTable(tableId) {
+ return request({
+ url: '/tool/gen/preview/' + tableId,
+ method: 'get'
+ })
+}
+
+// 删除表数据
+export function delTable(tableId) {
+ return request({
+ url: '/tool/gen/' + tableId,
+ method: 'delete'
+ })
+}
+
+// 生成代码(自定义路径)
+export function genCode(tableName) {
+ return request({
+ url: '/tool/gen/genCode/' + tableName,
+ method: 'get'
+ })
+}
+
+// 同步数据库
+export function synchDb(tableName) {
+ return request({
+ url: '/tool/gen/synchDb/' + tableName,
+ method: 'get'
+ })
+}
diff --git a/jiajiakang-ui/src/assets/401_images/401.gif b/jiajiakang-ui/src/assets/401_images/401.gif
new file mode 100644
index 0000000000000000000000000000000000000000..cd6e0d9433421b3f29d0ec0c40f755e354728000
GIT binary patch
literal 164227
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