com.ruoyi
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index f32b48cb..ef05ab4f 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -12,7 +12,7 @@ spring:
# 主库数据源
master:
driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+ url: jdbc:mysql://localhost:3506/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
username: root
password: 123456
# 从库数据源
diff --git a/ruoyi-ui-v3/.browserslistrc b/ruoyi-ui-v3/.browserslistrc
new file mode 100644
index 00000000..214388fe
--- /dev/null
+++ b/ruoyi-ui-v3/.browserslistrc
@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not dead
diff --git a/ruoyi-ui-v3/.editorconfig b/ruoyi-ui-v3/.editorconfig
new file mode 100644
index 00000000..7053c49a
--- /dev/null
+++ b/ruoyi-ui-v3/.editorconfig
@@ -0,0 +1,5 @@
+[*.{js,jsx,ts,tsx,vue}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/ruoyi-ui-vv3/.env.development b/ruoyi-ui-v3/.env.development
similarity index 100%
rename from ruoyi-ui-vv3/.env.development
rename to ruoyi-ui-v3/.env.development
diff --git a/ruoyi-ui-vv3/.env.production b/ruoyi-ui-v3/.env.production
similarity index 88%
rename from ruoyi-ui-vv3/.env.production
rename to ruoyi-ui-v3/.env.production
index b6eec53c..0401de12 100644
--- a/ruoyi-ui-vv3/.env.production
+++ b/ruoyi-ui-v3/.env.production
@@ -9,3 +9,5 @@ VUE_APP_MONITRO_ADMIN = '/admin/login'
# 若依管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'
+
+VUE_REMOVE_CONSOLE = false
diff --git a/ruoyi-ui-vv3/.env.staging b/ruoyi-ui-v3/.env.staging
similarity index 100%
rename from ruoyi-ui-vv3/.env.staging
rename to ruoyi-ui-v3/.env.staging
diff --git a/ruoyi-ui-v3/.eslintrc.js b/ruoyi-ui-v3/.eslintrc.js
new file mode 100644
index 00000000..ea527da7
--- /dev/null
+++ b/ruoyi-ui-v3/.eslintrc.js
@@ -0,0 +1,197 @@
+// ESlint 检查配置
+module.exports = {
+ root: true,
+ env: {
+ node: true
+ },
+ extends: [
+ 'plugin:vue/vue3-essential',
+ '@vue/standard'
+ ],
+ parserOptions: {
+ parser: 'babel-eslint',
+ sourceType: 'module'
+ },
+ 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/ruoyi-ui-v3/.gitignore b/ruoyi-ui-v3/.gitignore
new file mode 100644
index 00000000..c295204d
--- /dev/null
+++ b/ruoyi-ui-v3/.gitignore
@@ -0,0 +1,26 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock
diff --git a/ruoyi-ui-v3/README.md b/ruoyi-ui-v3/README.md
new file mode 100644
index 00000000..a9ccd53d
--- /dev/null
+++ b/ruoyi-ui-v3/README.md
@@ -0,0 +1,24 @@
+# ruoyi-ui-v3
+
+## Project setup
+```
+yarn install
+```
+
+### Compiles and hot-reloads for development
+```
+yarn serve
+```
+
+### Compiles and minifies for production
+```
+yarn build
+```
+
+### Lints and fixes files
+```
+yarn lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).
diff --git a/ruoyi-ui-v3/babel.config.js b/ruoyi-ui-v3/babel.config.js
new file mode 100644
index 00000000..607ad17f
--- /dev/null
+++ b/ruoyi-ui-v3/babel.config.js
@@ -0,0 +1,45 @@
+
+// 发布阶段需要使用的babel插件
+const prodPlugins = []
+// 处于产品发布模式
+if (process.env.NODE_ENV === 'production' && process.env.VUE_REMOVE_CONSOLE) {
+ // 添加插件
+ prodPlugins.push('transform-remove-console')
+}
+
+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']
+ }
+ },
+ plugins: [
+ // [
+ // 'import',
+ // {
+ // libraryName: 'element-plus',
+ // // 引入组件
+ // customName: (name) => {
+ // name = name.slice(3)
+ // return `element-plus/lib/components/${name}`
+ // },
+ // // 引入样式
+ // customStyleName: (name) => {
+ // name = name.slice(3)
+ // // 如果你需要引入 [name].scss 文件,你需要用下面这行
+ // // return `element-plus/lib/components/${name}/style`
+ // // 引入 [name].css
+ // return `element-plus/lib/components/${name}/style/css`
+ // }
+ // }
+ // ],
+ // 发布产品时候的插件数组 ...为展开运算符,数组内容展开赋给一个新数组
+ ...prodPlugins
+ ]
+}
diff --git a/ruoyi-ui-v3/build/index.js b/ruoyi-ui-v3/build/index.js
new file mode 100644
index 00000000..0c57de2a
--- /dev/null
+++ b/ruoyi-ui-v3/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/ruoyi-ui-v3/package.json b/ruoyi-ui-v3/package.json
new file mode 100644
index 00000000..fe7827c8
--- /dev/null
+++ b/ruoyi-ui-v3/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "ruoyi-ui-v3",
+ "version": "0.1.0",
+ "description": "RuoYi-Vue-Plus��̨����ϵͳ",
+ "author": "sanmao",
+ "license": "MIT",
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "vue-cli-service build",
+ "build:stage": "vue-cli-service build --mode staging",
+ "preview": "node build/index.js --preview",
+ "lint": "eslint --ext .js,.vue src"
+ },
+ "dependencies": {
+ "axios": "^0.21.0",
+ "clipboard": "^2.0.6",
+ "core-js": "^3.17.3",
+ "echarts": "^5.2.0",
+ "element-plus": "^1.1.0-beta.13",
+ "file-saver": "^2.0.5",
+ "fuse.js": "^6.4.6",
+ "js-beautify": "^1.13.0",
+ "js-cookie": "^3.0.1",
+ "jsencrypt": "^3.0.0-rc.1",
+ "memoize-one": "^5.2.1",
+ "nprogress": "^0.2.0",
+ "quill": "^1.3.7",
+ "screenfull": "^5.0.2",
+ "sortablejs": "^1.10.2",
+ "vue": "^3.2.11",
+ "vue-count-to": "^1.0.13",
+ "vue-cropper": "^0.5.6",
+ "vue-meta": "^3.0.0-alpha.7",
+ "vue-router": "^4.0.0-0",
+ "vue3-highlightjs": "^1.0.5",
+ "vue3-treeselect": "^0.1.10",
+ "vuedraggable": "^4.1.0",
+ "vuex": "^4.0.0-0"
+ },
+ "devDependencies": {
+ "@vue/cli-plugin-babel": "~4.5.0",
+ "@vue/cli-plugin-eslint": "~4.5.0",
+ "@vue/cli-plugin-router": "~4.5.0",
+ "@vue/cli-plugin-vuex": "~4.5.0",
+ "@vue/cli-service": "~4.5.0",
+ "@vue/compiler-sfc": "^3.0.0",
+ "@vue/eslint-config-standard": "^6.1.0",
+ "babel-eslint": "^10.1.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "babel-plugin-import": "^1.13.3",
+ "babel-plugin-transform-remove-console": "^6.9.4",
+ "eslint": "^7.32.0",
+ "eslint-plugin-import": "^2.20.2",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^5.1.0",
+ "eslint-plugin-standard": "^5.0.0",
+ "eslint-plugin-vue": "^7.0.0",
+ "node-sass": "^6.0.1",
+ "sass": "^1.41.0",
+ "sass-loader": "10.1.0",
+ "script-ext-html-webpack-plugin": "^2.1.5",
+ "svg-sprite-loader": "^6.0.9",
+ "vue-template-compiler": "^2.6.12",
+ "webpack-cli": "^4.8.0"
+ }
+}
diff --git a/ruoyi-ui-vv3/src/assets/logo/logo.png b/ruoyi-ui-v3/public/favicon.ico
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/logo/logo.png
rename to ruoyi-ui-v3/public/favicon.ico
diff --git a/ruoyi-ui-v3/public/html/ie.html b/ruoyi-ui-v3/public/html/ie.html
new file mode 100644
index 00000000..052ffcd6
--- /dev/null
+++ b/ruoyi-ui-v3/public/html/ie.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+ 请升级您的浏览器
+
+
+
+
+
+
+请升级您的浏览器,以便我们更好的为您提供服务!
+您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。
+
+请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束
+自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明 。
+
+您可以选择更先进的浏览器
+推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-ui-v3/public/index.html b/ruoyi-ui-v3/public/index.html
new file mode 100644
index 00000000..925455ca
--- /dev/null
+++ b/ruoyi-ui-v3/public/index.html
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+ <%= webpackConfig.name %>
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/public/robots.txt b/ruoyi-ui-v3/public/robots.txt
new file mode 100644
index 00000000..77470cb3
--- /dev/null
+++ b/ruoyi-ui-v3/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
\ No newline at end of file
diff --git a/ruoyi-ui-v3/src/App.vue b/ruoyi-ui-v3/src/App.vue
new file mode 100644
index 00000000..c2549a11
--- /dev/null
+++ b/ruoyi-ui-v3/src/App.vue
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/ruoyi-ui-vv3/src/api/demo/demo.js b/ruoyi-ui-v3/src/api/demo/demo.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/demo/demo.js
rename to ruoyi-ui-v3/src/api/demo/demo.js
diff --git a/ruoyi-ui-vv3/src/api/demo/tree.js b/ruoyi-ui-v3/src/api/demo/tree.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/demo/tree.js
rename to ruoyi-ui-v3/src/api/demo/tree.js
diff --git a/ruoyi-ui-vv3/src/api/login.js b/ruoyi-ui-v3/src/api/login.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/login.js
rename to ruoyi-ui-v3/src/api/login.js
diff --git a/ruoyi-ui-vv3/src/api/menu.js b/ruoyi-ui-v3/src/api/menu.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/menu.js
rename to ruoyi-ui-v3/src/api/menu.js
diff --git a/ruoyi-ui-vv3/src/api/monitor/cache.js b/ruoyi-ui-v3/src/api/monitor/cache.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/monitor/cache.js
rename to ruoyi-ui-v3/src/api/monitor/cache.js
diff --git a/ruoyi-ui-vv3/src/api/monitor/job.js b/ruoyi-ui-v3/src/api/monitor/job.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/monitor/job.js
rename to ruoyi-ui-v3/src/api/monitor/job.js
diff --git a/ruoyi-ui-vv3/src/api/monitor/jobLog.js b/ruoyi-ui-v3/src/api/monitor/jobLog.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/monitor/jobLog.js
rename to ruoyi-ui-v3/src/api/monitor/jobLog.js
diff --git a/ruoyi-ui-vv3/src/api/monitor/logininfor.js b/ruoyi-ui-v3/src/api/monitor/logininfor.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/monitor/logininfor.js
rename to ruoyi-ui-v3/src/api/monitor/logininfor.js
diff --git a/ruoyi-ui-vv3/src/api/monitor/online.js b/ruoyi-ui-v3/src/api/monitor/online.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/monitor/online.js
rename to ruoyi-ui-v3/src/api/monitor/online.js
diff --git a/ruoyi-ui-vv3/src/api/monitor/operlog.js b/ruoyi-ui-v3/src/api/monitor/operlog.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/monitor/operlog.js
rename to ruoyi-ui-v3/src/api/monitor/operlog.js
diff --git a/ruoyi-ui-vv3/src/api/monitor/server.js b/ruoyi-ui-v3/src/api/monitor/server.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/monitor/server.js
rename to ruoyi-ui-v3/src/api/monitor/server.js
diff --git a/ruoyi-ui-vv3/src/api/system/config.js b/ruoyi-ui-v3/src/api/system/config.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/config.js
rename to ruoyi-ui-v3/src/api/system/config.js
diff --git a/ruoyi-ui-vv3/src/api/system/dept.js b/ruoyi-ui-v3/src/api/system/dept.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/dept.js
rename to ruoyi-ui-v3/src/api/system/dept.js
diff --git a/ruoyi-ui-vv3/src/api/system/dict/data.js b/ruoyi-ui-v3/src/api/system/dict/data.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/dict/data.js
rename to ruoyi-ui-v3/src/api/system/dict/data.js
diff --git a/ruoyi-ui-vv3/src/api/system/dict/type.js b/ruoyi-ui-v3/src/api/system/dict/type.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/dict/type.js
rename to ruoyi-ui-v3/src/api/system/dict/type.js
diff --git a/ruoyi-ui-vv3/src/api/system/menu.js b/ruoyi-ui-v3/src/api/system/menu.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/menu.js
rename to ruoyi-ui-v3/src/api/system/menu.js
diff --git a/ruoyi-ui-vv3/src/api/system/notice.js b/ruoyi-ui-v3/src/api/system/notice.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/notice.js
rename to ruoyi-ui-v3/src/api/system/notice.js
diff --git a/ruoyi-ui-vv3/src/api/system/oss.js b/ruoyi-ui-v3/src/api/system/oss.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/oss.js
rename to ruoyi-ui-v3/src/api/system/oss.js
diff --git a/ruoyi-ui-vv3/src/api/system/ossConfig.js b/ruoyi-ui-v3/src/api/system/ossConfig.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/ossConfig.js
rename to ruoyi-ui-v3/src/api/system/ossConfig.js
diff --git a/ruoyi-ui-vv3/src/api/system/post.js b/ruoyi-ui-v3/src/api/system/post.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/post.js
rename to ruoyi-ui-v3/src/api/system/post.js
diff --git a/ruoyi-ui-vv3/src/api/system/role.js b/ruoyi-ui-v3/src/api/system/role.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/role.js
rename to ruoyi-ui-v3/src/api/system/role.js
diff --git a/ruoyi-ui-vv3/src/api/system/user.js b/ruoyi-ui-v3/src/api/system/user.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/system/user.js
rename to ruoyi-ui-v3/src/api/system/user.js
diff --git a/ruoyi-ui-vv3/src/api/tool/gen.js b/ruoyi-ui-v3/src/api/tool/gen.js
similarity index 100%
rename from ruoyi-ui-vv3/src/api/tool/gen.js
rename to ruoyi-ui-v3/src/api/tool/gen.js
diff --git a/ruoyi-ui-vv3/src/assets/401_images/401.gif b/ruoyi-ui-v3/src/assets/401_images/401.gif
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/401_images/401.gif
rename to ruoyi-ui-v3/src/assets/401_images/401.gif
diff --git a/ruoyi-ui-vv3/src/assets/404_images/404.png b/ruoyi-ui-v3/src/assets/404_images/404.png
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/404_images/404.png
rename to ruoyi-ui-v3/src/assets/404_images/404.png
diff --git a/ruoyi-ui-vv3/src/assets/404_images/404_cloud.png b/ruoyi-ui-v3/src/assets/404_images/404_cloud.png
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/404_images/404_cloud.png
rename to ruoyi-ui-v3/src/assets/404_images/404_cloud.png
diff --git a/ruoyi-ui-v3/src/assets/icons/index.js b/ruoyi-ui-v3/src/assets/icons/index.js
new file mode 100644
index 00000000..4e383f4b
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/icons/index.js
@@ -0,0 +1,4 @@
+
+const req = require.context('./svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys().map(requireContext)
+requireAll(req)
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/404.svg b/ruoyi-ui-v3/src/assets/icons/svg/404.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/404.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/404.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/bug.svg b/ruoyi-ui-v3/src/assets/icons/svg/bug.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/bug.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/bug.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/build.svg b/ruoyi-ui-v3/src/assets/icons/svg/build.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/build.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/build.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/button.svg b/ruoyi-ui-v3/src/assets/icons/svg/button.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/button.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/button.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/cascader.svg b/ruoyi-ui-v3/src/assets/icons/svg/cascader.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/cascader.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/cascader.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/chart.svg b/ruoyi-ui-v3/src/assets/icons/svg/chart.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/chart.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/chart.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/checkbox.svg b/ruoyi-ui-v3/src/assets/icons/svg/checkbox.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/checkbox.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/checkbox.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/clipboard.svg b/ruoyi-ui-v3/src/assets/icons/svg/clipboard.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/clipboard.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/clipboard.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/code.svg b/ruoyi-ui-v3/src/assets/icons/svg/code.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/code.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/code.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/color.svg b/ruoyi-ui-v3/src/assets/icons/svg/color.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/color.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/color.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/component.svg b/ruoyi-ui-v3/src/assets/icons/svg/component.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/component.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/component.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/dashboard.svg b/ruoyi-ui-v3/src/assets/icons/svg/dashboard.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/dashboard.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/dashboard.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/date-range.svg b/ruoyi-ui-v3/src/assets/icons/svg/date-range.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/date-range.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/date-range.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/date.svg b/ruoyi-ui-v3/src/assets/icons/svg/date.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/date.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/date.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/dict.svg b/ruoyi-ui-v3/src/assets/icons/svg/dict.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/dict.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/dict.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/documentation.svg b/ruoyi-ui-v3/src/assets/icons/svg/documentation.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/documentation.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/documentation.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/download.svg b/ruoyi-ui-v3/src/assets/icons/svg/download.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/download.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/download.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/drag.svg b/ruoyi-ui-v3/src/assets/icons/svg/drag.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/drag.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/drag.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/druid.svg b/ruoyi-ui-v3/src/assets/icons/svg/druid.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/druid.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/druid.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/edit.svg b/ruoyi-ui-v3/src/assets/icons/svg/edit.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/edit.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/edit.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/education.svg b/ruoyi-ui-v3/src/assets/icons/svg/education.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/education.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/education.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/email.svg b/ruoyi-ui-v3/src/assets/icons/svg/email.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/email.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/email.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/example.svg b/ruoyi-ui-v3/src/assets/icons/svg/example.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/example.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/example.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/excel.svg b/ruoyi-ui-v3/src/assets/icons/svg/excel.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/excel.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/excel.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/exit-fullscreen.svg b/ruoyi-ui-v3/src/assets/icons/svg/exit-fullscreen.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/exit-fullscreen.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/exit-fullscreen.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/eye-open.svg b/ruoyi-ui-v3/src/assets/icons/svg/eye-open.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/eye-open.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/eye-open.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/eye.svg b/ruoyi-ui-v3/src/assets/icons/svg/eye.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/eye.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/eye.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/form.svg b/ruoyi-ui-v3/src/assets/icons/svg/form.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/form.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/form.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/fullscreen.svg b/ruoyi-ui-v3/src/assets/icons/svg/fullscreen.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/fullscreen.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/fullscreen.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/github.svg b/ruoyi-ui-v3/src/assets/icons/svg/github.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/github.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/github.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/guide.svg b/ruoyi-ui-v3/src/assets/icons/svg/guide.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/guide.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/guide.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/icon.svg b/ruoyi-ui-v3/src/assets/icons/svg/icon.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/icon.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/icon.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/input.svg b/ruoyi-ui-v3/src/assets/icons/svg/input.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/input.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/input.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/international.svg b/ruoyi-ui-v3/src/assets/icons/svg/international.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/international.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/international.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/job.svg b/ruoyi-ui-v3/src/assets/icons/svg/job.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/job.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/job.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/language.svg b/ruoyi-ui-v3/src/assets/icons/svg/language.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/language.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/language.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/link.svg b/ruoyi-ui-v3/src/assets/icons/svg/link.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/link.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/link.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/list.svg b/ruoyi-ui-v3/src/assets/icons/svg/list.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/list.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/list.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/lock.svg b/ruoyi-ui-v3/src/assets/icons/svg/lock.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/lock.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/lock.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/log.svg b/ruoyi-ui-v3/src/assets/icons/svg/log.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/log.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/log.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/logininfor.svg b/ruoyi-ui-v3/src/assets/icons/svg/logininfor.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/logininfor.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/logininfor.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/message.svg b/ruoyi-ui-v3/src/assets/icons/svg/message.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/message.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/message.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/money.svg b/ruoyi-ui-v3/src/assets/icons/svg/money.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/money.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/money.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/monitor.svg b/ruoyi-ui-v3/src/assets/icons/svg/monitor.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/monitor.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/monitor.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/nested.svg b/ruoyi-ui-v3/src/assets/icons/svg/nested.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/nested.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/nested.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/number.svg b/ruoyi-ui-v3/src/assets/icons/svg/number.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/number.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/number.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/online.svg b/ruoyi-ui-v3/src/assets/icons/svg/online.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/online.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/online.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/password.svg b/ruoyi-ui-v3/src/assets/icons/svg/password.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/password.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/password.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/pdf.svg b/ruoyi-ui-v3/src/assets/icons/svg/pdf.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/pdf.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/pdf.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/people.svg b/ruoyi-ui-v3/src/assets/icons/svg/people.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/people.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/people.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/peoples.svg b/ruoyi-ui-v3/src/assets/icons/svg/peoples.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/peoples.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/peoples.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/phone.svg b/ruoyi-ui-v3/src/assets/icons/svg/phone.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/phone.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/phone.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/post.svg b/ruoyi-ui-v3/src/assets/icons/svg/post.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/post.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/post.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/qq.svg b/ruoyi-ui-v3/src/assets/icons/svg/qq.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/qq.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/qq.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/question.svg b/ruoyi-ui-v3/src/assets/icons/svg/question.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/question.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/question.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/radio.svg b/ruoyi-ui-v3/src/assets/icons/svg/radio.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/radio.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/radio.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/rate.svg b/ruoyi-ui-v3/src/assets/icons/svg/rate.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/rate.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/rate.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/redis.svg b/ruoyi-ui-v3/src/assets/icons/svg/redis.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/redis.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/redis.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/row.svg b/ruoyi-ui-v3/src/assets/icons/svg/row.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/row.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/row.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/search.svg b/ruoyi-ui-v3/src/assets/icons/svg/search.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/search.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/search.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/select.svg b/ruoyi-ui-v3/src/assets/icons/svg/select.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/select.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/select.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/server.svg b/ruoyi-ui-v3/src/assets/icons/svg/server.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/server.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/server.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/shopping.svg b/ruoyi-ui-v3/src/assets/icons/svg/shopping.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/shopping.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/shopping.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/size.svg b/ruoyi-ui-v3/src/assets/icons/svg/size.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/size.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/size.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/skill.svg b/ruoyi-ui-v3/src/assets/icons/svg/skill.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/skill.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/skill.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/slider.svg b/ruoyi-ui-v3/src/assets/icons/svg/slider.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/slider.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/slider.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/star.svg b/ruoyi-ui-v3/src/assets/icons/svg/star.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/star.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/star.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/swagger.svg b/ruoyi-ui-v3/src/assets/icons/svg/swagger.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/swagger.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/swagger.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/switch.svg b/ruoyi-ui-v3/src/assets/icons/svg/switch.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/switch.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/switch.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/system.svg b/ruoyi-ui-v3/src/assets/icons/svg/system.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/system.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/system.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/tab.svg b/ruoyi-ui-v3/src/assets/icons/svg/tab.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/tab.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/tab.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/table.svg b/ruoyi-ui-v3/src/assets/icons/svg/table.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/table.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/table.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/textarea.svg b/ruoyi-ui-v3/src/assets/icons/svg/textarea.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/textarea.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/textarea.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/theme.svg b/ruoyi-ui-v3/src/assets/icons/svg/theme.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/theme.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/theme.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/time-range.svg b/ruoyi-ui-v3/src/assets/icons/svg/time-range.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/time-range.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/time-range.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/time.svg b/ruoyi-ui-v3/src/assets/icons/svg/time.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/time.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/time.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/tool.svg b/ruoyi-ui-v3/src/assets/icons/svg/tool.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/tool.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/tool.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/tree-table.svg b/ruoyi-ui-v3/src/assets/icons/svg/tree-table.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/tree-table.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/tree-table.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/tree.svg b/ruoyi-ui-v3/src/assets/icons/svg/tree.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/tree.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/tree.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/upload.svg b/ruoyi-ui-v3/src/assets/icons/svg/upload.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/upload.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/upload.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/user.svg b/ruoyi-ui-v3/src/assets/icons/svg/user.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/user.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/user.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/validCode.svg b/ruoyi-ui-v3/src/assets/icons/svg/validCode.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/validCode.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/validCode.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/wechat.svg b/ruoyi-ui-v3/src/assets/icons/svg/wechat.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/wechat.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/wechat.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svg/zip.svg b/ruoyi-ui-v3/src/assets/icons/svg/zip.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svg/zip.svg
rename to ruoyi-ui-v3/src/assets/icons/svg/zip.svg
diff --git a/ruoyi-ui-vv3/src/assets/icons/svgo.yml b/ruoyi-ui-v3/src/assets/icons/svgo.yml
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/icons/svgo.yml
rename to ruoyi-ui-v3/src/assets/icons/svgo.yml
diff --git a/ruoyi-ui-vv3/src/assets/images/dark.svg b/ruoyi-ui-v3/src/assets/images/dark.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/images/dark.svg
rename to ruoyi-ui-v3/src/assets/images/dark.svg
diff --git a/ruoyi-ui-vv3/src/assets/images/light.svg b/ruoyi-ui-v3/src/assets/images/light.svg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/images/light.svg
rename to ruoyi-ui-v3/src/assets/images/light.svg
diff --git a/ruoyi-ui-vv3/src/assets/images/login-background.jpg b/ruoyi-ui-v3/src/assets/images/login-background.jpg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/images/login-background.jpg
rename to ruoyi-ui-v3/src/assets/images/login-background.jpg
diff --git a/ruoyi-ui-vv3/src/assets/images/profile.jpg b/ruoyi-ui-v3/src/assets/images/profile.jpg
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/images/profile.jpg
rename to ruoyi-ui-v3/src/assets/images/profile.jpg
diff --git a/ruoyi-ui-v3/src/assets/logo.png b/ruoyi-ui-v3/src/assets/logo.png
new file mode 100644
index 00000000..f3d2503f
Binary files /dev/null and b/ruoyi-ui-v3/src/assets/logo.png differ
diff --git a/ruoyi-ui-v3/src/assets/logo/logo.png b/ruoyi-ui-v3/src/assets/logo/logo.png
new file mode 100644
index 00000000..e2637602
Binary files /dev/null and b/ruoyi-ui-v3/src/assets/logo/logo.png differ
diff --git a/ruoyi-ui-v3/src/assets/styles/btn.scss b/ruoyi-ui-v3/src/assets/styles/btn.scss
new file mode 100644
index 00000000..e6ba1a8e
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/btn.scss
@@ -0,0 +1,99 @@
+@import './variables.scss';
+
+@mixin colorBtn($color) {
+ background: $color;
+
+ &:hover {
+ color: $color;
+
+ &:before,
+ &:after {
+ background: $color;
+ }
+ }
+}
+
+.blue-btn {
+ @include colorBtn($blue)
+}
+
+.light-blue-btn {
+ @include colorBtn($light-blue)
+}
+
+.red-btn {
+ @include colorBtn($red)
+}
+
+.pink-btn {
+ @include colorBtn($pink)
+}
+
+.green-btn {
+ @include colorBtn($green)
+}
+
+.tiffany-btn {
+ @include colorBtn($tiffany)
+}
+
+.yellow-btn {
+ @include colorBtn($yellow)
+}
+
+.pan-btn {
+ font-size: 14px;
+ color: #fff;
+ padding: 14px 36px;
+ border-radius: 8px;
+ border: none;
+ outline: none;
+ transition: 600ms ease all;
+ position: relative;
+ display: inline-block;
+
+ &:hover {
+ background: #fff;
+
+ &:before,
+ &:after {
+ width: 100%;
+ transition: 600ms ease all;
+ }
+ }
+
+ &:before,
+ &:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ height: 2px;
+ width: 0;
+ transition: 400ms ease all;
+ }
+
+ &::after {
+ right: inherit;
+ top: inherit;
+ left: 0;
+ bottom: 0;
+ }
+}
+
+.custom-button {
+ display: inline-block;
+ line-height: 1;
+ white-space: nowrap;
+ cursor: pointer;
+ background: #fff;
+ color: #fff;
+ -webkit-appearance: none;
+ text-align: center;
+ box-sizing: border-box;
+ outline: 0;
+ margin: 0;
+ padding: 10px 15px;
+ font-size: 14px;
+ border-radius: 4px;
+}
diff --git a/ruoyi-ui-v3/src/assets/styles/element-ui.scss b/ruoyi-ui-v3/src/assets/styles/element-ui.scss
new file mode 100644
index 00000000..363092a6
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/element-ui.scss
@@ -0,0 +1,92 @@
+// cover some element-ui styles
+
+.el-breadcrumb__inner,
+.el-breadcrumb__inner a {
+ font-weight: 400 !important;
+}
+
+.el-upload {
+ input[type="file"] {
+ display: none !important;
+ }
+}
+
+.el-upload__input {
+ display: none;
+}
+
+.cell {
+ .el-tag {
+ margin-right: 0px;
+ }
+}
+
+.small-padding {
+ .cell {
+ padding-left: 5px;
+ padding-right: 5px;
+ }
+}
+
+.fixed-width {
+ .el-button--mini {
+ padding: 7px 10px;
+ width: 60px;
+ }
+}
+
+.status-col {
+ .cell {
+ padding: 0 10px;
+ text-align: center;
+
+ .el-tag {
+ margin-right: 0px;
+ }
+ }
+}
+
+// to fixed https://github.com/ElemeFE/element/issues/2461
+.el-dialog {
+ transform: none;
+ left: 0;
+ position: relative;
+ margin: 0 auto;
+}
+
+// refine element ui upload
+.upload-container {
+ .el-upload {
+ width: 100%;
+
+ .el-upload-dragger {
+ width: 100%;
+ height: 200px;
+ }
+ }
+}
+
+// dropdown
+.el-dropdown-menu {
+ a {
+ display: block
+ }
+}
+
+// fix date-picker ui bug in filter-item
+.el-range-editor.el-input__inner {
+ display: inline-flex !important;
+}
+
+// to fix el-date-picker css style
+.el-range-separator {
+ box-sizing: content-box;
+}
+
+.el-menu--collapse
+ > div
+ > .el-submenu
+ > .el-submenu__title
+ .el-submenu__icon-arrow {
+ display: none;
+}
\ No newline at end of file
diff --git a/ruoyi-ui-v3/src/assets/styles/element-variables.scss b/ruoyi-ui-v3/src/assets/styles/element-variables.scss
new file mode 100644
index 00000000..6edb683b
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/element-variables.scss
@@ -0,0 +1,31 @@
+/**
+* I think element-ui's default theme color is too light for long-term use.
+* So I modified the default color and you can modify it to your liking.
+**/
+
+/* theme color */
+$--color-primary: #1890ff;
+$--color-success: #13ce66;
+$--color-warning: #ffba00;
+$--color-danger: #ff4949;
+// $--color-info: #1E1E1E;
+
+$--button-font-weight: 400;
+
+// $--color-text-regular: #1f2d3d;
+
+$--border-color-light: #dfe4ed;
+$--border-color-lighter: #e6ebf5;
+
+$--table-border:1px solid#dfe6ec;
+
+/* icon font path, required */
+$--font-path: '~element-plus/packages/theme-chalk/src/fonts';
+
+@import "~element-plus/packages/theme-chalk/src/index";
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+ theme: $--color-primary;
+}
diff --git a/ruoyi-ui-v3/src/assets/styles/index.scss b/ruoyi-ui-v3/src/assets/styles/index.scss
new file mode 100644
index 00000000..96095ef6
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/index.scss
@@ -0,0 +1,191 @@
+@import './variables.scss';
+@import './mixin.scss';
+@import './transition.scss';
+@import './element-ui.scss';
+@import './sidebar.scss';
+@import './btn.scss';
+
+body {
+ height: 100%;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizeLegibility;
+ font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+}
+
+label {
+ font-weight: 700;
+}
+
+html {
+ height: 100%;
+ box-sizing: border-box;
+}
+
+#app {
+ height: 100%;
+}
+
+*,
+*:before,
+*:after {
+ box-sizing: inherit;
+}
+
+.no-padding {
+ padding: 0px !important;
+}
+
+.padding-content {
+ padding: 4px 0;
+}
+
+a:focus,
+a:active {
+ outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+ cursor: pointer;
+ color: inherit;
+ text-decoration: none;
+}
+
+div:focus {
+ outline: none;
+}
+
+.fr {
+ float: right;
+}
+
+.fl {
+ float: left;
+}
+
+.pr-5 {
+ padding-right: 5px;
+}
+
+.pl-5 {
+ padding-left: 5px;
+}
+
+.block {
+ display: block;
+}
+
+.pointer {
+ cursor: pointer;
+}
+
+.inlineBlock {
+ display: block;
+}
+
+.clearfix {
+ &:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+ }
+}
+
+aside {
+ background: #eef1f6;
+ padding: 8px 24px;
+ margin-bottom: 20px;
+ border-radius: 2px;
+ display: block;
+ line-height: 32px;
+ font-size: 16px;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ color: #2c3e50;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+ a {
+ color: #337ab7;
+ cursor: pointer;
+
+ &:hover {
+ color: rgb(32, 160, 255);
+ }
+ }
+}
+
+//main-container全局样式
+.app-container {
+ padding: 20px;
+}
+
+.components-container {
+ margin: 30px 50px;
+ position: relative;
+}
+
+.pagination-container {
+ margin-top: 30px;
+}
+
+.text-center {
+ text-align: center
+}
+
+.sub-navbar {
+ height: 50px;
+ line-height: 50px;
+ position: relative;
+ width: 100%;
+ text-align: right;
+ padding-right: 20px;
+ transition: 600ms ease position;
+ background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
+
+ .subtitle {
+ font-size: 20px;
+ color: #fff;
+ }
+
+ &.draft {
+ background: #d0d0d0;
+ }
+
+ &.deleted {
+ background: #d0d0d0;
+ }
+}
+
+.link-type,
+.link-type:focus {
+ color: #337ab7;
+ cursor: pointer;
+
+ &:hover {
+ color: rgb(32, 160, 255);
+ }
+}
+
+.filter-container {
+ padding-bottom: 10px;
+
+ .filter-item {
+ display: inline-block;
+ vertical-align: middle;
+ margin-bottom: 10px;
+ }
+}
+
+//refine vue-multiselect plugin
+.multiselect {
+ line-height: 16px;
+}
+
+.multiselect--active {
+ z-index: 1000 !important;
+}
diff --git a/ruoyi-ui-v3/src/assets/styles/mixin.scss b/ruoyi-ui-v3/src/assets/styles/mixin.scss
new file mode 100644
index 00000000..06fa0612
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/mixin.scss
@@ -0,0 +1,66 @@
+@mixin clearfix {
+ &:after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+}
+
+@mixin scrollBar {
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+}
+
+@mixin relative {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+@mixin pct($pct) {
+ width: #{$pct};
+ position: relative;
+ margin: 0 auto;
+}
+
+@mixin triangle($width, $height, $color, $direction) {
+ $width: $width/2;
+ $color-border-style: $height solid $color;
+ $transparent-border-style: $width solid transparent;
+ height: 0;
+ width: 0;
+
+ @if $direction==up {
+ border-bottom: $color-border-style;
+ border-left: $transparent-border-style;
+ border-right: $transparent-border-style;
+ }
+
+ @else if $direction==right {
+ border-left: $color-border-style;
+ border-top: $transparent-border-style;
+ border-bottom: $transparent-border-style;
+ }
+
+ @else if $direction==down {
+ border-top: $color-border-style;
+ border-left: $transparent-border-style;
+ border-right: $transparent-border-style;
+ }
+
+ @else if $direction==left {
+ border-right: $color-border-style;
+ border-top: $transparent-border-style;
+ border-bottom: $transparent-border-style;
+ }
+}
diff --git a/ruoyi-ui-vv3/src/assets/styles/ruoyi.scss b/ruoyi-ui-v3/src/assets/styles/ruoyi.scss
similarity index 100%
rename from ruoyi-ui-vv3/src/assets/styles/ruoyi.scss
rename to ruoyi-ui-v3/src/assets/styles/ruoyi.scss
diff --git a/ruoyi-ui-v3/src/assets/styles/sidebar.scss b/ruoyi-ui-v3/src/assets/styles/sidebar.scss
new file mode 100644
index 00000000..2f368c3d
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/sidebar.scss
@@ -0,0 +1,223 @@
+#app {
+
+ .main-container {
+ min-height: 100%;
+ transition: margin-left .28s;
+ margin-left: $sideBarWidth;
+ position: relative;
+ }
+
+ .sidebar-container {
+ -webkit-transition: width .28s;
+ transition: width 0.28s;
+ width: $sideBarWidth !important;
+ background-color: $menuBg;
+ 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: $subMenuActiveText !important;
+ }
+
+ & .nest-menu .el-submenu>.el-submenu__title,
+ & .el-submenu .el-menu-item {
+ min-width: $sideBarWidth !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: $subMenuBg !important;
+
+ &:hover {
+ background-color: $subMenuHover !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: $sideBarWidth !important;
+ }
+
+ // mobile responsive
+ .mobile {
+ .main-container {
+ margin-left: 0px;
+ }
+
+ .sidebar-container {
+ transition: transform .28s;
+ width: $sideBarWidth !important;
+ }
+
+ &.hideSidebar {
+ .sidebar-container {
+ pointer-events: none;
+ transition-duration: 0.3s;
+ transform: translate3d(-$sideBarWidth, 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-v3/src/assets/styles/transition.scss b/ruoyi-ui-v3/src/assets/styles/transition.scss
new file mode 100644
index 00000000..4cb27cc8
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/transition.scss
@@ -0,0 +1,48 @@
+// global transition css
+
+/* fade */
+.fade-enter-active,
+.fade-leave-active {
+ transition: opacity 0.28s;
+}
+
+.fade-enter,
+.fade-leave-active {
+ opacity: 0;
+}
+
+/* fade-transform */
+.fade-transform-leave-active,
+.fade-transform-enter-active {
+ transition: all .5s;
+}
+
+.fade-transform-enter {
+ opacity: 0;
+ transform: translateX(-30px);
+}
+
+.fade-transform-leave-to {
+ opacity: 0;
+ transform: translateX(30px);
+}
+
+/* breadcrumb transition */
+.breadcrumb-enter-active,
+.breadcrumb-leave-active {
+ transition: all .5s;
+}
+
+.breadcrumb-enter,
+.breadcrumb-leave-active {
+ opacity: 0;
+ transform: translateX(20px);
+}
+
+.breadcrumb-move {
+ transition: all .5s;
+}
+
+.breadcrumb-leave-active {
+ position: absolute;
+}
diff --git a/ruoyi-ui-v3/src/assets/styles/variables.scss b/ruoyi-ui-v3/src/assets/styles/variables.scss
new file mode 100644
index 00000000..452a1ece
--- /dev/null
+++ b/ruoyi-ui-v3/src/assets/styles/variables.scss
@@ -0,0 +1,44 @@
+// base color
+$blue:#324157;
+$light-blue:#3A71A8;
+$red:#C03639;
+$pink: #E65D6E;
+$green: #30B08F;
+$tiffany: #4AB7BD;
+$yellow:#FEC171;
+$panGreen: #30B08F;
+
+// sidebar
+$menuText:#bfcbd9;
+$menuActiveText:#409EFF;
+$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951
+
+$menuBg:#304156;
+$menuHover:#263445;
+$sidebarTitle: #ffffff;
+
+$menuLightBg:#ffffff;
+$menuLightHover:#f0f1f5;
+$sidebarLightTitle: #001529;
+
+$subMenuBg:#1f2d3d;
+$subMenuHover:#001528;
+
+$sideBarWidth: 200px;
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+ menuText: $menuText;
+ menuActiveText: $menuActiveText;
+ subMenuActiveText: $subMenuActiveText;
+ menuBg: $menuBg;
+ menuHover: $menuHover;
+ menuLightBg: $menuLightBg;
+ menuLightHover: $menuLightHover;
+ subMenuBg: $subMenuBg;
+ subMenuHover: $subMenuHover;
+ sideBarWidth: $sideBarWidth;
+ sidebarTitle: $sidebarTitle;
+ sidebarLightTitle: $sidebarLightTitle
+}
diff --git a/ruoyi-ui-v3/src/components/Breadcrumb/index.vue b/ruoyi-ui-v3/src/components/Breadcrumb/index.vue
new file mode 100644
index 00000000..1fbae5f3
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/Breadcrumb/index.vue
@@ -0,0 +1,74 @@
+
+
+
+
+ {{ item.meta.title }}
+ {{ item.meta.title }}
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/DictTag/index.vue b/ruoyi-ui-v3/src/components/DictTag/index.vue
new file mode 100644
index 00000000..97804e3c
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/DictTag/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+ {{ item.dictLabel }}
+
+ {{ item.dictLabel }}
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/Editor/index.vue b/ruoyi-ui-v3/src/components/Editor/index.vue
new file mode 100644
index 00000000..e64c37c0
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/Editor/index.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/FileUpload/index.vue b/ruoyi-ui-v3/src/components/FileUpload/index.vue
new file mode 100644
index 00000000..eae67b06
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/FileUpload/index.vue
@@ -0,0 +1,205 @@
+
+
+
+
+ 选取文件
+
+
+
+ 请上传
+ 大小不超过 {{ fileSize }}MB
+ 格式为 {{ fileType.join("/") }}
+ 的文件
+
+
+
+
+
+
+
+
+ {{ getFileName(file.name) }}
+
+
+ 删除
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/Hamburger/index.vue b/ruoyi-ui-v3/src/components/Hamburger/index.vue
new file mode 100644
index 00000000..368b0021
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/Hamburger/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/HeaderSearch/index.vue b/ruoyi-ui-v3/src/components/HeaderSearch/index.vue
new file mode 100644
index 00000000..39b87780
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/HeaderSearch/index.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/IconSelect/index.vue b/ruoyi-ui-v3/src/components/IconSelect/index.vue
new file mode 100644
index 00000000..afdce956
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/IconSelect/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/IconSelect/requireIcons.js b/ruoyi-ui-v3/src/components/IconSelect/requireIcons.js
new file mode 100644
index 00000000..99e5c54c
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/IconSelect/requireIcons.js
@@ -0,0 +1,11 @@
+
+const req = require.context('../../assets/icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const icons = requireAll(req).map(i => {
+ return i.match(re)[1]
+})
+
+export default icons
diff --git a/ruoyi-ui-v3/src/components/ImageUpload/index.vue b/ruoyi-ui-v3/src/components/ImageUpload/index.vue
new file mode 100644
index 00000000..0c4da28b
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/ImageUpload/index.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+ 请上传
+ 大小不超过 {{ fileSize }}MB
+ 格式为 {{ fileType.join("/") }}
+ 的文件
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/Pagination/index.vue b/ruoyi-ui-v3/src/components/Pagination/index.vue
new file mode 100644
index 00000000..b77c6c8c
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/Pagination/index.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/PanThumb/index.vue b/ruoyi-ui-v3/src/components/PanThumb/index.vue
new file mode 100644
index 00000000..1bcf4170
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/PanThumb/index.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/ParentView/index.vue b/ruoyi-ui-v3/src/components/ParentView/index.vue
new file mode 100644
index 00000000..7bf61489
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/ParentView/index.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/ruoyi-ui-v3/src/components/RightPanel/index.vue b/ruoyi-ui-v3/src/components/RightPanel/index.vue
new file mode 100644
index 00000000..db4a9fe5
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/RightPanel/index.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/RightToolbar/index.vue b/ruoyi-ui-v3/src/components/RightToolbar/index.vue
new file mode 100644
index 00000000..492b559e
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/RightToolbar/index.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/RuoYi/Doc/index.vue b/ruoyi-ui-v3/src/components/RuoYi/Doc/index.vue
new file mode 100644
index 00000000..e267f902
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/RuoYi/Doc/index.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/RuoYi/Git/index.vue b/ruoyi-ui-v3/src/components/RuoYi/Git/index.vue
new file mode 100644
index 00000000..4d580e41
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/RuoYi/Git/index.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/Screenfull/index.vue b/ruoyi-ui-v3/src/components/Screenfull/index.vue
new file mode 100644
index 00000000..1a77053c
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/Screenfull/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/SizeSelect/index.vue b/ruoyi-ui-v3/src/components/SizeSelect/index.vue
new file mode 100644
index 00000000..3cab0bbc
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/SizeSelect/index.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/SvgIcon/index.vue b/ruoyi-ui-v3/src/components/SvgIcon/index.vue
new file mode 100644
index 00000000..e9ebb4eb
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/SvgIcon/index.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/ThemePicker/index.vue b/ruoyi-ui-v3/src/components/ThemePicker/index.vue
new file mode 100644
index 00000000..d21ee2e5
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/ThemePicker/index.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/TopNav/index.vue b/ruoyi-ui-v3/src/components/TopNav/index.vue
new file mode 100644
index 00000000..087a19d1
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/TopNav/index.vue
@@ -0,0 +1,201 @@
+
+
+
+
+ {{ item.meta.title }}
+
+
+
+
+ 更多菜单
+
+
+ {{ item.meta.title }}
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/components/iFrame/index.vue b/ruoyi-ui-v3/src/components/iFrame/index.vue
new file mode 100644
index 00000000..5c3dfdbd
--- /dev/null
+++ b/ruoyi-ui-v3/src/components/iFrame/index.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
diff --git a/ruoyi-ui-v3/src/directive/dialog/drag.js b/ruoyi-ui-v3/src/directive/dialog/drag.js
new file mode 100644
index 00000000..2bbc5b06
--- /dev/null
+++ b/ruoyi-ui-v3/src/directive/dialog/drag.js
@@ -0,0 +1,63 @@
+/**
+* v-dialogDrag 弹窗拖拽
+* Copyright (c) 2019 ruoyi
+*/
+
+export default {
+ bind(el, binding, vnode, oldVnode) {
+ const value = binding.value
+ if (value === false) return
+ // 获取拖拽内容头部
+ const dialogHeaderEl = el.querySelector('.el-dialog__header')
+ const dragDom = el.querySelector('.el-dialog')
+ dialogHeaderEl.style.cursor = 'move'
+ // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
+ const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
+ dragDom.style.position = 'absolute'
+ dragDom.style.marginTop = 0
+ let width = dragDom.style.width
+ if (width.includes('%')) {
+ width = +document.body.clientWidth * (+width.replace(/\%/g, '') / 100)
+ } else {
+ width = +width.replace(/\px/g, '')
+ }
+ dragDom.style.left = `${(document.body.clientWidth - width) / 2}px`
+ // 鼠标按下事件
+ dialogHeaderEl.onmousedown = (e) => {
+ // 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)
+ const disX = e.clientX - dialogHeaderEl.offsetLeft
+ const disY = e.clientY - dialogHeaderEl.offsetTop
+
+ // 获取到的值带px 正则匹配替换
+ let styL, styT
+
+ // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
+ if (sty.left.includes('%')) {
+ styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
+ styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
+ } else {
+ styL = +sty.left.replace(/\px/g, '')
+ styT = +sty.top.replace(/\px/g, '')
+ }
+
+ // 鼠标拖拽事件
+ document.onmousemove = function(e) {
+ // 通过事件委托,计算移动的距离 (开始拖拽至结束拖拽的距离)
+ const l = e.clientX - disX
+ const t = e.clientY - disY
+
+ const finallyL = l + styL
+ const finallyT = t + styT
+
+ // 移动当前元素
+ dragDom.style.left = `${finallyL}px`
+ dragDom.style.top = `${finallyT}px`
+ }
+
+ document.onmouseup = function(e) {
+ document.onmousemove = null
+ document.onmouseup = null
+ }
+ }
+ }
+}
diff --git a/ruoyi-ui-v3/src/directive/index.js b/ruoyi-ui-v3/src/directive/index.js
new file mode 100644
index 00000000..849b681e
--- /dev/null
+++ b/ruoyi-ui-v3/src/directive/index.js
@@ -0,0 +1,18 @@
+import hasRole from './permission/hasRole'
+import hasPermi from './permission/hasPermi'
+import dialogDrag from './dialog/drag'
+
+const install = function(Vue) {
+ Vue.directive('hasRole', hasRole)
+ Vue.directive('hasPermi', hasPermi)
+ Vue.directive('dialogDrag', dialogDrag)
+}
+
+if (window.Vue) {
+ window.hasRole = hasRole
+ window.hasPermi = hasPermi
+ window.dialogDrag = dialogDrag
+ Vue.use(install); // eslint-disable-line
+}
+
+export default install
diff --git a/ruoyi-ui-v3/src/directive/permission/hasPermi.js b/ruoyi-ui-v3/src/directive/permission/hasPermi.js
new file mode 100644
index 00000000..594f6d1c
--- /dev/null
+++ b/ruoyi-ui-v3/src/directive/permission/hasPermi.js
@@ -0,0 +1,28 @@
+ /**
+ * v-hasPermi 操作权限处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+import store from '@/store'
+
+export default {
+ inserted(el, binding, vnode) {
+ const { value } = binding
+ const all_permission = '*:*:*'
+ const permissions = store.getters && store.getters.permissions
+
+ if (value && value instanceof Array && value.length > 0) {
+ const permissionFlag = value
+
+ const hasPermissions = permissions.some(permission => {
+ return all_permission === permission || permissionFlag.includes(permission)
+ })
+
+ if (!hasPermissions) {
+ el.parentNode && el.parentNode.removeChild(el)
+ }
+ } else {
+ throw new Error(`请设置操作权限标签值`)
+ }
+ }
+}
diff --git a/ruoyi-ui-v3/src/directive/permission/hasRole.js b/ruoyi-ui-v3/src/directive/permission/hasRole.js
new file mode 100644
index 00000000..9856c8c9
--- /dev/null
+++ b/ruoyi-ui-v3/src/directive/permission/hasRole.js
@@ -0,0 +1,28 @@
+/**
+* v-hasRole 角色权限处理
+* Copyright (c) 2019 ruoyi
+*/
+
+import store from '@/store'
+
+export default {
+ inserted(el, binding, vnode) {
+ const { value } = binding
+ const super_admin = 'admin'
+ const roles = store.getters && store.getters.roles
+
+ if (value && value instanceof Array && value.length > 0) {
+ const roleFlag = value
+
+ const hasRole = roles.some(role => {
+ return super_admin === role || roleFlag.includes(role)
+ })
+
+ if (!hasRole) {
+ el.parentNode && el.parentNode.removeChild(el)
+ }
+ } else {
+ throw new Error(`请设置角色权限标签值"`)
+ }
+ }
+}
diff --git a/ruoyi-ui-vv3/src/layout/components/AppMain.vue b/ruoyi-ui-v3/src/layout/components/AppMain.vue
similarity index 75%
rename from ruoyi-ui-vv3/src/layout/components/AppMain.vue
rename to ruoyi-ui-v3/src/layout/components/AppMain.vue
index 0c6f4b78..dbca2aa8 100644
--- a/ruoyi-ui-vv3/src/layout/components/AppMain.vue
+++ b/ruoyi-ui-v3/src/layout/components/AppMain.vue
@@ -1,10 +1,12 @@
diff --git a/ruoyi-ui-vv3/src/layout/components/InnerLink/index.vue b/ruoyi-ui-v3/src/layout/components/InnerLink/index.vue
similarity index 100%
rename from ruoyi-ui-vv3/src/layout/components/InnerLink/index.vue
rename to ruoyi-ui-v3/src/layout/components/InnerLink/index.vue
diff --git a/ruoyi-ui-vv3 - 副本/src/layout/components/Navbar.vue b/ruoyi-ui-v3/src/layout/components/Navbar.vue
similarity index 75%
rename from ruoyi-ui-vv3 - 副本/src/layout/components/Navbar.vue
rename to ruoyi-ui-v3/src/layout/components/Navbar.vue
index f9b7f980..3aa5f6bf 100644
--- a/ruoyi-ui-vv3 - 副本/src/layout/components/Navbar.vue
+++ b/ruoyi-ui-v3/src/layout/components/Navbar.vue
@@ -1,21 +1,12 @@
-
+
-
-
+
+