11932 6 місяців тому
коміт
2be4329921
100 змінених файлів з 35080 додано та 0 видалено
  1. 22 0
      .editorconfig
  2. 11 0
      .env.development
  3. 8 0
      .env.production
  4. 10 0
      .env.staging
  5. 10 0
      .eslintignore
  6. 199 0
      .eslintrc.js
  7. 1 0
      .gitignore
  8. 30 0
      README.md
  9. 13 0
      babel.config.js
  10. 12 0
      bin/build.bat
  11. 12 0
      bin/package.bat
  12. 12 0
      bin/run-web.bat
  13. 35 0
      build/index.js
  14. 33244 0
      package-lock.json
  15. 90 0
      package.json
  16. BIN
      public/favicon.ico
  17. 46 0
      public/html/ie.html
  18. 208 0
      public/index.html
  19. 2 0
      public/robots.txt
  20. 28 0
      src/App.vue
  21. 60 0
      src/api/login.js
  22. 9 0
      src/api/menu.js
  23. 57 0
      src/api/monitor/cache.js
  24. 71 0
      src/api/monitor/job.js
  25. 26 0
      src/api/monitor/jobLog.js
  26. 34 0
      src/api/monitor/logininfor.js
  27. 18 0
      src/api/monitor/online.js
  28. 26 0
      src/api/monitor/operlog.js
  29. 9 0
      src/api/monitor/server.js
  30. 60 0
      src/api/system/config.js
  31. 52 0
      src/api/system/dept.js
  32. 52 0
      src/api/system/dict/data.js
  33. 60 0
      src/api/system/dict/type.js
  34. 60 0
      src/api/system/menu.js
  35. 44 0
      src/api/system/notice.js
  36. 44 0
      src/api/system/post.js
  37. 119 0
      src/api/system/role.js
  38. 135 0
      src/api/system/user.js
  39. 85 0
      src/api/tool/gen.js
  40. BIN
      src/assets/401_images/401.gif
  41. BIN
      src/assets/404_images/404.png
  42. BIN
      src/assets/404_images/404_cloud.png
  43. 9 0
      src/assets/icons/index.js
  44. 1 0
      src/assets/icons/svg/404.svg
  45. 1 0
      src/assets/icons/svg/bug.svg
  46. 1 0
      src/assets/icons/svg/build.svg
  47. 1 0
      src/assets/icons/svg/button.svg
  48. 1 0
      src/assets/icons/svg/cascader.svg
  49. 1 0
      src/assets/icons/svg/chart.svg
  50. 1 0
      src/assets/icons/svg/checkbox.svg
  51. 1 0
      src/assets/icons/svg/clipboard.svg
  52. 1 0
      src/assets/icons/svg/code.svg
  53. 1 0
      src/assets/icons/svg/color.svg
  54. 1 0
      src/assets/icons/svg/component.svg
  55. 1 0
      src/assets/icons/svg/dashboard.svg
  56. 1 0
      src/assets/icons/svg/date-range.svg
  57. 1 0
      src/assets/icons/svg/date.svg
  58. 1 0
      src/assets/icons/svg/dict.svg
  59. 1 0
      src/assets/icons/svg/documentation.svg
  60. 1 0
      src/assets/icons/svg/download.svg
  61. 1 0
      src/assets/icons/svg/drag.svg
  62. 1 0
      src/assets/icons/svg/druid.svg
  63. 1 0
      src/assets/icons/svg/edit.svg
  64. 1 0
      src/assets/icons/svg/education.svg
  65. 1 0
      src/assets/icons/svg/email.svg
  66. 1 0
      src/assets/icons/svg/example.svg
  67. 1 0
      src/assets/icons/svg/excel.svg
  68. 1 0
      src/assets/icons/svg/exit-fullscreen.svg
  69. 1 0
      src/assets/icons/svg/eye-open.svg
  70. 1 0
      src/assets/icons/svg/eye.svg
  71. 1 0
      src/assets/icons/svg/form.svg
  72. 1 0
      src/assets/icons/svg/fullscreen.svg
  73. 1 0
      src/assets/icons/svg/github.svg
  74. 1 0
      src/assets/icons/svg/guide.svg
  75. 1 0
      src/assets/icons/svg/icon.svg
  76. 1 0
      src/assets/icons/svg/input.svg
  77. 1 0
      src/assets/icons/svg/international.svg
  78. 1 0
      src/assets/icons/svg/job.svg
  79. 1 0
      src/assets/icons/svg/language.svg
  80. 1 0
      src/assets/icons/svg/link.svg
  81. 1 0
      src/assets/icons/svg/list.svg
  82. 1 0
      src/assets/icons/svg/lock.svg
  83. 1 0
      src/assets/icons/svg/log.svg
  84. 1 0
      src/assets/icons/svg/logininfor.svg
  85. 1 0
      src/assets/icons/svg/message.svg
  86. 1 0
      src/assets/icons/svg/money.svg
  87. 2 0
      src/assets/icons/svg/monitor.svg
  88. 1 0
      src/assets/icons/svg/nested.svg
  89. 1 0
      src/assets/icons/svg/number.svg
  90. 1 0
      src/assets/icons/svg/online.svg
  91. 1 0
      src/assets/icons/svg/password.svg
  92. 1 0
      src/assets/icons/svg/pdf.svg
  93. 1 0
      src/assets/icons/svg/people.svg
  94. 1 0
      src/assets/icons/svg/peoples.svg
  95. 1 0
      src/assets/icons/svg/phone.svg
  96. 1 0
      src/assets/icons/svg/post.svg
  97. 1 0
      src/assets/icons/svg/qq.svg
  98. 1 0
      src/assets/icons/svg/question.svg
  99. 1 0
      src/assets/icons/svg/radio.svg
  100. 0 0
      src/assets/icons/svg/rate.svg

+ 22 - 0
.editorconfig

@@ -0,0 +1,22 @@
1
+# 告诉EditorConfig插件,这是根文件,不用继续往上查找
2
+root = true
3
+
4
+# 匹配全部文件
5
+[*]
6
+# 设置字符集
7
+charset = utf-8
8
+# 缩进风格,可选space、tab
9
+indent_style = space
10
+# 缩进的空格数
11
+indent_size = 2
12
+# 结尾换行符,可选lf、cr、crlf
13
+end_of_line = lf
14
+# 在文件结尾插入新行
15
+insert_final_newline = true
16
+# 删除一行中的前后空格
17
+trim_trailing_whitespace = true
18
+
19
+# 匹配md结尾的文件
20
+[*.md]
21
+insert_final_newline = false
22
+trim_trailing_whitespace = false

+ 11 - 0
.env.development

@@ -0,0 +1,11 @@
1
+# 页面标题
2
+VUE_APP_TITLE = 若依管理系统
3
+
4
+# 开发环境配置
5
+ENV = 'development'
6
+
7
+# 若依管理系统/开发环境
8
+VUE_APP_BASE_API = '/dev-api'
9
+
10
+# 路由懒加载
11
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 8 - 0
.env.production

@@ -0,0 +1,8 @@
1
+# 页面标题
2
+VUE_APP_TITLE = 若依管理系统
3
+
4
+# 生产环境配置
5
+ENV = 'production'
6
+
7
+# 若依管理系统/生产环境
8
+VUE_APP_BASE_API = '/prod-api'

+ 10 - 0
.env.staging

