diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development
index 302ecd1a..c1482767 100644
--- a/ruoyi-ui/.env.development
+++ b/ruoyi-ui/.env.development
@@ -1,10 +1,10 @@
# 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = 智能作业系统
# 开发环境配置
ENV = 'development'
-# 若依管理系统/开发环境
+# 智能作业系统/开发环境
VUE_APP_BASE_API = '/dev-api'
# 路由懒加载
diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production
index cb064ec8..55776496 100644
--- a/ruoyi-ui/.env.production
+++ b/ruoyi-ui/.env.production
@@ -1,8 +1,8 @@
-# 页面标题
-VUE_APP_TITLE = 若依管理系统
-
-# 生产环境配置
-ENV = 'production'
-
-# 若依管理系统/生产环境
-VUE_APP_BASE_API = '/prod-api'
+# 页面标题
+VUE_APP_TITLE = 智能作业系统
+
+# 生产环境配置
+ENV = 'production'
+
+# 智能作业系统/生产环境
+VUE_APP_BASE_API = '/prod-api'
diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging
index a47af9a2..b4042af9 100644
--- a/ruoyi-ui/.env.staging
+++ b/ruoyi-ui/.env.staging
@@ -1,10 +1,10 @@
-# 页面标题
-VUE_APP_TITLE = 若依管理系统
-
-NODE_ENV = production
-
-# 测试环境配置
-ENV = 'staging'
-
-# 若依管理系统/测试环境
-VUE_APP_BASE_API = '/stage-api'
+# 页面标题
+VUE_APP_TITLE = 智能作业系统
+
+NODE_ENV = production
+
+# 测试环境配置
+ENV = 'staging'
+
+# 智能作业系统/测试环境
+VUE_APP_BASE_API = '/stage-api'
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index 0e77a613..1664dd20 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -1,7 +1,7 @@
{
"name": "ruoyi",
"version": "3.6.1",
- "description": "若依管理系统",
+ "description": "智能作业系统",
"author": "若依",
"license": "MIT",
"scripts": {
diff --git a/ruoyi-ui/src/App.vue b/ruoyi-ui/src/App.vue
index a2c4b872..ba498506 100644
--- a/ruoyi-ui/src/App.vue
+++ b/ruoyi-ui/src/App.vue
@@ -1,28 +1,112 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js
index 6b0cda03..c23e7fb2 100644
--- a/ruoyi-ui/src/api/login.js
+++ b/ruoyi-ui/src/api/login.js
@@ -1,61 +1,61 @@
-import request from '@/utils/request'
-
-// 登录方法
-export function login(username, password, code, uuid) {
- return request({
- url: '/auth/login',
- headers: {
- isToken: false
- },
- method: 'post',
- data: { username, password, code, uuid }
- })
-}
-
-// 注册方法
-export function register(data) {
- return request({
- url: '/auth/register',
- headers: {
- isToken: false
- },
- method: 'post',
- data: data
- })
-}
-
-// 刷新方法
-export function refreshToken() {
- return request({
- url: '/auth/refresh',
- method: 'post'
- })
-}
-
-// 获取用户详细信息
-export function getInfo() {
- return request({
- url: '/system/user/getInfo',
- method: 'get'
- })
-}
-
-// 退出方法
-export function logout() {
- return request({
- url: '/auth/logout',
- method: 'delete'
- })
-}
-
-// 获取验证码
-export function getCodeImg() {
- return request({
- url: '/code',
- headers: {
- isToken: false
- },
- method: 'get',
- timeout: 20000
- })
-}
\ No newline at end of file
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+ return request({
+ url: '/system/login',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: { username, password, code, uuid }
+ })
+}
+
+// 注册方法
+export function register(data) {
+ return request({
+ url: '/system/register',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: data
+ })
+}
+
+// 刷新方法
+export function refreshToken() {
+ return request({
+ url: '/system/refresh',
+ method: 'post'
+ })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+ return request({
+ url: '/system/user/getInfo',
+ method: 'get'
+ })
+}
+
+// 退出方法
+export function logout() {
+ return request({
+ url: '/system/logout',
+ method: 'delete'
+ })
+}
+
+// 获取验证码
+export function getCodeImg() {
+ return request({
+ url: '/code',
+ headers: {
+ isToken: false
+ },
+ method: 'get',
+ timeout: 20000
+ })
+}
diff --git a/ruoyi-ui/src/api/system/menu.js b/ruoyi-ui/src/api/system/menu.js
index 97258ee6..ece5e81c 100644
--- a/ruoyi-ui/src/api/system/menu.js
+++ b/ruoyi-ui/src/api/system/menu.js
@@ -1,60 +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
+ 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'
+ })
+}
diff --git a/ruoyi-ui/src/assets/img/banner/bg.png b/ruoyi-ui/src/assets/img/banner/bg.png
new file mode 100644
index 00000000..2a34a0dc
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/bg.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/head_avatar.png b/ruoyi-ui/src/assets/img/banner/head_avatar.png
new file mode 100644
index 00000000..7854a979
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/head_avatar.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/head_bank_logo.png b/ruoyi-ui/src/assets/img/banner/head_bank_logo.png
new file mode 100644
index 00000000..2a2dd33c
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/head_bank_logo.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/header_bg.png b/ruoyi-ui/src/assets/img/banner/header_bg.png
new file mode 100644
index 00000000..6f50cd0b
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/header_bg.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/new_pro.png b/ruoyi-ui/src/assets/img/banner/new_pro.png
new file mode 100644
index 00000000..ec54678a
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/new_pro.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/newpro.png b/ruoyi-ui/src/assets/img/banner/newpro.png
new file mode 100644
index 00000000..df89d2f8
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/newpro.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/pro_hot.png b/ruoyi-ui/src/assets/img/banner/pro_hot.png
new file mode 100644
index 00000000..fa19d82f
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/pro_hot.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/red_black.png b/ruoyi-ui/src/assets/img/banner/red_black.png
new file mode 100644
index 00000000..fbf01723
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/red_black.png differ
diff --git a/ruoyi-ui/src/assets/img/banner/user.png b/ruoyi-ui/src/assets/img/banner/user.png
new file mode 100644
index 00000000..bba9f171
Binary files /dev/null and b/ruoyi-ui/src/assets/img/banner/user.png differ
diff --git a/ruoyi-ui/src/assets/img/home/head_bg_logo.png b/ruoyi-ui/src/assets/img/home/head_bg_logo.png
new file mode 100644
index 00000000..8a250cb4
Binary files /dev/null and b/ruoyi-ui/src/assets/img/home/head_bg_logo.png differ
diff --git a/ruoyi-ui/src/assets/logo-imgs/安全退出icon@2x.png b/ruoyi-ui/src/assets/logo-imgs/安全退出icon@2x.png
new file mode 100644
index 00000000..1b5bd754
Binary files /dev/null and b/ruoyi-ui/src/assets/logo-imgs/安全退出icon@2x.png differ
diff --git a/ruoyi-ui/src/assets/styles/sidebar.scss b/ruoyi-ui/src/assets/styles/sidebar.scss
index 43d5f9a9..7358c58c 100644
--- a/ruoyi-ui/src/assets/styles/sidebar.scss
+++ b/ruoyi-ui/src/assets/styles/sidebar.scss
@@ -1,227 +1,228 @@
-#app {
-
- .main-container {
- min-height: 100%;
- transition: margin-left .28s;
- margin-left: $base-sidebar-width;
- position: relative;
- }
-
- .sidebarHide {
- margin-left: 0!important;
- }
-
- .sidebar-container {
- -webkit-transition: width .28s;
- transition: width 0.28s;
- width: $base-sidebar-width !important;
- background-color: $base-menu-background;
- height: 100%;
- position: fixed;
- font-size: 0px;
- top: 0;
- bottom: 0;
- left: 0;
- z-index: 1001;
- overflow: hidden;
- -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
- box-shadow: 2px 0 6px rgba(0,21,41,.35);
-
- // reset element-ui css
- .horizontal-collapse-transition {
- transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
- }
-
- .scrollbar-wrapper {
- overflow-x: hidden !important;
- }
-
- .el-scrollbar__bar.is-vertical {
- right: 0px;
- }
-
- .el-scrollbar {
- height: 100%;
- }
-
- &.has-logo {
- .el-scrollbar {
- height: calc(100% - 50px);
- }
- }
-
- .is-horizontal {
- display: none;
- }
-
- a {
- display: inline-block;
- width: 100%;
- overflow: hidden;
- }
-
- .svg-icon {
- margin-right: 16px;
- }
-
- .el-menu {
- border: none;
- height: 100%;
- width: 100% !important;
- }
-
- .el-menu-item, .el-submenu__title {
- overflow: hidden !important;
- text-overflow: ellipsis !important;
- white-space: nowrap !important;
- }
-
- // menu hover
- .submenu-title-noDropdown,
- .el-submenu__title {
- &:hover {
- background-color: rgba(0, 0, 0, 0.06) !important;
- }
- }
-
- & .theme-dark .is-active > .el-submenu__title {
- color: $base-menu-color-active !important;
- }
-
- & .nest-menu .el-submenu>.el-submenu__title,
- & .el-submenu .el-menu-item {
- min-width: $base-sidebar-width !important;
-
- &:hover {
- background-color: rgba(0, 0, 0, 0.06) !important;
- }
- }
-
- & .theme-dark .nest-menu .el-submenu>.el-submenu__title,
- & .theme-dark .el-submenu .el-menu-item {
- background-color: $base-sub-menu-background !important;
-
- &:hover {
- background-color: $base-sub-menu-hover !important;
- }
- }
- }
-
- .hideSidebar {
- .sidebar-container {
- width: 54px !important;
- }
-
- .main-container {
- margin-left: 54px;
- }
-
- .submenu-title-noDropdown {
- padding: 0 !important;
- position: relative;
-
- .el-tooltip {
- padding: 0 !important;
-
- .svg-icon {
- margin-left: 20px;
- }
- }
- }
-
- .el-submenu {
- overflow: hidden;
-
- &>.el-submenu__title {
- padding: 0 !important;
-
- .svg-icon {
- margin-left: 20px;
- }
-
- }
- }
-
- .el-menu--collapse {
- .el-submenu {
- &>.el-submenu__title {
- &>span {
- height: 0;
- width: 0;
- overflow: hidden;
- visibility: hidden;
- display: inline-block;
- }
- }
- }
- }
- }
-
- .el-menu--collapse .el-menu .el-submenu {
- min-width: $base-sidebar-width !important;
- }
-
- // mobile responsive
- .mobile {
- .main-container {
- margin-left: 0px;
- }
-
- .sidebar-container {
- transition: transform .28s;
- width: $base-sidebar-width !important;
- }
-
- &.hideSidebar {
- .sidebar-container {
- pointer-events: none;
- transition-duration: 0.3s;
- transform: translate3d(-$base-sidebar-width, 0, 0);
- }
- }
- }
-
- .withoutAnimation {
-
- .main-container,
- .sidebar-container {
- transition: none;
- }
- }
-}
-
-// when menu collapsed
-.el-menu--vertical {
- &>.el-menu {
- .svg-icon {
- margin-right: 16px;
- }
- }
-
- .nest-menu .el-submenu>.el-submenu__title,
- .el-menu-item {
- &:hover {
- // you can use $subMenuHover
- background-color: rgba(0, 0, 0, 0.06) !important;
- }
- }
-
- // the scroll bar appears when the subMenu is too long
- >.el-menu--popup {
- max-height: 100vh;
- overflow-y: auto;
-
- &::-webkit-scrollbar-track-piece {
- background: #d3dce6;
- }
-
- &::-webkit-scrollbar {
- width: 6px;
- }
-
- &::-webkit-scrollbar-thumb {
- background: #99a9bf;
- border-radius: 20px;
- }
- }
-}
+#app {
+
+ .main-container {
+ transition: margin-left .28s;
+ margin-left: $base-sidebar-width;
+ position: relative;
+ overflow-y: hidden;
+ top: 80px;
+ }
+
+ .sidebarHide {
+ margin-left: 0!important;
+ }
+
+ .sidebar-container {
+ -webkit-transition: width .28s;
+ transition: width 0.28s;
+ width: $base-sidebar-width !important;
+ background-color: $base-menu-background;
+ height: calc(100vh - 80px);
+ position: fixed;
+ font-size: 0px;
+ top: 80px;
+ bottom: 0;
+ left: 0;
+ z-index: 1001;
+ overflow: hidden;
+ -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
+ box-shadow: 2px 0 6px rgba(0,21,41,.35);
+
+ // reset element-ui css
+ .horizontal-collapse-transition {
+ transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
+ }
+
+ .scrollbar-wrapper {
+ overflow-x: hidden !important;
+ }
+
+ .el-scrollbar__bar.is-vertical {
+ right: 0px;
+ }
+
+ .el-scrollbar {
+ height: 100%;
+ }
+
+ &.has-logo {
+ .el-scrollbar {
+ height: calc(100% - 50px);
+ }
+ }
+
+ .is-horizontal {
+ display: none;
+ }
+
+ a {
+ display: inline-block;
+ width: 100%;
+ overflow: hidden;
+ }
+
+ .svg-icon {
+ margin-right: 16px;
+ }
+
+ .el-menu {
+ border: none;
+ height: 100%;
+ width: 100% !important;
+ }
+
+ .el-menu-item, .el-submenu__title {
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ }
+
+ // menu hover
+ .submenu-title-noDropdown,
+ .el-submenu__title {
+ &:hover {
+ background-color: rgba(0, 0, 0, 0.06) !important;
+ }
+ }
+
+ & .theme-dark .is-active > .el-submenu__title {
+ color: $base-menu-color-active !important;
+ }
+
+ & .nest-menu .el-submenu>.el-submenu__title,
+ & .el-submenu .el-menu-item {
+ min-width: $base-sidebar-width !important;
+
+ &:hover {
+ background-color: rgba(0, 0, 0, 0.06) !important;
+ }
+ }
+
+ & .theme-dark .nest-menu .el-submenu>.el-submenu__title,
+ & .theme-dark .el-submenu .el-menu-item {
+ background-color: $base-sub-menu-background !important;
+
+ &:hover {
+ background-color: $base-sub-menu-hover !important;
+ }
+ }
+ }
+
+ .hideSidebar {
+ .sidebar-container {
+ width: 54px !important;
+ }
+
+ .main-container {
+ margin-left: 54px;
+ }
+
+ .submenu-title-noDropdown {
+ padding: 0 !important;
+ position: relative;
+
+ .el-tooltip {
+ padding: 0 !important;
+
+ .svg-icon {
+ margin-left: 20px;
+ }
+ }
+ }
+
+ .el-submenu {
+ overflow: hidden;
+
+ &>.el-submenu__title {
+ padding: 0 !important;
+
+ .svg-icon {
+ margin-left: 20px;
+ }
+
+ }
+ }
+
+ .el-menu--collapse {
+ .el-submenu {
+ &>.el-submenu__title {
+ &>span {
+ height: 0;
+ width: 0;
+ overflow: hidden;
+ visibility: hidden;
+ display: inline-block;
+ }
+ }
+ }
+ }
+ }
+
+ .el-menu--collapse .el-menu .el-submenu {
+ min-width: $base-sidebar-width !important;
+ }
+
+ // mobile responsive
+ .mobile {
+ .main-container {
+ margin-left: 0px;
+ }
+
+ .sidebar-container {
+ transition: transform .28s;
+ width: $base-sidebar-width !important;
+ }
+
+ &.hideSidebar {
+ .sidebar-container {
+ pointer-events: none;
+ transition-duration: 0.3s;
+ transform: translate3d(-$base-sidebar-width, 0, 0);
+ }
+ }
+ }
+
+ .withoutAnimation {
+
+ .main-container,
+ .sidebar-container {
+ transition: none;
+ }
+ }
+}
+
+// when menu collapsed
+.el-menu--vertical {
+ &>.el-menu {
+ .svg-icon {
+ margin-right: 16px;
+ }
+ }
+
+ .nest-menu .el-submenu>.el-submenu__title,
+ .el-menu-item {
+ &:hover {
+ // you can use $subMenuHover
+ background-color: rgba(0, 0, 0, 0.06) !important;
+ }
+ }
+
+ // the scroll bar appears when the subMenu is too long
+ >.el-menu--popup {
+ max-height: 100vh;
+ overflow-y: auto;
+
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+ }
+}
diff --git a/ruoyi-ui/src/components/Header.vue b/ruoyi-ui/src/components/Header.vue
new file mode 100644
index 00000000..d91fedfd
--- /dev/null
+++ b/ruoyi-ui/src/components/Header.vue
@@ -0,0 +1,528 @@
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/components/PageTabs.vue b/ruoyi-ui/src/components/PageTabs.vue
index 133daff8..9a5842b0 100644
--- a/ruoyi-ui/src/components/PageTabs.vue
+++ b/ruoyi-ui/src/components/PageTabs.vue
@@ -35,7 +35,7 @@ export default {
return this.tabList.length > 0
},
...mapGetters({
- isCollapse: 'getCollapseStatus',
+
}),
},
created(){
diff --git a/ruoyi-ui/src/components/RightFence.vue b/ruoyi-ui/src/components/RightFence.vue
new file mode 100644
index 00000000..24146ba0
--- /dev/null
+++ b/ruoyi-ui/src/components/RightFence.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/layout/components/AppMain.vue b/ruoyi-ui/src/layout/components/AppMain.vue
index 7316d900..53cf6871 100644
--- a/ruoyi-ui/src/layout/components/AppMain.vue
+++ b/ruoyi-ui/src/layout/components/AppMain.vue
@@ -1,20 +1,24 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/layout/components/Sidebar/index.vue b/ruoyi-ui/src/layout/components/Sidebar/index.vue
index 24fb533b..51d0839f 100644
--- a/ruoyi-ui/src/layout/components/Sidebar/index.vue
+++ b/ruoyi-ui/src/layout/components/Sidebar/index.vue
@@ -1,57 +1,57 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/layout/index.vue b/ruoyi-ui/src/layout/index.vue
index 16366a88..39cc9743 100644
--- a/ruoyi-ui/src/layout/index.vue
+++ b/ruoyi-ui/src/layout/index.vue
@@ -1,5 +1,10 @@