@@ -0,0 +1,10 @@
1
+# 页面标题
2
+VUE_APP_TITLE = 若依管理系统
3
+
4
+NODE_ENV = production
5
+
6
+# 测试环境配置
7
+ENV = 'staging'
8
+
9
+# 若依管理系统/测试环境
10
+VUE_APP_BASE_API = '/stage-api'

+ 10 - 0
.eslintignore

@@ -0,0 +1,10 @@
1
+# 忽略build目录下类型为js的文件的语法检查
2
+build/*.js
3
+# 忽略src/assets目录下文件的语法检查
4
+src/assets
5
+# 忽略public目录下文件的语法检查
6
+public
7
+# 忽略当前目录下为js的文件的语法检查
8
+*.js
9
+# 忽略当前目录下为vue的文件的语法检查
10
+*.vue

+ 199 - 0
.eslintrc.js

@@ -0,0 +1,199 @@
1
+// ESlint 检查配置
2
+module.exports = {
3
+  root: true,
4
+  parserOptions: {
5
+    parser: 'babel-eslint',
6
+    sourceType: 'module'
7
+  },
8
+  env: {
9
+    browser: true,
10
+    node: true,
11
+    es6: true,
12
+  },
13
+  extends: ['plugin:vue/recommended', 'eslint:recommended'],
14
+
15
+  // add your custom rules here
16
+  //it is base on https://github.com/vuejs/eslint-config-vue
17
+  rules: {
18
+    "vue/max-attributes-per-line": [2, {
19
+      "singleline": 10,
20
+      "multiline": {
21
+        "max": 1,
22
+        "allowFirstLine": false
23
+      }
24
+    }],
25
+    "vue/singleline-html-element-content-newline": "off",
26
+    "vue/multiline-html-element-content-newline":"off",
27
+    "vue/name-property-casing": ["error", "PascalCase"],
28
+    "vue/no-v-html": "off",
29
+    'accessor-pairs': 2,
30
+    'arrow-spacing': [2, {
31
+      'before': true,
32
+      'after': true
33
+    }],
34
+    'block-spacing': [2, 'always'],
35
+    'brace-style': [2, '1tbs', {
36
+      'allowSingleLine': true
37
+    }],
38
+    'camelcase': [0, {
39
+      'properties': 'always'
40
+    }],
41
+    'comma-dangle': [2, 'never'],
42
+    'comma-spacing': [2, {
43
+      'before': false,
44
+      'after': true
45
+    }],
46
+    'comma-style': [2, 'last'],
47
+    'constructor-super': 2,
48
+    'curly': [2, 'multi-line'],
49
+    'dot-location': [2, 'property'],
50
+    'eol-last': 2,
51
+    'eqeqeq': ["error", "always", {"null": "ignore"}],
52
+    'generator-star-spacing': [2, {
53
+      'before': true,
54
+      'after': true
55
+    }],
56
+    'handle-callback-err': [2, '^(err|error)$'],
57
+    'indent': [2, 2, {
58
+      'SwitchCase': 1
59
+    }],
60
+    'jsx-quotes': [2, 'prefer-single'],
61
+    'key-spacing': [2, {
62
+      'beforeColon': false,
63
+      'afterColon': true
64
+    }],
65
+    'keyword-spacing': [2, {
66
+      'before': true,
67
+      'after': true
68
+    }],
69
+    'new-cap': [2, {
70
+      'newIsCap': true,
71
+      'capIsNew': false
72
+    }],
73
+    'new-parens': 2,
74
+    'no-array-constructor': 2,
75
+    'no-caller': 2,
76
+    'no-console': 'off',
77
+    'no-class-assign': 2,
78
+    'no-cond-assign': 2,
79
+    'no-const-assign': 2,
80
+    'no-control-regex': 0,
81
+    'no-delete-var': 2,
82
+    'no-dupe-args': 2,
83
+    'no-dupe-class-members': 2,
84
+    'no-dupe-keys': 2,
85
+    'no-duplicate-case': 2,
86
+    'no-empty-character-class': 2,
87
+    'no-empty-pattern': 2,
88
+    'no-eval': 2,
89
+    'no-ex-assign': 2,
90
+    'no-extend-native': 2,
91
+    'no-extra-bind': 2,
92
+    'no-extra-boolean-cast': 2,
93
+    'no-extra-parens': [2, 'functions'],
94
+    'no-fallthrough': 2,
95
+    'no-floating-decimal': 2,
96
+    'no-func-assign': 2,
97
+    'no-implied-eval': 2,
98
+    'no-inner-declarations': [2, 'functions'],
99
+    'no-invalid-regexp': 2,
100
+    'no-irregular-whitespace': 2,
101
+    'no-iterator': 2,
102
+    'no-label-var': 2,
103
+    'no-labels': [2, {
104
+      'allowLoop': false,
105
+      'allowSwitch': false
106
+    }],
107
+    'no-lone-blocks': 2,
108
+    'no-mixed-spaces-and-tabs': 2,
109
+    'no-multi-spaces': 2,
110
+    'no-multi-str': 2,
111
+    'no-multiple-empty-lines': [2, {
112
+      'max': 1
113
+    }],
114
+    'no-native-reassign': 2,
115
+    'no-negated-in-lhs': 2,
116
+    'no-new-object': 2,
117
+    'no-new-require': 2,
118
+    'no-new-symbol': 2,
119
+    'no-new-wrappers': 2,
120
+    'no-obj-calls': 2,
121
+    'no-octal': 2,
122
+    'no-octal-escape': 2,
123
+    'no-path-concat': 2,
124
+    'no-proto': 2,
125
+    'no-redeclare': 2,
126
+    'no-regex-spaces': 2,
127
+    'no-return-assign': [2, 'except-parens'],
128
+    'no-self-assign': 2,
129
+    'no-self-compare': 2,
130
+    'no-sequences': 2,
131
+    'no-shadow-restricted-names': 2,
132
+    'no-spaced-func': 2,
133
+    'no-sparse-arrays': 2,
134
+    'no-this-before-super': 2,
135
+    'no-throw-literal': 2,
136
+    'no-trailing-spaces': 2,
137
+    'no-undef': 2,
138
+    'no-undef-init': 2,
139
+    'no-unexpected-multiline': 2,
140
+    'no-unmodified-loop-condition': 2,
141
+    'no-unneeded-ternary': [2, {
142
+      'defaultAssignment': false
143
+    }],
144
+    'no-unreachable': 2,
145
+    'no-unsafe-finally': 2,
146
+    'no-unused-vars': [2, {
147
+      'vars': 'all',
148
+      'args': 'none'
149
+    }],
150
+    'no-useless-call': 2,
151
+    'no-useless-computed-key': 2,
152
+    'no-useless-constructor': 2,
153
+    'no-useless-escape': 0,
154
+    'no-whitespace-before-property': 2,
155
+    'no-with': 2,
156
+    'one-var': [2, {
157
+      'initialized': 'never'
158
+    }],
159
+    'operator-linebreak': [2, 'after', {
160
+      'overrides': {
161
+        '?': 'before',
162
+        ':': 'before'
163
+      }
164
+    }],
165
+    'padded-blocks': [2, 'never'],
166
+    'quotes': [2, 'single', {
167
+      'avoidEscape': true,
168
+      'allowTemplateLiterals': true
169
+    }],
170
+    'semi': [2, 'never'],
171
+    'semi-spacing': [2, {
172
+      'before': false,
173
+      'after': true
174
+    }],
175
+    'space-before-blocks': [2, 'always'],
176
+    'space-before-function-paren': [2, 'never'],
177
+    'space-in-parens': [2, 'never'],
178
+    'space-infix-ops': 2,
179
+    'space-unary-ops': [2, {
180
+      'words': true,
181
+      'nonwords': false
182
+    }],
183
+    'spaced-comment': [2, 'always', {
184
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
185
+    }],
186
+    'template-curly-spacing': [2, 'never'],
187
+    'use-isnan': 2,
188
+    'valid-typeof': 2,
189
+    'wrap-iife': [2, 'any'],
190
+    'yield-star-spacing': [2, 'both'],
191
+    'yoda': [2, 'never'],
192
+    'prefer-const': 2,
193
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
194
+    'object-curly-spacing': [2, 'always', {
195
+      objectsInObjects: false
196
+    }],
197
+    'array-bracket-spacing': [2, 'never']
198
+  }
199
+}

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
1
+node_modules

+ 30 - 0
README.md

@@ -0,0 +1,30 @@
1
+## 开发
2
+
3
+```bash
4
+# 克隆项目
5
+git clone https://gitee.com/y_project/RuoYi-Vue
6
+
7
+# 进入项目目录
8
+cd ruoyi-ui
9
+
10
+# 安装依赖
11
+npm install
12
+
13
+# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
14
+npm install --registry=https://registry.npmmirror.com
15
+
16
+# 启动服务
17
+npm run dev
18
+```
19
+
20
+浏览器访问 http://localhost:80
21
+
22
+## 发布
23
+
24
+```bash
25
+# 构建测试环境
26
+npm run build:stage
27
+
28
+# 构建生产环境
29
+npm run build:prod
30
+```

+ 13 - 0
babel.config.js

@@ -0,0 +1,13 @@
1
+module.exports = {
2
+  presets: [
3
+    // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
4
+    '@vue/cli-plugin-babel/preset'
5
+  ],
6
+  'env': {
7
+    'development': {
8
+      // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
9
+      // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
10
+      'plugins': ['dynamic-import-node']
11
+    }
12
+  }
13
+}

+ 12 - 0
bin/build.bat

@@ -0,0 +1,12 @@
1
+@echo off
2
+echo.
3
+echo [信息] 打包Web工程,生成dist文件。
4
+echo.
5
+
6
+%~d0
7
+cd %~dp0
8
+
9
+cd ..
10
+npm run build:prod
11
+
12
+pause

+ 12 - 0
bin/package.bat

@@ -0,0 +1,12 @@
1
+@echo off
2
+echo.
3
+echo [信息] 安装Web工程,生成node_modules文件。
4
+echo.
5
+
6
+%~d0
7
+cd %~dp0
8
+
9
+cd ..
10
+npm install --registry=https://registry.npmmirror.com
11
+
12
+pause

+ 12 - 0
bin/run-web.bat

@@ -0,0 +1,12 @@
1
+@echo off
2
+echo.
3
+echo [信息] 使用 Vue CLI 命令运行 Web 工程。
4
+echo.
5
+
6
+%~d0
7
+cd %~dp0
8
+
9
+cd ..
10
+npm run dev
11
+
12
+pause

+ 35 - 0
build/index.js

@@ -0,0 +1,35 @@
1
+const { run } = require('runjs')
2
+const chalk = require('chalk')
3
+const config = require('../vue.config.js')
4
+const rawArgv = process.argv.slice(2)
5
+const args = rawArgv.join(' ')
6
+
7
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
8
+  const report = rawArgv.includes('--report')
9
+
10
+  run(`vue-cli-service build ${args}`)
11
+
12
+  const port = 9526
13
+  const publicPath = config.publicPath
14
+
15
+  var connect = require('connect')
16
+  var serveStatic = require('serve-static')
17
+  const app = connect()
18
+
19
+  app.use(
20
+    publicPath,
21
+    serveStatic('./dist', {
22
+      index: ['index.html', '/']
23
+    })
24
+  )
25
+
26
+  app.listen(port, function () {
27
+    console.log(chalk.green(`> Preview at  http://localhost:${port}${publicPath}`))
28
+    if (report) {
29
+      console.log(chalk.green(`> Report at  http://localhost:${port}${publicPath}report.html`))
30
+    }
31
+
32
+  })
33
+} else {
34
+  run(`vue-cli-service build ${args}`)
35
+}

Різницю між файлами не показано, бо вона завелика
+ 33244 - 0
package-lock.json


+ 90 - 0
package.json

@@ -0,0 +1,90 @@
1
+{
2
+  "name": "ruoyi",
3
+  "version": "3.8.7",
4
+  "description": "牙科管理系统",
5
+  "author": "fcg",
6
+  "license": "MIT",
7
+  "scripts": {
8
+    "dev": "vue-cli-service serve",
9
+    "build:prod": "vue-cli-service build",
10
+    "build:stage": "vue-cli-service build --mode staging",
11
+    "preview": "node build/index.js --preview",
12
+    "lint": "eslint --ext .js,.vue src"
13
+  },
14
+  "husky": {
15
+    "hooks": {
16
+      "pre-commit": "lint-staged"
17
+    }
18
+  },
19
+  "lint-staged": {
20
+    "src/**/*.{js,vue}": [
21
+      "eslint --fix",
22
+      "git add"
23
+    ]
24
+  },
25
+  "keywords": [
26
+    "vue",
27
+    "admin",
28
+    "dashboard",
29
+    "element-ui",
30
+    "boilerplate",
31
+    "admin-template",
32
+    "management-system"
33
+  ],
34
+  "repository": {
35
+    "type": "git",
36
+    "url": "https://gitee.com/y_project/RuoYi-Vue.git"
37
+  },
38
+  "dependencies": {
39
+    "@riophae/vue-treeselect": "0.4.0",
40
+    "axios": "0.24.0",
41
+    "clipboard": "2.0.8",
42
+    "core-js": "3.25.3",
43
+    "echarts": "5.4.0",
44
+    "element-ui": "2.15.14",
45
+    "file-saver": "2.0.5",
46
+    "fuse.js": "6.4.3",
47
+    "highlight.js": "9.18.5",
48
+    "js-beautify": "1.13.0",
49
+    "js-cookie": "3.0.1",
50
+    "jsencrypt": "3.0.0-rc.1",
51
+    "nprogress": "0.2.0",
52
+    "quill": "1.3.7",
53
+    "screenfull": "5.0.2",
54
+    "sortablejs": "1.10.2",
55
+    "vue": "2.6.12",
56
+    "vue-count-to": "1.0.13",
57
+    "vue-cropper": "0.5.5",
58
+    "vue-meta": "2.4.0",
59
+    "vue-router": "3.4.9",
60
+    "vuedraggable": "2.24.3",
61
+    "vuex": "3.6.0"
62
+  },
63
+  "devDependencies": {
64
+    "@vue/cli-plugin-babel": "4.4.6",
65
+    "@vue/cli-plugin-eslint": "4.4.6",
66
+    "@vue/cli-service": "4.4.6",
67
+    "babel-eslint": "10.1.0",
68
+    "babel-plugin-dynamic-import-node": "2.3.3",
69
+    "chalk": "4.1.0",
70
+    "compression-webpack-plugin": "6.1.2",
71
+    "connect": "3.6.6",
72
+    "eslint": "7.15.0",
73
+    "eslint-plugin-vue": "7.2.0",
74
+    "lint-staged": "10.5.3",
75
+    "runjs": "4.4.2",
76
+    "sass": "1.32.13",
77
+    "sass-loader": "10.1.1",
78
+    "script-ext-html-webpack-plugin": "2.1.5",
79
+    "svg-sprite-loader": "5.1.1",
80
+    "vue-template-compiler": "2.6.12"
81
+  },
82
+  "engines": {
83
+    "node": ">=8.9",
84
+    "npm": ">= 3.0.0"
85
+  },
86
+  "browserslist": [
87
+    "> 1%",
88
+    "last 2 versions"
89
+  ]
90
+}

BIN
public/favicon.ico


Різницю між файлами не показано, бо вона завелика
+ 46 - 0
public/html/ie.html


+ 208 - 0
public/index.html

@@ -0,0 +1,208 @@
1
+<!DOCTYPE html>
2
+<html>
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6
+    <meta name="renderer" content="webkit">
7
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
8
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
9
+    <title><%= webpackConfig.name %></title>
10
+    <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
11
+	  <style>
12
+    html,
13
+    body,
14
+    #app {
15
+      height: 100%;
16
+      margin: 0px;
17
+      padding: 0px;
18
+    }
19
+    .chromeframe {
20
+      margin: 0.2em 0;
21
+      background: #ccc;
22
+      color: #000;
23
+      padding: 0.2em 0;
24
+    }
25
+
26
+    #loader-wrapper {
27
+      position: fixed;
28
+      top: 0;
29
+      left: 0;
30
+      width: 100%;
31
+      height: 100%;
32
+      z-index: 999999;
33
+    }
34
+
35
+    #loader {
36
+      display: block;
37
+      position: relative;
38
+      left: 50%;
39
+      top: 50%;
40
+      width: 150px;
41
+      height: 150px;
42
+      margin: -75px 0 0 -75px;
43
+      border-radius: 50%;
44
+      border: 3px solid transparent;
45
+      border-top-color: #FFF;
46
+      -webkit-animation: spin 2s linear infinite;
47
+      -ms-animation: spin 2s linear infinite;
48
+      -moz-animation: spin 2s linear infinite;
49
+      -o-animation: spin 2s linear infinite;
50
+      animation: spin 2s linear infinite;
51
+      z-index: 1001;
52
+    }
53
+
54
+    #loader:before {
55
+      content: "";
56
+      position: absolute;
57
+      top: 5px;
58
+      left: 5px;
59
+      right: 5px;
60
+      bottom: 5px;
61
+      border-radius: 50%;
62
+      border: 3px solid transparent;
63
+      border-top-color: #FFF;
64
+      -webkit-animation: spin 3s linear infinite;
65
+      -moz-animation: spin 3s linear infinite;
66
+      -o-animation: spin 3s linear infinite;
67
+      -ms-animation: spin 3s linear infinite;
68
+      animation: spin 3s linear infinite;
69
+    }
70
+
71
+    #loader:after {
72
+      content: "";
73
+      position: absolute;
74
+      top: 15px;
75
+      left: 15px;
76
+      right: 15px;
77
+      bottom: 15px;
78
+      border-radius: 50%;
79
+      border: 3px solid transparent;
80
+      border-top-color: #FFF;
81
+      -moz-animation: spin 1.5s linear infinite;
82
+      -o-animation: spin 1.5s linear infinite;
83
+      -ms-animation: spin 1.5s linear infinite;
84
+      -webkit-animation: spin 1.5s linear infinite;
85
+      animation: spin 1.5s linear infinite;
86
+    }
87
+
88
+
89
+    @-webkit-keyframes spin {
90
+      0% {
91
+        -webkit-transform: rotate(0deg);
92
+        -ms-transform: rotate(0deg);
93
+        transform: rotate(0deg);
94
+      }
95
+      100% {
96
+        -webkit-transform: rotate(360deg);
97
+        -ms-transform: rotate(360deg);
98
+        transform: rotate(360deg);
99
+      }
100
+    }
101
+
102
+    @keyframes spin {
103
+      0% {
104
+        -webkit-transform: rotate(0deg);
105
+        -ms-transform: rotate(0deg);
106
+        transform: rotate(0deg);
107
+      }
108
+      100% {
109
+        -webkit-transform: rotate(360deg);
110
+        -ms-transform: rotate(360deg);
111
+        transform: rotate(360deg);
112
+      }
113
+    }
114
+
115
+
116
+    #loader-wrapper .loader-section {
117
+      position: fixed;
118
+      top: 0;
119
+      width: 51%;
120
+      height: 100%;
121
+      background: #7171C6;
122
+      z-index: 1000;
123
+      -webkit-transform: translateX(0);
124
+      -ms-transform: translateX(0);
125
+      transform: translateX(0);
126
+    }
127
+
128
+    #loader-wrapper .loader-section.section-left {
129
+      left: 0;
130
+    }
131
+
132
+    #loader-wrapper .loader-section.section-right {
133
+      right: 0;
134
+    }
135
+
136
+
137
+    .loaded #loader-wrapper .loader-section.section-left {
138
+      -webkit-transform: translateX(-100%);
139
+      -ms-transform: translateX(-100%);
140
+      transform: translateX(-100%);
141
+      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
142
+      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
143
+    }
144
+
145
+    .loaded #loader-wrapper .loader-section.section-right {
146
+      -webkit-transform: translateX(100%);
147
+      -ms-transform: translateX(100%);
148
+      transform: translateX(100%);
149
+      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
150
+      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
151
+    }
152
+
153
+    .loaded #loader {
154
+      opacity: 0;
155
+      -webkit-transition: all 0.3s ease-out;
156
+      transition: all 0.3s ease-out;
157
+    }
158
+
159
+    .loaded #loader-wrapper {
160
+      visibility: hidden;
161
+      -webkit-transform: translateY(-100%);
162
+      -ms-transform: translateY(-100%);
163
+      transform: translateY(-100%);
164
+      -webkit-transition: all 0.3s 1s ease-out;
165
+      transition: all 0.3s 1s ease-out;
166
+    }
167
+
168
+    .no-js #loader-wrapper {
169
+      display: none;
170
+    }
171
+
172
+    .no-js h1 {
173
+      color: #222222;
174
+    }
175
+
176
+    #loader-wrapper .load_title {
177
+      font-family: 'Open Sans';
178
+      color: #FFF;
179
+      font-size: 19px;
180
+      width: 100%;
181
+      text-align: center;
182
+      z-index: 9999999999999;
183
+      position: absolute;
184
+      top: 60%;
185
+      opacity: 1;
186
+      line-height: 30px;
187
+    }
188
+
189
+    #loader-wrapper .load_title span {
190
+      font-weight: normal;
191
+      font-style: italic;
192
+      font-size: 13px;
193
+      color: #FFF;
194
+      opacity: 0.5;
195
+    }
196
+  </style>
197
+  </head>
198
+  <body>
199
+    <div id="app">
200
+	    <div id="loader-wrapper">
201
+		    <div id="loader"></div>
202
+		    <div class="loader-section section-left"></div>
203
+		    <div class="loader-section section-right"></div>
204
+		    <div class="load_title">正在加载系统资源,请耐心等待</div>
205
+        </div>
206
+	</div>
207
+  </body>
208
+</html>

+ 2 - 0
public/robots.txt

@@ -0,0 +1,2 @@
1
+User-agent: *
2
+Disallow: /

+ 28 - 0
src/App.vue

@@ -0,0 +1,28 @@
1
+<template>
2
+  <div id="app">
3
+    <router-view />
4
+    <theme-picker />
5
+  </div>
6
+</template>
7
+
8
+<script>
9
+import ThemePicker from "@/components/ThemePicker";
10
+
11
+export default {
12
+  name: "App",
13
+  components: { ThemePicker },
14
+  metaInfo() {
15
+    return {
16
+      title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
17
+      titleTemplate: title => {
18
+        return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE
19
+      }
20
+    }
21
+  }
22
+};
23
+</script>
24
+<style scoped>
25
+#app .theme-picker {
26
+  display: none;
27
+}
28
+</style>

+ 60 - 0
src/api/login.js

@@ -0,0 +1,60 @@
1
+import request from '@/utils/request'
2
+
3
+// 登录方法
4
+export function login(username, password, code, uuid) {
5
+  const data = {
6
+    username,
7
+    password,
8
+    code,
9
+    uuid
10
+  }
11
+  return request({
12
+    url: '/login',
13
+    headers: {
14
+      isToken: false,
15
+      repeatSubmit: false
16
+    },
17
+    method: 'post',
18
+    data: data
19
+  })
20
+}
21
+
22
+// 注册方法
23
+export function register(data) {
24
+  return request({
25
+    url: '/register',
26
+    headers: {
27
+      isToken: false
28
+    },
29
+    method: 'post',
30
+    data: data
31
+  })
32
+}
33
+
34
+// 获取用户详细信息
35
+export function getInfo() {
36
+  return request({
37
+    url: '/getInfo',
38
+    method: 'get'
39
+  })
40
+}
41
+
42
+// 退出方法
43
+export function logout() {
44
+  return request({
45
+    url: '/logout',
46
+    method: 'post'
47
+  })
48
+}
49
+
50
+// 获取验证码
51
+export function getCodeImg() {
52
+  return request({
53
+    url: '/captchaImage',
54
+    headers: {
55
+      isToken: false
56
+    },
57
+    method: 'get',
58
+    timeout: 20000
59
+  })
60
+}

+ 9 - 0
src/api/menu.js

@@ -0,0 +1,9 @@
1
+import request from '@/utils/request'
2
+
3
+// 获取路由
4
+export const getRouters = () => {
5
+  return request({
6
+    url: '/getRouters',
7
+    method: 'get'
8
+  })
9
+}

+ 57 - 0
src/api/monitor/cache.js

@@ -0,0 +1,57 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询缓存详细
4
+export function getCache() {
5
+  return request({
6
+    url: '/monitor/cache',
7
+    method: 'get'
8
+  })
9
+}
10
+
11
+// 查询缓存名称列表
12
+export function listCacheName() {
13
+  return request({
14
+    url: '/monitor/cache/getNames',
15
+    method: 'get'
16
+  })
17
+}
18
+
19
+// 查询缓存键名列表
20
+export function listCacheKey(cacheName) {
21
+  return request({
22
+    url: '/monitor/cache/getKeys/' + cacheName,
23
+    method: 'get'
24
+  })
25
+}
26
+
27
+// 查询缓存内容
28
+export function getCacheValue(cacheName, cacheKey) {
29
+  return request({
30
+    url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
31
+    method: 'get'
32
+  })
33
+}
34
+
35
+// 清理指定名称缓存
36
+export function clearCacheName(cacheName) {
37
+  return request({
38
+    url: '/monitor/cache/clearCacheName/' + cacheName,
39
+    method: 'delete'
40
+  })
41
+}
42
+
43
+// 清理指定键名缓存
44
+export function clearCacheKey(cacheKey) {
45
+  return request({
46
+    url: '/monitor/cache/clearCacheKey/' + cacheKey,
47
+    method: 'delete'
48
+  })
49
+}
50
+
51
+// 清理全部缓存
52
+export function clearCacheAll() {
53
+  return request({
54
+    url: '/monitor/cache/clearCacheAll',
55
+    method: 'delete'
56
+  })
57
+}

+ 71 - 0
src/api/monitor/job.js

@@ -0,0 +1,71 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询定时任务调度列表
4
+export function listJob(query) {
5
+  return request({
6
+    url: '/monitor/job/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询定时任务调度详细
13
+export function getJob(jobId) {
14
+  return request({
15
+    url: '/monitor/job/' + jobId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增定时任务调度
21
+export function addJob(data) {
22
+  return request({
23
+    url: '/monitor/job',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改定时任务调度
30
+export function updateJob(data) {
31
+  return request({
32
+    url: '/monitor/job',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 删除定时任务调度
39
+export function delJob(jobId) {
40
+  return request({
41
+    url: '/monitor/job/' + jobId,
42
+    method: 'delete'
43
+  })
44
+}
45
+
46
+// 任务状态修改
47
+export function changeJobStatus(jobId, status) {
48
+  const data = {
49
+    jobId,
50
+    status
51
+  }
52
+  return request({
53
+    url: '/monitor/job/changeStatus',
54
+    method: 'put',
55
+    data: data
56
+  })
57
+}
58
+
59
+
60
+// 定时任务立即执行一次
61
+export function runJob(jobId, jobGroup) {
62
+  const data = {
63
+    jobId,
64
+    jobGroup
65
+  }
66
+  return request({
67
+    url: '/monitor/job/run',
68
+    method: 'put',
69
+    data: data
70
+  })
71
+}

+ 26 - 0
src/api/monitor/jobLog.js

@@ -0,0 +1,26 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询调度日志列表
4
+export function listJobLog(query) {
5
+  return request({
6
+    url: '/monitor/jobLog/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 删除调度日志
13
+export function delJobLog(jobLogId) {
14
+  return request({
15
+    url: '/monitor/jobLog/' + jobLogId,
16
+    method: 'delete'
17
+  })
18
+}
19
+
20
+// 清空调度日志
21
+export function cleanJobLog() {
22
+  return request({
23
+    url: '/monitor/jobLog/clean',
24
+    method: 'delete'
25
+  })
26
+}

+ 34 - 0
src/api/monitor/logininfor.js

@@ -0,0 +1,34 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询登录日志列表
4
+export function list(query) {
5
+  return request({
6
+    url: '/monitor/logininfor/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 删除登录日志
13
+export function delLogininfor(infoId) {
14
+  return request({
15
+    url: '/monitor/logininfor/' + infoId,
16
+    method: 'delete'
17
+  })
18
+}
19
+
20
+// 解锁用户登录状态
21
+export function unlockLogininfor(userName) {
22
+  return request({
23
+    url: '/monitor/logininfor/unlock/' + userName,
24
+    method: 'get'
25
+  })
26
+}
27
+
28
+// 清空登录日志
29
+export function cleanLogininfor() {
30
+  return request({
31
+    url: '/monitor/logininfor/clean',
32
+    method: 'delete'
33
+  })
34
+}

+ 18 - 0
src/api/monitor/online.js

@@ -0,0 +1,18 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询在线用户列表
4
+export function list(query) {
5
+  return request({
6
+    url: '/monitor/online/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 强退用户
13
+export function forceLogout(tokenId) {
14
+  return request({
15
+    url: '/monitor/online/' + tokenId,
16
+    method: 'delete'
17
+  })
18
+}

+ 26 - 0
src/api/monitor/operlog.js

@@ -0,0 +1,26 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询操作日志列表
4
+export function list(query) {
5
+  return request({
6
+    url: '/monitor/operlog/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 删除操作日志
13
+export function delOperlog(operId) {
14
+  return request({
15
+    url: '/monitor/operlog/' + operId,
16
+    method: 'delete'
17
+  })
18
+}
19
+
20
+// 清空操作日志
21
+export function cleanOperlog() {
22
+  return request({
23
+    url: '/monitor/operlog/clean',
24
+    method: 'delete'
25
+  })
26
+}

+ 9 - 0
src/api/monitor/server.js

@@ -0,0 +1,9 @@
1
+import request from '@/utils/request'
2
+
3
+// 获取服务信息
4
+export function getServer() {
5
+  return request({
6
+    url: '/monitor/server',
7
+    method: 'get'
8
+  })
9
+}

+ 60 - 0
src/api/system/config.js

@@ -0,0 +1,60 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询参数列表
4
+export function listConfig(query) {
5
+  return request({
6
+    url: '/system/config/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询参数详细
13
+export function getConfig(configId) {
14
+  return request({
15
+    url: '/system/config/' + configId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 根据参数键名查询参数值
21
+export function getConfigKey(configKey) {
22
+  return request({
23
+    url: '/system/config/configKey/' + configKey,
24
+    method: 'get'
25
+  })
26
+}
27
+
28
+// 新增参数配置
29
+export function addConfig(data) {
30
+  return request({
31
+    url: '/system/config',
32
+    method: 'post',
33
+    data: data
34
+  })
35
+}
36
+
37
+// 修改参数配置
38
+export function updateConfig(data) {
39
+  return request({
40
+    url: '/system/config',
41
+    method: 'put',
42
+    data: data
43
+  })
44
+}
45
+
46
+// 删除参数配置
47
+export function delConfig(configId) {
48
+  return request({
49
+    url: '/system/config/' + configId,
50
+    method: 'delete'
51
+  })
52
+}
53
+
54
+// 刷新参数缓存
55
+export function refreshCache() {
56
+  return request({
57
+    url: '/system/config/refreshCache',
58
+    method: 'delete'
59
+  })
60
+}

+ 52 - 0
src/api/system/dept.js

@@ -0,0 +1,52 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询部门列表
4
+export function listDept(query) {
5
+  return request({
6
+    url: '/system/dept/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询部门列表(排除节点)
13
+export function listDeptExcludeChild(deptId) {
14
+  return request({
15
+    url: '/system/dept/list/exclude/' + deptId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 查询部门详细
21
+export function getDept(deptId) {
22
+  return request({
23
+    url: '/system/dept/' + deptId,
24
+    method: 'get'
25
+  })
26
+}
27
+
28
+// 新增部门
29
+export function addDept(data) {
30
+  return request({
31
+    url: '/system/dept',
32
+    method: 'post',
33
+    data: data
34
+  })
35
+}
36
+
37
+// 修改部门
38
+export function updateDept(data) {
39
+  return request({
40
+    url: '/system/dept',
41
+    method: 'put',
42
+    data: data
43
+  })
44
+}
45
+
46
+// 删除部门
47
+export function delDept(deptId) {
48
+  return request({
49
+    url: '/system/dept/' + deptId,
50
+    method: 'delete'
51
+  })
52
+}

+ 52 - 0
src/api/system/dict/data.js

@@ -0,0 +1,52 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询字典数据列表
4
+export function listData(query) {
5
+  return request({
6
+    url: '/system/dict/data/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询字典数据详细
13
+export function getData(dictCode) {
14
+  return request({
15
+    url: '/system/dict/data/' + dictCode,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 根据字典类型查询字典数据信息
21
+export function getDicts(dictType) {
22
+  return request({
23
+    url: '/system/dict/data/type/' + dictType,
24
+    method: 'get'
25
+  })
26
+}
27
+
28
+// 新增字典数据
29
+export function addData(data) {
30
+  return request({
31
+    url: '/system/dict/data',
32
+    method: 'post',
33
+    data: data
34
+  })
35
+}
36
+
37
+// 修改字典数据
38
+export function updateData(data) {
39
+  return request({
40
+    url: '/system/dict/data',
41
+    method: 'put',
42
+    data: data
43
+  })
44
+}
45
+
46
+// 删除字典数据
47
+export function delData(dictCode) {
48
+  return request({
49
+    url: '/system/dict/data/' + dictCode,
50
+    method: 'delete'
51
+  })
52
+}

+ 60 - 0
src/api/system/dict/type.js

@@ -0,0 +1,60 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询字典类型列表
4
+export function listType(query) {
5
+  return request({
6
+    url: '/system/dict/type/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询字典类型详细
13
+export function getType(dictId) {
14
+  return request({
15
+    url: '/system/dict/type/' + dictId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增字典类型
21
+export function addType(data) {
22
+  return request({
23
+    url: '/system/dict/type',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改字典类型
30
+export function updateType(data) {
31
+  return request({
32
+    url: '/system/dict/type',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 删除字典类型
39
+export function delType(dictId) {
40
+  return request({
41
+    url: '/system/dict/type/' + dictId,
42
+    method: 'delete'
43
+  })
44
+}
45
+
46
+// 刷新字典缓存
47
+export function refreshCache() {
48
+  return request({
49
+    url: '/system/dict/type/refreshCache',
50
+    method: 'delete'
51
+  })
52
+}
53
+
54
+// 获取字典选择框列表
55
+export function optionselect() {
56
+  return request({
57
+    url: '/system/dict/type/optionselect',
58
+    method: 'get'
59
+  })
60
+}

+ 60 - 0
src/api/system/menu.js

@@ -0,0 +1,60 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询菜单列表
4
+export function listMenu(query) {
5
+  return request({
6
+    url: '/system/menu/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询菜单详细
13
+export function getMenu(menuId) {
14
+  return request({
15
+    url: '/system/menu/' + menuId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 查询菜单下拉树结构
21
+export function treeselect() {
22
+  return request({
23
+    url: '/system/menu/treeselect',
24
+    method: 'get'
25
+  })
26
+}
27
+
28
+// 根据角色ID查询菜单下拉树结构
29
+export function roleMenuTreeselect(roleId) {
30
+  return request({
31
+    url: '/system/menu/roleMenuTreeselect/' + roleId,
32
+    method: 'get'
33
+  })
34
+}
35
+
36
+// 新增菜单
37
+export function addMenu(data) {
38
+  return request({
39
+    url: '/system/menu',
40
+    method: 'post',
41
+    data: data
42
+  })
43
+}
44
+
45
+// 修改菜单
46
+export function updateMenu(data) {
47
+  return request({
48
+    url: '/system/menu',
49
+    method: 'put',
50
+    data: data
51
+  })
52
+}
53
+
54
+// 删除菜单
55
+export function delMenu(menuId) {
56
+  return request({
57
+    url: '/system/menu/' + menuId,
58
+    method: 'delete'
59
+  })
60
+}

+ 44 - 0
src/api/system/notice.js

@@ -0,0 +1,44 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询公告列表
4
+export function listNotice(query) {
5
+  return request({
6
+    url: '/system/notice/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询公告详细
13
+export function getNotice(noticeId) {
14
+  return request({
15
+    url: '/system/notice/' + noticeId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增公告
21
+export function addNotice(data) {
22
+  return request({
23
+    url: '/system/notice',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改公告
30
+export function updateNotice(data) {
31
+  return request({
32
+    url: '/system/notice',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 删除公告
39
+export function delNotice(noticeId) {
40
+  return request({
41
+    url: '/system/notice/' + noticeId,
42
+    method: 'delete'
43
+  })
44
+}

+ 44 - 0
src/api/system/post.js

@@ -0,0 +1,44 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询岗位列表
4
+export function listPost(query) {
5
+  return request({
6
+    url: '/system/post/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询岗位详细
13
+export function getPost(postId) {
14
+  return request({
15
+    url: '/system/post/' + postId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增岗位
21
+export function addPost(data) {
22
+  return request({
23
+    url: '/system/post',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改岗位
30
+export function updatePost(data) {
31
+  return request({
32
+    url: '/system/post',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 删除岗位
39
+export function delPost(postId) {
40
+  return request({
41
+    url: '/system/post/' + postId,
42
+    method: 'delete'
43
+  })
44
+}

+ 119 - 0
src/api/system/role.js

@@ -0,0 +1,119 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询角色列表
4
+export function listRole(query) {
5
+  return request({
6
+    url: '/system/role/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询角色详细
13
+export function getRole(roleId) {
14
+  return request({
15
+    url: '/system/role/' + roleId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增角色
21
+export function addRole(data) {
22
+  return request({
23
+    url: '/system/role',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改角色
30
+export function updateRole(data) {
31
+  return request({
32
+    url: '/system/role',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 角色数据权限
39
+export function dataScope(data) {
40
+  return request({
41
+    url: '/system/role/dataScope',
42
+    method: 'put',
43
+    data: data
44
+  })
45
+}
46
+
47
+// 角色状态修改
48
+export function changeRoleStatus(roleId, status) {
49
+  const data = {
50
+    roleId,
51
+    status
52
+  }
53
+  return request({
54
+    url: '/system/role/changeStatus',
55
+    method: 'put',
56
+    data: data
57
+  })
58
+}
59
+
60
+// 删除角色
61
+export function delRole(roleId) {
62
+  return request({
63
+    url: '/system/role/' + roleId,
64
+    method: 'delete'
65
+  })
66
+}
67
+
68
+// 查询角色已授权用户列表
69
+export function allocatedUserList(query) {
70
+  return request({
71
+    url: '/system/role/authUser/allocatedList',
72
+    method: 'get',
73
+    params: query
74
+  })
75
+}
76
+
77
+// 查询角色未授权用户列表
78
+export function unallocatedUserList(query) {
79
+  return request({
80
+    url: '/system/role/authUser/unallocatedList',
81
+    method: 'get',
82
+    params: query
83
+  })
84
+}
85
+
86
+// 取消用户授权角色
87
+export function authUserCancel(data) {
88
+  return request({
89
+    url: '/system/role/authUser/cancel',
90
+    method: 'put',
91
+    data: data
92
+  })
93
+}
94
+
95
+// 批量取消用户授权角色
96
+export function authUserCancelAll(data) {
97
+  return request({
98
+    url: '/system/role/authUser/cancelAll',
99
+    method: 'put',
100
+    params: data
101
+  })
102
+}
103
+
104
+// 授权用户选择
105
+export function authUserSelectAll(data) {
106
+  return request({
107
+    url: '/system/role/authUser/selectAll',
108
+    method: 'put',
109
+    params: data
110
+  })
111
+}
112
+
113
+// 根据角色ID查询部门树结构
114
+export function deptTreeSelect(roleId) {
115
+  return request({
116
+    url: '/system/role/deptTree/' + roleId,
117
+    method: 'get'
118
+  })
119
+}

+ 135 - 0
src/api/system/user.js

@@ -0,0 +1,135 @@
1
+import request from '@/utils/request'
2
+import { parseStrEmpty } from "@/utils/ruoyi";
3
+
4
+// 查询用户列表
5
+export function listUser(query) {
6
+  return request({
7
+    url: '/system/user/list',
8
+    method: 'get',
9
+    params: query
10
+  })
11
+}
12
+
13
+// 查询用户详细
14
+export function getUser(userId) {
15
+  return request({
16
+    url: '/system/user/' + parseStrEmpty(userId),
17
+    method: 'get'
18
+  })
19
+}
20
+
21
+// 新增用户
22
+export function addUser(data) {
23
+  return request({
24
+    url: '/system/user',
25
+    method: 'post',
26
+    data: data
27
+  })
28
+}
29
+
30
+// 修改用户
31
+export function updateUser(data) {
32
+  return request({
33
+    url: '/system/user',
34
+    method: 'put',
35
+    data: data
36
+  })
37
+}
38
+
39
+// 删除用户
40
+export function delUser(userId) {
41
+  return request({
42
+    url: '/system/user/' + userId,
43
+    method: 'delete'
44
+  })
45
+}
46
+
47
+// 用户密码重置
48
+export function resetUserPwd(userId, password) {
49
+  const data = {
50
+    userId,
51
+    password
52
+  }
53
+  return request({
54
+    url: '/system/user/resetPwd',
55
+    method: 'put',
56
+    data: data
57
+  })
58
+}
59
+
60
+// 用户状态修改
61
+export function changeUserStatus(userId, status) {
62
+  const data = {
63
+    userId,
64
+    status
65
+  }
66
+  return request({
67
+    url: '/system/user/changeStatus',
68
+    method: 'put',
69
+    data: data
70
+  })
71
+}
72
+
73
+// 查询用户个人信息
74
+export function getUserProfile() {
75
+  return request({
76
+    url: '/system/user/profile',
77
+    method: 'get'
78
+  })
79
+}
80
+
81
+// 修改用户个人信息
82
+export function updateUserProfile(data) {
83
+  return request({
84
+    url: '/system/user/profile',
85
+    method: 'put',
86
+    data: data
87
+  })
88
+}
89
+
90
+// 用户密码重置
91
+export function updateUserPwd(oldPassword, newPassword) {
92
+  const data = {
93
+    oldPassword,
94
+    newPassword
95
+  }
96
+  return request({
97
+    url: '/system/user/profile/updatePwd',
98
+    method: 'put',
99
+    params: data
100
+  })
101
+}
102
+
103
+// 用户头像上传
104
+export function uploadAvatar(data) {
105
+  return request({
106
+    url: '/system/user/profile/avatar',
107
+    method: 'post',
108
+    data: data
109
+  })
110
+}
111
+
112
+// 查询授权角色
113
+export function getAuthRole(userId) {
114
+  return request({
115
+    url: '/system/user/authRole/' + userId,
116
+    method: 'get'
117
+  })
118
+}
119
+
120
+// 保存授权角色
121
+export function updateAuthRole(data) {
122
+  return request({
123
+    url: '/system/user/authRole',
124
+    method: 'put',
125
+    params: data
126
+  })
127
+}
128
+
129
+// 查询部门下拉树结构
130
+export function deptTreeSelect() {
131
+  return request({
132
+    url: '/system/user/deptTree',
133
+    method: 'get'
134
+  })
135
+}

+ 85 - 0
src/api/tool/gen.js

@@ -0,0 +1,85 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询生成表数据
4
+export function listTable(query) {
5
+  return request({
6
+    url: '/tool/gen/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+// 查询db数据库列表
12
+export function listDbTable(query) {
13
+  return request({
14
+    url: '/tool/gen/db/list',
15
+    method: 'get',
16
+    params: query
17
+  })
18
+}
19
+
20
+// 查询表详细信息
21
+export function getGenTable(tableId) {
22
+  return request({
23
+    url: '/tool/gen/' + tableId,
24
+    method: 'get'
25
+  })
26
+}
27
+
28
+// 修改代码生成信息
29
+export function updateGenTable(data) {
30
+  return request({
31
+    url: '/tool/gen',
32
+    method: 'put',
33
+    data: data
34
+  })
35
+}
36
+
37
+// 导入表
38
+export function importTable(data) {
39
+  return request({
40
+    url: '/tool/gen/importTable',
41
+    method: 'post',
42
+    params: data
43
+  })
44
+}
45
+
46
+// 创建表
47
+export function createTable(data) {
48
+  return request({
49
+    url: '/tool/gen/createTable',
50
+    method: 'post',
51
+    params: data
52
+  })
53
+}
54
+
55
+// 预览生成代码
56
+export function previewTable(tableId) {
57
+  return request({
58
+    url: '/tool/gen/preview/' + tableId,
59
+    method: 'get'
60
+  })
61
+}
62
+
63
+// 删除表数据
64
+export function delTable(tableId) {
65
+  return request({
66
+    url: '/tool/gen/' + tableId,
67
+    method: 'delete'
68
+  })
69
+}
70
+
71
+// 生成代码(自定义路径)
72
+export function genCode(tableName) {
73
+  return request({
74
+    url: '/tool/gen/genCode/' + tableName,
75
+    method: 'get'
76
+  })
77
+}
78
+
79
+// 同步数据库
80
+export function synchDb(tableName) {
81
+  return request({
82
+    url: '/tool/gen/synchDb/' + tableName,
83
+    method: 'get'
84
+  })
85
+}

BIN
src/assets/401_images/401.gif


BIN
src/assets/404_images/404.png


BIN
src/assets/404_images/404_cloud.png


+ 9 - 0
src/assets/icons/index.js

@@ -0,0 +1,9 @@
1
+import Vue from 'vue'
2
+import SvgIcon from '@/components/SvgIcon'// svg component
3
+
4
+// register globally
5
+Vue.component('svg-icon', SvgIcon)
6
+
7
+const req = require.context('./svg', false, /\.svg$/)
8
+const requireAll = requireContext => requireContext.keys().map(requireContext)
9
+requireAll(req)

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/404.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/bug.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/build.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/button.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/cascader.svg


+ 1 - 0
src/assets/icons/svg/chart.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h36.571V128H0V54.857zM91.429 27.43H128V128H91.429V27.429zM45.714 0h36.572v128H45.714V0z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/checkbox.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/clipboard.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/code.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/color.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/component.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/dashboard.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/date-range.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/date.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/dict.svg


+ 1 - 0
src/assets/icons/svg/documentation.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M71.984 44.815H115.9L71.984 9.642v35.173zM16.094.05h63.875l47.906 38.37v76.74c0 3.392-1.682 6.645-4.677 9.044-2.995 2.399-7.056 3.746-11.292 3.746H16.094c-4.236 0-8.297-1.347-11.292-3.746-2.995-2.399-4.677-5.652-4.677-9.044V12.84C.125 5.742 7.23.05 16.094.05zm71.86 102.32V89.58h-71.86v12.79h71.86zm23.952-25.58V64H16.094v12.79h95.812z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/download.svg


+ 1 - 0
src/assets/icons/svg/drag.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M73.137 29.08h-9.209 29.7L63.886.093 34.373 29.08h20.49v27.035H27.238v17.948h27.625v27.133h18.274V74.063h27.41V56.115h-27.41V29.08zm-9.245 98.827l27.518-26.711H36.59l27.302 26.71zM.042 64.982l27.196 27.029V38.167L.042 64.982zm100.505-26.815V92.01l27.41-27.029-27.41-26.815z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/druid.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/edit.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/education.svg


+ 1 - 0
src/assets/icons/svg/email.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="96" xmlns="http://www.w3.org/2000/svg"><path d="M64.125 56.975L120.188.912A12.476 12.476 0 0 0 115.5 0h-103c-1.588 0-3.113.3-4.513.838l56.138 56.137z"/><path d="M64.125 68.287l-62.3-62.3A12.42 12.42 0 0 0 0 12.5v71C0 90.4 5.6 96 12.5 96h103c6.9 0 12.5-5.6 12.5-12.5v-71a12.47 12.47 0 0 0-1.737-6.35L64.125 68.287z"/></svg>

+ 1 - 0
src/assets/icons/svg/example.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z"/></svg>

+ 1 - 0
src/assets/icons/svg/excel.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.208 16.576v8.384h38.72v5.376h-38.72v8.704h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.512h38.72v5.376h-38.72v11.136H128v-94.72H78.208zM0 114.368L72.128 128V0L0 13.632v100.736z"/><path d="M28.672 82.56h-11.2l14.784-23.488-14.08-22.592h11.52l8.192 14.976 8.448-14.976h11.136l-14.08 22.208L58.368 82.56H46.656l-8.768-15.68z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/exit-fullscreen.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/eye-open.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/eye.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/form.svg


+ 1 - 0
src/assets/icons/svg/fullscreen.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M38.47 52L52 38.462l-23.648-23.67L43.209 0H.035L0 43.137l14.757-14.865L38.47 52zm74.773 47.726L89.526 76 76 89.536l23.648 23.672L84.795 128h43.174L128 84.863l-14.757 14.863zM89.538 52l23.668-23.648L128 43.207V.038L84.866 0 99.73 14.76 76 38.472 89.538 52zM38.46 76L14.792 99.651 0 84.794v43.173l43.137.033-14.865-14.757L52 89.53 38.46 76z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/github.svg


+ 1 - 0
src/assets/icons/svg/guide.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.482 70.131l36.204 16.18 69.932-65.485-61.38 70.594 46.435 18.735c1.119.425 2.397-.17 2.797-1.363v-.085L127.998.047 1.322 65.874c-1.12.597-1.519 1.959-1.04 3.151.32.511.72.937 1.2 1.107zm44.676 57.821L64.22 107.26l-18.062-7.834v28.527z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/icon.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/input.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/international.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/job.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/language.svg


+ 1 - 0
src/assets/icons/svg/link.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z"/><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z"/><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/list.svg


+ 1 - 0
src/assets/icons/svg/lock.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M119.88 49.674h-7.987V39.52C111.893 17.738 90.45.08 63.996.08 37.543.08 16.1 17.738 16.1 39.52v10.154H8.113c-4.408 0-7.987 2.94-7.987 6.577v65.13c0 3.637 3.57 6.577 7.987 6.577H119.88c4.407 0 7.987-2.94 7.987-6.577v-65.13c-.008-3.636-3.58-6.577-7.987-6.577zm-23.953 0H32.065V39.52c0-14.524 14.301-26.295 31.931-26.295 17.63 0 31.932 11.777 31.932 26.295v10.153z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/log.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/logininfor.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/message.svg


+ 1 - 0
src/assets/icons/svg/money.svg

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.122 127.892v-28.68H7.513V87.274h46.609v-12.4H7.513v-12.86h38.003L.099 0h22.6l32.556 45.07c3.617 5.144 6.44 9.611 8.487 13.385 1.788-3.05 4.89-7.779 9.301-14.186L103.93 0h24.01L82.385 62.013h38.34v12.862h-46.41v12.4h46.41v11.937h-46.41v28.68H54.123z"/></svg>

Різницю між файлами не показано, бо вона завелика
+ 2 - 0
src/assets/icons/svg/monitor.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/nested.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/number.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/online.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/password.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/pdf.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/people.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/peoples.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/phone.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/post.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/qq.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/question.svg


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/icons/svg/radio.svg


+ 0 - 0
src/assets/icons/svg/rate.svg


Деякі файли не було показано, через те що забагато файлів було змінено