fz преди 2 години
родител
ревизия
49d8023be1
променени са 100 файла, в които са добавени 12890 реда и са изтрити 10273 реда
  1. 0
    12
      .babelrc
  2. 13
    0
      .editorconfig
  3. 11
    0
      .env.development
  4. 8
    0
      .env.production
  5. 10
    0
      .env.staging
  6. 10
    0
      .eslintignore
  7. 199
    0
      .eslintrc.js
  8. 10
    1
      .gitignore
  9. 0
    10
      .postcssrc.js
  10. 0
    21
      LICENSE
  11. 18
    197
      README.md
  12. 13
    0
      babel.config.js
  13. 12
    0
      bin/build.bat
  14. 12
    0
      bin/package.bat
  15. 12
    0
      bin/run-web.bat
  16. 0
    41
      build/build.js
  17. 0
    54
      build/check-versions.js
  18. 35
    0
      build/index.js
  19. 0
    102
      build/utils.js
  20. 0
    22
      build/vue-loader.conf.js
  21. 0
    82
      build/webpack.base.conf.js
  22. 0
    91
      build/webpack.dev.conf.js
  23. 0
    145
      build/webpack.prod.conf.js
  24. 0
    7
      config/dev.env.js
  25. 0
    77
      config/index.js
  26. 0
    4
      config/prod.env.js
  27. 0
    48
      eslintrc.js
  28. BIN
      favicon.ico
  29. 0
    17
      index.html
  30. 11149
    8688
      package-lock.json
  31. 76
    54
      package.json
  32. 0
    1
      project/index.html
  33. 0
    2
      project/static/css/app.f7de60d9ec9c07c112d0b94c59208a0e.css
  34. 0
    1
      project/static/css/app.f7de60d9ec9c07c112d0b94c59208a0e.css.map
  35. BIN
      project/static/fonts/element-icons.6f0a763.ttf
  36. BIN
      project/static/fonts/iconfont.4f4ba31.eot
  37. BIN
      project/static/fonts/iconfont.9a8d1b2.ttf
  38. BIN
      project/static/gif.gif
  39. 0
    96
      project/static/img/iconfont.df0dca9.svg
  40. 0
    2
      project/static/js/app.656e0752769862c0c376.js
  41. 0
    1
      project/static/js/app.656e0752769862c0c376.js.map
  42. 0
    2
      project/static/js/manifest.3ad1d5771e9b13dbdad2.js
  43. 0
    1
      project/static/js/manifest.3ad1d5771e9b13dbdad2.js.map
  44. 0
    58
      project/static/js/vendor.e37fbe972401a2962be8.js
  45. 0
    1
      project/static/js/vendor.e37fbe972401a2962be8.js.map
  46. BIN
      project/static/交易订单.png
  47. BIN
      project/static/商品管理.png
  48. BIN
      project/static/展开与压缩.png
  49. BIN
      project/static/支付配置.png
  50. BIN
      project/static/用户管理.png
  51. BIN
      project/static/登录.png
  52. BIN
      project/static/编辑.png
  53. BIN
      project/static/角色管理.png
  54. BIN
      public/favicon.ico
  55. 46
    0
      public/html/ie.html
  56. 208
    0
      public/index.html
  57. 2
    0
      public/robots.txt
  58. 17
    19
      src/App.vue
  59. 0
    58
      src/api/axiosFun.js
  60. 0
    32
      src/api/basisMG.js
  61. 59
    0
      src/api/login.js
  62. 9
    0
      src/api/menu.js
  63. 57
    0
      src/api/monitor/cache.js
  64. 71
    0
      src/api/monitor/job.js
  65. 26
    0
      src/api/monitor/jobLog.js
  66. 34
    0
      src/api/monitor/logininfor.js
  67. 18
    0
      src/api/monitor/online.js
  68. 26
    0
      src/api/monitor/operlog.js
  69. 9
    0
      src/api/monitor/server.js
  70. 0
    32
      src/api/payMG.js
  71. 60
    0
      src/api/system/config.js
  72. 52
    0
      src/api/system/dept.js
  73. 52
    0
      src/api/system/dict/data.js
  74. 60
    0
      src/api/system/dict/type.js
  75. 60
    0
      src/api/system/menu.js
  76. 44
    0
      src/api/system/notice.js
  77. 44
    0
      src/api/system/post.js
  78. 119
    0
      src/api/system/role.js
  79. 135
    0
      src/api/system/user.js
  80. 76
    0
      src/api/tool/gen.js
  81. 0
    97
      src/api/userMG.js
  82. BIN
      src/assets/401_images/401.gif
  83. BIN
      src/assets/404_images/404.png
  84. BIN
      src/assets/404_images/404_cloud.png
  85. 0
    101
      src/assets/icon/iconfont.css
  86. BIN
      src/assets/icon/iconfont.eot
  87. 0
    96
      src/assets/icon/iconfont.svg
  88. BIN
      src/assets/icon/iconfont.ttf
  89. BIN
      src/assets/icon/iconfont.woff
  90. 9
    0
      src/assets/icons/index.js
  91. 1
    0
      src/assets/icons/svg/404.svg
  92. 1
    0
      src/assets/icons/svg/bug.svg
  93. 1
    0
      src/assets/icons/svg/build.svg
  94. 1
    0
      src/assets/icons/svg/button.svg
  95. 1
    0
      src/assets/icons/svg/cascader.svg
  96. 1
    0
      src/assets/icons/svg/chart.svg
  97. 1
    0
      src/assets/icons/svg/checkbox.svg
  98. 1
    0
      src/assets/icons/svg/clipboard.svg
  99. 1
    0
      src/assets/icons/svg/code.svg
  100. 0
    0
      src/assets/icons/svg/color.svg

+ 0
- 12
.babelrc Целия файл

@@ -1,12 +0,0 @@
1
-{
2
-  "presets": [
3
-    ["env", {
4
-      "modules": false,
5
-      "targets": {
6
-        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7
-      }
8
-    }],
9
-    "stage-2"
10
-  ],
11
-  "plugins": ["transform-vue-jsx", "transform-runtime"]
12
-}

+ 13
- 0
.editorconfig Целия файл

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

+ 10
- 1
.gitignore Целия файл

@@ -1,9 +1,14 @@
1 1
 .DS_Store
2 2
 node_modules/
3
-/dist/
3
+dist/
4 4
 npm-debug.log*
5 5
 yarn-debug.log*
6 6
 yarn-error.log*
7
+**/*.log
8
+
9
+tests/**/coverage/
10
+tests/e2e/reports
11
+selenium-debug.log
7 12
 
8 13
 # Editor directories and files
9 14
 .idea
@@ -12,3 +17,7 @@ yarn-error.log*
12 17
 *.ntvs*
13 18
 *.njsproj
14 19
 *.sln
20
+*.local
21
+
22
+package-lock.json
23
+yarn.lock

+ 0
- 10
.postcssrc.js Целия файл

@@ -1,10 +0,0 @@
1
-// https://github.com/michael-ciniawsky/postcss-load-config
2
-
3
-module.exports = {
4
-  "plugins": {
5
-    "postcss-import": {},
6
-    "postcss-url": {},
7
-    // to edit target browsers: use "browserslist" field in package.json
8
-    "autoprefixer": {}
9
-  }
10
-}

+ 0
- 21
LICENSE Целия файл

@@ -1,21 +0,0 @@
1
-MIT License
2
-
3
-Copyright (c) 2018 lidonghui
4
-
5
-Permission is hereby granted, free of charge, to any person obtaining a copy
6
-of this software and associated documentation files (the "Software"), to deal
7
-in the Software without restriction, including without limitation the rights
8
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
-copies of the Software, and to permit persons to whom the Software is
10
-furnished to do so, subject to the following conditions:
11
-
12
-The above copyright notice and this permission notice shall be included in all
13
-copies or substantial portions of the Software.
14
-
15
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
-SOFTWARE.

+ 18
- 197
README.md Целия файл

@@ -1,209 +1,30 @@
1
-# vue搭建后台管理界面模版(PC端)
2
-------------------------
3
-
4
-<img src="./static/gif.gif" width="100%" height="519px"/>  
5
-
6
-
7
-#### 技术栈
8
-vue2 + vuex + vue-router + webpack + ES6/7 + axios + elementUI + 阿里图标iconfont
9
-
10
-#### 项目预览
11
-[http://nmgwap.gitee.io/vueproject/#/login](http://nmgwap.gitee.io/vueproject/#/login)
12
-
13
-
14
-#### 说明
15
-
16
->  本项目主要用于熟悉如何用 vue2 架构一个后端管理平台项目
17
-
18
->  为了方便后期修改使用,模拟数据在页面中,具体修改看下面【强调】
19
-
20
->  如果对您有帮助,您可以点右上角 "Star" 支持一下 谢谢! ^_^
21
-
22
->  或者您可以 "follow" 一下,我会不断开源更多的有趣的项目
23
-
24
->  开发环境 w7  Chrome 61
25
-
26
->  如有问题请直接在 Issues 中提,或者您发现问题并有非常好的解决方案,欢迎 PR 👍
27
-
28
-
29
-#### 目录结构
30
-------------------------
1
+## 开发
31 2
 
32 3
 ```bash
33
-├── /build/          # 项目构建(webpack)相关配置
34
-├── /config/         # 项目开发环境配置
35
-├── /src/            # 源码目录
36
-│ ├── /api/          # 请求
37
-│ ├── /assets/       # 组件静态资源(图片)
38
-│ ├── /components/   # 公共组件
39
-| ├── /api/          # 请求接口
40
-│ ├── /router/       # 路由配置
41
-│ ├── /vuex/         # vuex状态管理
42
-│ ├── /views/        # 路由组件(页面维度)
43
-│ ├── /config/       # 接口配置文件(请求地址)
44
-│ ├── App.vue        # 组件入口
45
-│ └── main.js        # 程序入口
46
-├── /static/         # 非组件静态资源
47
-├── .babelrc         # ES6语法编译配置
48
-├── .editorconfig    # 定义代码格式
49
-├── .eslintignore    # ES6规范忽略文件
50
-├── .eslintrc.js     # ES6语法规范配置
51
-├── .gitignore       # git忽略文件
52
-├── index.html       # 页面入口
53
-├── package.json     # 项目依赖
54
-└── README.md        # 项目文档
55
-```
56
-
57
-#### 强调
58
-
59
-项目请求已经改为假数据,例如:
60
-``` bash
61
-// 模拟数据开始
62
-      let res = {
63
-        code: 0,
64
-        msg: null,
65
-        count: 12,
66
-        data: [
67
-          {
68
-            addUser: '1',
69
-            editUser: '1',
70
-            addTime: null,
71
-            editTime: 1527411068000,
72
-            userId: 1,
73
-            systemNo: 'pmd',
74
-            userName: 'root',
75
-            userPassword: 'e10adc3949ba59abbe56e057f20f883e',
76
-            userRealName: '超级管理员',
77
-            userSex: '女',
78
-            userMobile: '138123456789',
79
-            userEmail: '111@qq.com',
80
-            isLock: 'N',
81
-            deptId: 1,
82
-            deptName: 'xxxx',
83
-            roleId: 1
84
-          }
85
-        ]
86
-      }
87
-      this.loading = false
88
-      this.userData = res.data
89
-      // 分页赋值
90
-      this.pageparm.currentPage = this.formInline.page
91
-      this.pageparm.pageSize = this.formInline.limit
92
-      this.pageparm.total = res.count
93
-      // 模拟数据结束
94
-
95
-      /***
96
-       * 调用接口,注释上面模拟数据 取消下面注释
97
-       */
98
-      // 获取用户列表
99
-      // userList(parameter).then(res => {
100
-      //   this.loading = false
101
-      //   if (res.success == false) {
102
-      //     this.$message({
103
-      //       type: 'info',
104
-      //       message: res.msg
105
-      //     })
106
-      //   } else {
107
-      //     this.userData = res.data
108
-      //     // 分页赋值
109
-      //     this.pageparm.currentPage = this.formInline.page
110
-      //     this.pageparm.pageSize = this.formInline.limit
111
-      //     this.pageparm.total = res.count
112
-      //   }
113
-      // })
114
-```
115
-把模拟数据开始到结束注释掉,下面解除注释即可,
116
-接口地址需要修改config/index.js文件 dev
117
-``` bash
118
-proxyTable: {
119
-    '/api': {
120
-        target: 'http://xxx.xxx.xxx.xxx:xxx', // 你请求的第三方接口
121
-        changeOrigin: true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
122
-        pathRewrite: { // 路径重写,
123
-            '^/api': '/api' // 替换target中的请求地址,也就是说以后你在请求http://api.jisuapi.com/XXXXX这个地址的时候直接写成/api即可。
124
-        }
125
-    }
126
-},
127
-
128
-```
129
-#### 完成功能
130
-- [x] 登录 -- 完成
131
-- [x] 路由拦截 -- 完成
132
-- [x] 商品管理(增加、编辑、搜索、删除) -- 完成
133
-- [x] 角色管理(增加、编辑、搜索、删除、权限管理) -- 完成
134
-- [x] 交易订单(增加、编辑、搜索、删除) -- 完成
135
-- [x] 用户管理(增加、编辑、搜索、删除、数据权限、刷新缓存) -- 完成
136
-- [x] 支付配置(增加、编辑、搜索、删除) -- 完成
137
-- [x] 系统环境变量(增加、编辑、搜索、删除) -- 完成
138
-- [x] 权限管理(增加、编辑、搜索、删除、配置权限) -- 完成
139
-- [x] 菜单管理(增加、编辑、搜索、删除) -- 完成
140
-- [x] 公司管理(增加、编辑、搜索、删除) -- 完成
141
-
4
+# 克隆项目
5
+git clone https://gitee.com/y_project/RuoYi-Vue
142 6
 
143
-#### 部分截图
144
-------------------------
7
+# 进入项目目录
8
+cd ruoyi-ui
145 9
 
146
-商品管理
147
-![商品管理](./static/商品管理.png "商品管理")
148
-
149
-角色管理
150
-![角色管理](./static/角色管理.png "角色管理")
151
-
152
-交易订单
153
-![交易订单](./static/交易订单.png "交易订单")
154
-
155
-编辑
156
-![编辑](./static/编辑.png "编辑")
157
-
158
-用户管理
159
-![用户管理](./static/用户管理.png "用户管理")
160
-
161
-支付配置
162
-![支付配置](./static/支付配置.png "支付配置")
163
-
164
-展开与压缩
165
-![展开与压缩](./static/展开与压缩.png "展开与压缩")
166
-
167
-
168
-#### 运行项目
169
-------------------------
170
-
171
-``` bash
172
-# install dependencies
10
+# 安装依赖
173 11
 npm install
174 12
 
175
-# serve with hot reload at localhost:8080
176
-npm run dev
177
-
178
-# build for production with minification
179
-npm run build
180
-
181
-# build for production and view the bundle analyzer report
182
-npm run build --report
183
-
184
-# run unit tests
185
-npm run unit
186
-
187
-# run e2e tests
188
-npm run e2e
189
-
190
-# run all tests
191
-npm test
192
-
13
+# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
14
+npm install --registry=https://registry.npmmirror.com
193 15
 
16
+# 启动服务
17
+npm run dev
194 18
 ```
195 19
 
196
-#### 项目源码地址:
197
-------------------------
198
-
199
-码云地址:https://gitee.com/ldhblog/vue-element.git  
200
-github地址:https://github.com/nmgwap/vue-ManagementPlatform.git  
201
-
202
-
203
-#### 微信公众号
204
-------------------------  
205
-
206
-<img src="/static/wx.jpg"  width = "270" height = "270"/>
20
+浏览器访问 http://localhost:80
207 21
 
22
+## 发布
208 23
 
24
+```bash
25
+# 构建测试环境
26
+npm run build:stage
209 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

+ 0
- 41
build/build.js Целия файл

@@ -1,41 +0,0 @@
1
-'use strict'
2
-require('./check-versions')()
3
-
4
-process.env.NODE_ENV = 'production'
5
-
6
-const ora = require('ora')
7
-const rm = require('rimraf')
8
-const path = require('path')
9
-const chalk = require('chalk')
10
-const webpack = require('webpack')
11
-const config = require('../config')
12
-const webpackConfig = require('./webpack.prod.conf')
13
-
14
-const spinner = ora('building for production...')
15
-spinner.start()
16
-
17
-rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18
-  if (err) throw err
19
-  webpack(webpackConfig, (err, stats) => {
20
-    spinner.stop()
21
-    if (err) throw err
22
-    process.stdout.write(stats.toString({
23
-      colors: true,
24
-      modules: false,
25
-      children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26
-      chunks: false,
27
-      chunkModules: false
28
-    }) + '\n\n')
29
-
30
-    if (stats.hasErrors()) {
31
-      console.log(chalk.red('  Build failed with errors.\n'))
32
-      process.exit(1)
33
-    }
34
-
35
-    console.log(chalk.cyan('  Build complete.\n'))
36
-    console.log(chalk.yellow(
37
-      '  Tip: built files are meant to be served over an HTTP server.\n' +
38
-      '  Opening index.html over file:// won\'t work.\n'
39
-    ))
40
-  })
41
-})

+ 0
- 54
build/check-versions.js Целия файл

@@ -1,54 +0,0 @@
1
-'use strict'
2
-const chalk = require('chalk')
3
-const semver = require('semver')
4
-const packageConfig = require('../package.json')
5
-const shell = require('shelljs')
6
-
7
-function exec (cmd) {
8
-  return require('child_process').execSync(cmd).toString().trim()
9
-}
10
-
11
-const versionRequirements = [
12
-  {
13
-    name: 'node',
14
-    currentVersion: semver.clean(process.version),
15
-    versionRequirement: packageConfig.engines.node
16
-  }
17
-]
18
-
19
-if (shell.which('npm')) {
20
-  versionRequirements.push({
21
-    name: 'npm',
22
-    currentVersion: exec('npm --version'),
23
-    versionRequirement: packageConfig.engines.npm
24
-  })
25
-}
26
-
27
-module.exports = function () {
28
-  const warnings = []
29
-
30
-  for (let i = 0; i < versionRequirements.length; i++) {
31
-    const mod = versionRequirements[i]
32
-
33
-    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34
-      warnings.push(mod.name + ': ' +
35
-        chalk.red(mod.currentVersion) + ' should be ' +
36
-        chalk.green(mod.versionRequirement)
37
-      )
38
-    }
39
-  }
40
-
41
-  if (warnings.length) {
42
-    console.log('')
43
-    console.log(chalk.yellow('To use this template, you must update following to modules:'))
44
-    console.log()
45
-
46
-    for (let i = 0; i < warnings.length; i++) {
47
-      const warning = warnings[i]
48
-      console.log('  ' + warning)
49
-    }
50
-
51
-    console.log()
52
-    process.exit(1)
53
-  }
54
-}

+ 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
+}

+ 0
- 102
build/utils.js Целия файл

@@ -1,102 +0,0 @@
1
-'use strict'
2
-const path = require('path')
3
-const config = require('../config')
4
-const ExtractTextPlugin = require('extract-text-webpack-plugin')
5
-const packageConfig = require('../package.json')
6
-
7
-exports.assetsPath = function(_path) {
8
-    const assetsSubDirectory = process.env.NODE_ENV === 'production' ?
9
-        config.build.assetsSubDirectory :
10
-        config.dev.assetsSubDirectory
11
-
12
-    return path.posix.join(assetsSubDirectory, _path)
13
-}
14
-
15
-exports.cssLoaders = function(options) {
16
-    options = options || {}
17
-
18
-    const cssLoader = {
19
-        loader: 'css-loader',
20
-        options: {
21
-            sourceMap: options.sourceMap
22
-        }
23
-    }
24
-
25
-    const postcssLoader = {
26
-        loader: 'postcss-loader',
27
-        options: {
28
-            sourceMap: options.sourceMap
29
-        }
30
-    }
31
-
32
-    // generate loader string to be used with extract text plugin
33
-    function generateLoaders(loader, loaderOptions) {
34
-        const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35
-
36
-        if (loader) {
37
-            loaders.push({
38
-                loader: loader + '-loader',
39
-                options: Object.assign({}, loaderOptions, {
40
-                    sourceMap: options.sourceMap
41
-                })
42
-            })
43
-        }
44
-
45
-        // Extract CSS when that option is specified
46
-        // (which is the case during production build)
47
-        if (options.extract) {
48
-            return ExtractTextPlugin.extract({
49
-                use: loaders,
50
-                publicPath: '../../',
51
-                fallback: 'vue-style-loader'
52
-            })
53
-        } else {
54
-            return ['vue-style-loader'].concat(loaders)
55
-        }
56
-    }
57
-
58
-    // https://vue-loader.vuejs.org/en/configurations/extract-css.html
59
-    return {
60
-        css: generateLoaders(),
61
-        postcss: generateLoaders(),
62
-        less: generateLoaders('less'),
63
-        sass: generateLoaders('sass', { indentedSyntax: true }),
64
-        scss: generateLoaders('sass'),
65
-        stylus: generateLoaders('stylus'),
66
-        styl: generateLoaders('stylus')
67
-    }
68
-}
69
-
70
-// Generate loaders for standalone style files (outside of .vue)
71
-exports.styleLoaders = function(options) {
72
-    const output = []
73
-    const loaders = exports.cssLoaders(options)
74
-
75
-    for (const extension in loaders) {
76
-        const loader = loaders[extension]
77
-        output.push({
78
-            test: new RegExp('\\.' + extension + '$'),
79
-            use: loader
80
-        })
81
-    }
82
-
83
-    return output
84
-}
85
-
86
-exports.createNotifierCallback = () => {
87
-    const notifier = require('node-notifier')
88
-
89
-    return (severity, errors) => {
90
-        if (severity !== 'error') return
91
-
92
-        const error = errors[0]
93
-        const filename = error.file && error.file.split('!').pop()
94
-
95
-        notifier.notify({
96
-            title: packageConfig.name,
97
-            message: severity + ': ' + error.name,
98
-            subtitle: filename || '',
99
-            icon: path.join(__dirname, 'logo.png')
100
-        })
101
-    }
102
-}

+ 0
- 22
build/vue-loader.conf.js Целия файл

@@ -1,22 +0,0 @@
1
-'use strict'
2
-const utils = require('./utils')
3
-const config = require('../config')
4
-const isProduction = process.env.NODE_ENV === 'production'
5
-const sourceMapEnabled = isProduction
6
-  ? config.build.productionSourceMap
7
-  : config.dev.cssSourceMap
8
-
9
-module.exports = {
10
-  loaders: utils.cssLoaders({
11
-    sourceMap: sourceMapEnabled,
12
-    extract: isProduction
13
-  }),
14
-  cssSourceMap: sourceMapEnabled,
15
-  cacheBusting: config.dev.cacheBusting,
16
-  transformToRequire: {
17
-    video: ['src', 'poster'],
18
-    source: 'src',
19
-    img: 'src',
20
-    image: 'xlink:href'
21
-  }
22
-}

+ 0
- 82
build/webpack.base.conf.js Целия файл

@@ -1,82 +0,0 @@
1
-'use strict'
2
-const path = require('path')
3
-const utils = require('./utils')
4
-const config = require('../config')
5
-const vueLoaderConfig = require('./vue-loader.conf')
6
-
7
-function resolve (dir) {
8
-  return path.join(__dirname, '..', dir)
9
-}
10
-
11
-
12
-
13
-module.exports = {
14
-  context: path.resolve(__dirname, '../'),
15
-  entry: {
16
-    app: './src/main.js'
17
-  },
18
-  output: {
19
-    path: config.build.assetsRoot,
20
-    filename: '[name].js',
21
-    publicPath: process.env.NODE_ENV === 'production'
22
-      ? config.build.assetsPublicPath
23
-      : config.dev.assetsPublicPath
24
-  },
25
-  resolve: {
26
-    extensions: ['.js', '.vue', '.json'],
27
-    alias: {
28
-      'vue$': 'vue/dist/vue.esm.js',
29
-      '@': resolve('src'),
30
-    }
31
-  },
32
-  module: {
33
-    rules: [
34
-      {
35
-        test: /\.vue$/,
36
-        loader: 'vue-loader',
37
-        options: vueLoaderConfig
38
-      },
39
-      {
40
-        test: /\.js$/,
41
-        loader: 'babel-loader',
42
-        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
43
-      },
44
-      {
45
-        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
46
-        loader: 'url-loader',
47
-        options: {
48
-          limit: 10000,
49
-          name: utils.assetsPath('img/[name].[hash:7].[ext]')
50
-        }
51
-      },
52
-      {
53
-        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
54
-        loader: 'url-loader',
55
-        options: {
56
-          limit: 10000,
57
-          name: utils.assetsPath('media/[name].[hash:7].[ext]')
58
-        }
59
-      },
60
-      {
61
-        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
62
-        loader: 'url-loader',
63
-        options: {
64
-          limit: 10000,
65
-          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
66
-        }
67
-      }
68
-    ]
69
-  },
70
-  node: {
71
-    // prevent webpack from injecting useless setImmediate polyfill because Vue
72
-    // source contains it (although only uses it if it's native).
73
-    setImmediate: false,
74
-    // prevent webpack from injecting mocks to Node native modules
75
-    // that does not make sense for the client
76
-    dgram: 'empty',
77
-    fs: 'empty',
78
-    net: 'empty',
79
-    tls: 'empty',
80
-    child_process: 'empty'
81
-  }
82
-}

+ 0
- 91
build/webpack.dev.conf.js Целия файл

@@ -1,91 +0,0 @@
1
-'use strict'
2
-const utils = require('./utils')
3
-const webpack = require('webpack')
4
-const config = require('../config')
5
-const merge = require('webpack-merge')
6
-const path = require('path')
7
-const baseWebpackConfig = require('./webpack.base.conf')
8
-const CopyWebpackPlugin = require('copy-webpack-plugin')
9
-const HtmlWebpackPlugin = require('html-webpack-plugin')
10
-const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
11
-const portfinder = require('portfinder')
12
-
13
-const HOST = process.env.HOST
14
-const PORT = process.env.PORT && Number(process.env.PORT)
15
-
16
-const devWebpackConfig = merge(baseWebpackConfig, {
17
-    module: {
18
-        rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
19
-    },
20
-    // cheap-module-eval-source-map is faster for development
21
-    devtool: config.dev.devtool,
22
-
23
-    // these devServer options should be customized in /config/index.js
24
-    devServer: {
25
-        clientLogLevel: 'warning',
26
-        historyApiFallback: {
27
-            rewrites: [
28
-                { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
29
-            ],
30
-        },
31
-        hot: true,
32
-        contentBase: false, // since we use CopyWebpackPlugin.
33
-        compress: true,
34
-        host: HOST || config.dev.host,
35
-        port: PORT || config.dev.port,
36
-        open: config.dev.autoOpenBrowser,
37
-        overlay: config.dev.errorOverlay ? { warnings: false, errors: true } : false,
38
-        publicPath: config.dev.assetsPublicPath,
39
-        proxy: config.dev.proxyTable,
40
-        quiet: true, // necessary for FriendlyErrorsPlugin
41
-        watchOptions: {
42
-            poll: config.dev.poll,
43
-        }
44
-    },
45
-    plugins: [
46
-        new webpack.DefinePlugin({
47
-            'process.env': require('../config/dev.env')
48
-        }),
49
-        new webpack.HotModuleReplacementPlugin(),
50
-        new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
51
-        new webpack.NoEmitOnErrorsPlugin(),
52
-        // https://github.com/ampedandwired/html-webpack-plugin
53
-        new HtmlWebpackPlugin({
54
-            filename: 'index.html',
55
-            template: 'index.html',
56
-            inject: true,
57
-            favicon: './favicon.ico'
58
-        }),
59
-        // copy custom static assets
60
-        new CopyWebpackPlugin([{
61
-            from: path.resolve(__dirname, '../static'),
62
-            to: config.dev.assetsSubDirectory,
63
-            ignore: ['.*']
64
-        }])
65
-    ]
66
-})
67
-
68
-module.exports = new Promise((resolve, reject) => {
69
-    portfinder.basePort = process.env.PORT || config.dev.port
70
-    portfinder.getPort((err, port) => {
71
-        if (err) {
72
-            reject(err)
73
-        } else {
74
-            // publish the new Port, necessary for e2e tests
75
-            process.env.PORT = port
76
-                // add port to devServer config
77
-            devWebpackConfig.devServer.port = port
78
-
79
-            // Add FriendlyErrorsPlugin
80
-            devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
81
-                compilationSuccessInfo: {
82
-                    messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
83
-                },
84
-                onErrors: config.dev.notifyOnErrors ?
85
-                    utils.createNotifierCallback() : undefined
86
-            }))
87
-
88
-            resolve(devWebpackConfig)
89
-        }
90
-    })
91
-})

+ 0
- 145
build/webpack.prod.conf.js Целия файл

@@ -1,145 +0,0 @@
1
-'use strict'
2
-const path = require('path')
3
-const utils = require('./utils')
4
-const webpack = require('webpack')
5
-const config = require('../config')
6
-const merge = require('webpack-merge')
7
-const baseWebpackConfig = require('./webpack.base.conf')
8
-const CopyWebpackPlugin = require('copy-webpack-plugin')
9
-const HtmlWebpackPlugin = require('html-webpack-plugin')
10
-const ExtractTextPlugin = require('extract-text-webpack-plugin')
11
-const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
12
-const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
13
-
14
-const env = require('../config/prod.env')
15
-
16
-const webpackConfig = merge(baseWebpackConfig, {
17
-  module: {
18
-    rules: utils.styleLoaders({
19
-      sourceMap: config.build.productionSourceMap,
20
-      extract: true,
21
-      usePostCSS: true
22
-    })
23
-  },
24
-  devtool: config.build.productionSourceMap ? config.build.devtool : false,
25
-  output: {
26
-    path: config.build.assetsRoot,
27
-    filename: utils.assetsPath('js/[name].[chunkhash].js'),
28
-    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
29
-  },
30
-  plugins: [
31
-    // http://vuejs.github.io/vue-loader/en/workflow/production.html
32
-    new webpack.DefinePlugin({
33
-      'process.env': env
34
-    }),
35
-    new UglifyJsPlugin({
36
-      uglifyOptions: {
37
-        compress: {
38
-          warnings: false
39
-        }
40
-      },
41
-      sourceMap: config.build.productionSourceMap,
42
-      parallel: true
43
-    }),
44
-    // extract css into its own file
45
-    new ExtractTextPlugin({
46
-      filename: utils.assetsPath('css/[name].[contenthash].css'),
47
-      // Setting the following option to `false` will not extract CSS from codesplit chunks.
48
-      // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
49
-      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 
50
-      // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
51
-      allChunks: true,
52
-    }),
53
-    // Compress extracted CSS. We are using this plugin so that possible
54
-    // duplicated CSS from different components can be deduped.
55
-    new OptimizeCSSPlugin({
56
-      cssProcessorOptions: config.build.productionSourceMap
57
-        ? { safe: true, map: { inline: false } }
58
-        : { safe: true }
59
-    }),
60
-    // generate dist index.html with correct asset hash for caching.
61
-    // you can customize output by editing /index.html
62
-    // see https://github.com/ampedandwired/html-webpack-plugin
63
-    new HtmlWebpackPlugin({
64
-      filename: config.build.index,
65
-      template: 'index.html',
66
-      inject: true,
67
-      minify: {
68
-        removeComments: true,
69
-        collapseWhitespace: true,
70
-        removeAttributeQuotes: true
71
-        // more options:
72
-        // https://github.com/kangax/html-minifier#options-quick-reference
73
-      },
74
-      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
75
-      chunksSortMode: 'dependency'
76
-    }),
77
-    // keep module.id stable when vendor modules does not change
78
-    new webpack.HashedModuleIdsPlugin(),
79
-    // enable scope hoisting
80
-    new webpack.optimize.ModuleConcatenationPlugin(),
81
-    // split vendor js into its own file
82
-    new webpack.optimize.CommonsChunkPlugin({
83
-      name: 'vendor',
84
-      minChunks (module) {
85
-        // any required modules inside node_modules are extracted to vendor
86
-        return (
87
-          module.resource &&
88
-          /\.js$/.test(module.resource) &&
89
-          module.resource.indexOf(
90
-            path.join(__dirname, '../node_modules')
91
-          ) === 0
92
-        )
93
-      }
94
-    }),
95
-    // extract webpack runtime and module manifest to its own file in order to
96
-    // prevent vendor hash from being updated whenever app bundle is updated
97
-    new webpack.optimize.CommonsChunkPlugin({
98
-      name: 'manifest',
99
-      minChunks: Infinity
100
-    }),
101
-    // This instance extracts shared chunks from code splitted chunks and bundles them
102
-    // in a separate chunk, similar to the vendor chunk
103
-    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
104
-    new webpack.optimize.CommonsChunkPlugin({
105
-      name: 'app',
106
-      async: 'vendor-async',
107
-      children: true,
108
-      minChunks: 3
109
-    }),
110
-
111
-    // copy custom static assets
112
-    new CopyWebpackPlugin([
113
-      {
114
-        from: path.resolve(__dirname, '../static'),
115
-        to: config.build.assetsSubDirectory,
116
-        ignore: ['.*']
117
-      }
118
-    ])
119
-  ]
120
-})
121
-
122
-if (config.build.productionGzip) {
123
-  const CompressionWebpackPlugin = require('compression-webpack-plugin')
124
-
125
-  webpackConfig.plugins.push(
126
-    new CompressionWebpackPlugin({
127
-      asset: '[path].gz[query]',
128
-      algorithm: 'gzip',
129
-      test: new RegExp(
130
-        '\\.(' +
131
-        config.build.productionGzipExtensions.join('|') +
132
-        ')$'
133
-      ),
134
-      threshold: 10240,
135
-      minRatio: 0.8
136
-    })
137
-  )
138
-}
139
-
140
-if (config.build.bundleAnalyzerReport) {
141
-  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
142
-  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
143
-}
144
-
145
-module.exports = webpackConfig

+ 0
- 7
config/dev.env.js Целия файл

@@ -1,7 +0,0 @@
1
-'use strict'
2
-const merge = require('webpack-merge')
3
-const prodEnv = require('./prod.env')
4
-
5
-module.exports = merge(prodEnv, {
6
-  NODE_ENV: '"development"'
7
-})

+ 0
- 77
config/index.js Целия файл

@@ -1,77 +0,0 @@
1
-'use strict'
2
-// Template version: 1.3.1
3
-// see http://vuejs-templates.github.io/webpack for documentation.
4
-
5
-const path = require('path')
6
-
7
-module.exports = {
8
-    dev: {
9
-
10
-        // Paths
11
-        assetsSubDirectory: 'static',
12
-        assetsPublicPath: '/',
13
-        proxyTable: {
14
-            '/api': {
15
-                target: 'http://xxx.xxx.xxx.xxx:xxx', // 你请求的第三方接口
16
-                changeOrigin: true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
17
-                pathRewrite: { // 路径重写,
18
-                    '^/api': '/api' // 替换target中的请求地址,也就是说以后你在请求http://api.jisuapi.com/XXXXX这个地址的时候直接写成/api即可。
19
-                }
20
-            }
21
-        },
22
-
23
-        // Various Dev Server settings
24
-        host: 'localhost', // can be overwritten by process.env.HOST
25
-        port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
26
-        autoOpenBrowser: true,
27
-        errorOverlay: true,
28
-        notifyOnErrors: true,
29
-        poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
30
-
31
-
32
-        /**
33
-         * Source Maps
34
-         */
35
-
36
-        // https://webpack.js.org/configuration/devtool/#development
37
-        devtool: 'cheap-module-eval-source-map',
38
-
39
-        // If you have problems debugging vue-files in devtools,
40
-        // set this to false - it *may* help
41
-        // https://vue-loader.vuejs.org/en/options.html#cachebusting
42
-        cacheBusting: true,
43
-
44
-        cssSourceMap: true
45
-    },
46
-
47
-    build: {
48
-        // Template for index.html
49
-        index: path.resolve(__dirname, '../dist/index.html'),
50
-
51
-        // Paths
52
-        assetsRoot: path.resolve(__dirname, '../dist'),
53
-        assetsSubDirectory: 'static',
54
-        assetsPublicPath: './',
55
-
56
-        /**
57
-         * Source Maps
58
-         */
59
-
60
-        productionSourceMap: true,
61
-        // https://webpack.js.org/configuration/devtool/#production
62
-        devtool: '#source-map',
63
-
64
-        // Gzip off by default as many popular static hosts such as
65
-        // Surge or Netlify already gzip all static assets for you.
66
-        // Before setting to `true`, make sure to:
67
-        // npm install --save-dev compression-webpack-plugin
68
-        productionGzip: false,
69
-        productionGzipExtensions: ['js', 'css'],
70
-
71
-        // Run the build command with an extra argument to
72
-        // View the bundle analyzer report after build finishes:
73
-        // `npm run build --report`
74
-        // Set to `true` or `false` to always turn it on or off
75
-        bundleAnalyzerReport: process.env.npm_config_report
76
-    }
77
-}

+ 0
- 4
config/prod.env.js Целия файл

@@ -1,4 +0,0 @@
1
-'use strict'
2
-module.exports = {
3
-  NODE_ENV: '"production"'
4
-}

+ 0
- 48
eslintrc.js Целия файл

@@ -1,48 +0,0 @@
1
-{
2
-    "editor.tabSize": 2,
3
-    "files.associations": {
4
-        "*.vue": "vue"
5
-    },
6
-    "eslint.autoFixOnSave": true,
7
-    "eslint.options": {
8
-        "extensions": [
9
-            ".js",
10
-            ".vue"
11
-        ]
12
-    },
13
-    "eslint.validate": [
14
-        "javascript",
15
-        "javascriptreact",
16
-        "vue",
17
-        "vue-html"
18
-    ],
19
-    "search.exclude": {
20
-        "**/node_modules": true,
21
-        "**/bower_components": true,
22
-        "**/dist": true
23
-    },
24
-    "emmet.syntaxProfiles": {
25
-        "javascript": "jsx",
26
-        "vue": "html",
27
-        "vue-html": "html"
28
-    },
29
-    "git.confirmSync": false,
30
-    "window.zoomLevel": 0,
31
-    "vsicons.projectDetection.autoReload": true,
32
-    "typescript.check.tscVersion": false,
33
-    "editor.renderWhitespace": "boundary",
34
-    "editor.cursorBlinking": "smooth",
35
-    "workbench.colorTheme": "Solarized Light",
36
-    "workbench.iconTheme": "vscode-great-icons",
37
-    "editor.minimap.enabled": true,
38
-    "editor.minimap.renderCharacters": false,
39
-    "tslint.autoFixOnSave": true,
40
-    "editor.fontFamily": "'Droid Sans Mono', 'Courier New', monospace, 'Droid Sans Fallback'",
41
-    "beautify.tabSize": 2,
42
-    "window.title": "${dirty}${activeEditorMedium}${separator}${rootName}",
43
-    "typescript.extension.sortImports.maxNamedImportsInSingleLine": 5,
44
-    "typescript.extension.sortImports.omitSemicolon": true,
45
-    "editor.codeLens": true,
46
-    "editor.snippetSuggestions": "top",
47
-    "react-native-storybooks.port": 6006
48
-}

BIN
favicon.ico Целия файл


+ 0
- 17
index.html Целия файл

@@ -1,17 +0,0 @@
1
-<!DOCTYPE html>
2
-<html>
3
-
4
-<head>
5
-    <meta charset="utf-8">
6
-    <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
-    <!-- 页面增加icon图标 -->
8
-    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" rel="external nofollow" />
9
-    <title>后端管理平台</title>
10
-</head>
11
-
12
-<body>
13
-    <!-- built files will be auto injected -->
14
-    <div id="app"></div>
15
-</body>
16
-
17
-</html>

+ 11149
- 8688
package-lock.json
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 76
- 54
package.json Целия файл

@@ -1,68 +1,90 @@
1 1
 {
2
-  "name": "vue-ele-project",
3
-  "version": "1.0.0",
4
-  "description": "vue-ele-project",
5
-  "author": "lidonghui",
6
-  "private": true,
2
+  "name": "ruoyi",
3
+  "version": "3.8.6",
4
+  "description": "若依管理系统",
5
+  "author": "若依",
6
+  "license": "MIT",
7 7
   "scripts": {
8
-    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9
-    "start": "npm run dev",
10
-    "build": "node build/build.js"
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"
11 37
   },
12 38
   "dependencies": {
13
-    "echarts": "^4.2.0-rc.2",
14
-    "element-ui": "^2.3.2",
15
-    "http-proxy-middleware": "^0.18.0",
16
-    "js-md5": "^0.7.3",
17
-    "vue": "^2.5.2",
18
-    "vue-router": "^3.0.1",
19
-    "vuex": "^3.0.1"
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.13",
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"
20 62
   },
21 63
   "devDependencies": {
22
-    "autoprefixer": "^7.1.2",
23
-    "axios": "^0.18.0",
24
-    "babel-core": "^6.22.1",
25
-    "babel-helper-vue-jsx-merge-props": "^2.0.3",
26
-    "babel-loader": "^7.1.1",
27
-    "babel-plugin-syntax-jsx": "^6.18.0",
28
-    "babel-plugin-transform-runtime": "^6.22.0",
29
-    "babel-plugin-transform-vue-jsx": "^3.5.0",
30
-    "babel-preset-env": "^1.3.2",
31
-    "babel-preset-stage-2": "^6.22.0",
32
-    "chalk": "^2.0.1",
33
-    "copy-webpack-plugin": "^4.0.1",
34
-    "css-loader": "^0.28.0",
35
-    "extract-text-webpack-plugin": "^3.0.0",
36
-    "file-loader": "^1.1.4",
37
-    "friendly-errors-webpack-plugin": "^1.6.1",
38
-    "html-webpack-plugin": "^2.30.1",
39
-    "node-notifier": "^5.1.2",
40
-    "optimize-css-assets-webpack-plugin": "^3.2.0",
41
-    "ora": "^1.2.0",
42
-    "portfinder": "^1.0.13",
43
-    "postcss-import": "^11.0.0",
44
-    "postcss-loader": "^2.0.8",
45
-    "postcss-url": "^7.2.1",
46
-    "rimraf": "^2.6.0",
47
-    "semver": "^5.3.0",
48
-    "shelljs": "^0.7.6",
49
-    "uglifyjs-webpack-plugin": "^1.1.1",
50
-    "url-loader": "^0.5.8",
51
-    "vue-loader": "^13.3.0",
52
-    "vue-style-loader": "^3.0.1",
53
-    "vue-template-compiler": "^2.5.2",
54
-    "webpack": "^3.6.0",
55
-    "webpack-bundle-analyzer": "^2.9.0",
56
-    "webpack-dev-server": "^2.9.1",
57
-    "webpack-merge": "^4.1.0"
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": "5.0.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"
58 81
   },
59 82
   "engines": {
60
-    "node": ">= 6.0.0",
83
+    "node": ">=8.9",
61 84
     "npm": ">= 3.0.0"
62 85
   },
63 86
   "browserslist": [
64 87
     "> 1%",
65
-    "last 2 versions",
66
-    "not ie <= 8"
88
+    "last 2 versions"
67 89
   ]
68 90
 }

+ 0
- 1
project/index.html Целия файл

@@ -1 +0,0 @@
1
-<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" type=image/x-icon href=./favicon.ico rel="external nofollow"><title>后端管理平台</title><link href=./static/css/app.f7de60d9ec9c07c112d0b94c59208a0e.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e37fbe972401a2962be8.js></script><script type=text/javascript src=./static/js/app.656e0752769862c0c376.js></script></body></html>

+ 0
- 2
project/static/css/app.f7de60d9ec9c07c112d0b94c59208a0e.css
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 0
- 1
project/static/css/app.f7de60d9ec9c07c112d0b94c59208a0e.css.map
Файловите разлики са ограничени, защото са твърде много
Целия файл


BIN
project/static/fonts/element-icons.6f0a763.ttf Целия файл


BIN
project/static/fonts/iconfont.4f4ba31.eot Целия файл


BIN
project/static/fonts/iconfont.9a8d1b2.ttf Целия файл


BIN
project/static/gif.gif Целия файл


+ 0
- 96
project/static/img/iconfont.df0dca9.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 0
- 2
project/static/js/app.656e0752769862c0c376.js
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 0
- 1
project/static/js/app.656e0752769862c0c376.js.map
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 0
- 2
project/static/js/manifest.3ad1d5771e9b13dbdad2.js Целия файл

@@ -1,2 +0,0 @@
1
-!function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a<e.length;a++)i=e[a],o[i]&&l.push(o[i][0]),o[i]=0;for(f in u)Object.prototype.hasOwnProperty.call(u,f)&&(r[f]=u[f]);for(n&&n(e,u,c);l.length;)l.shift()();if(c)for(a=0;a<c.length;a++)p=t(t.s=c[a]);return p};var e={},o={2:0};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=r,t.c=e,t.d=function(r,n,e){t.o(r,n)||Object.defineProperty(r,n,{configurable:!1,enumerable:!0,get:e})},t.n=function(r){var n=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(n,"a",n),n},t.o=function(r,n){return Object.prototype.hasOwnProperty.call(r,n)},t.p="./",t.oe=function(r){throw console.error(r),r}}([]);
2
-//# sourceMappingURL=manifest.3ad1d5771e9b13dbdad2.js.map

+ 0
- 1
project/static/js/manifest.3ad1d5771e9b13dbdad2.js.map Целия файл

@@ -1 +0,0 @@
1
-{"version":3,"sources":["webpack:///webpack/bootstrap 2339051ff345deb5e9a9"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,KAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"static/js/manifest.3ad1d5771e9b13dbdad2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 2339051ff345deb5e9a9"],"sourceRoot":""}

+ 0
- 58
project/static/js/vendor.e37fbe972401a2962be8.js
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 0
- 1
project/static/js/vendor.e37fbe972401a2962be8.js.map
Файловите разлики са ограничени, защото са твърде много
Целия файл


BIN
project/static/交易订单.png Целия файл


BIN
project/static/商品管理.png Целия файл


BIN
project/static/展开与压缩.png Целия файл


BIN
project/static/支付配置.png Целия файл


BIN
project/static/用户管理.png Целия файл


BIN
project/static/登录.png Целия файл


BIN
project/static/编辑.png Целия файл


BIN
project/static/角色管理.png Целия файл


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: /

+ 17
- 19
src/App.vue Целия файл

@@ -1,30 +1,28 @@
1 1
 <template>
2 2
   <div id="app">
3
-    <router-view/>
3
+    <router-view />
4
+    <theme-picker />
4 5
   </div>
5 6
 </template>
6 7
 
7 8
 <script>
9
+import ThemePicker from "@/components/ThemePicker";
10
+
8 11
 export default {
9
-    name: "App"
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
+    }
10 22
 };
11 23
 </script>
12
-
13
-<style> 
14
-html,
15
-body {
16
-    width: 100%;
17
-    height: 100%;
18
-    box-sizing: border-box;
19
-    padding: 0px;
20
-    margin: 0px;
21
-}
22
-#app {
23
-    font-family: "Avenir", Helvetica, Arial, sans-serif;
24
-    -webkit-font-smoothing: antialiased;
25
-    -moz-osx-font-smoothing: grayscale;
26
-    color: #2c3e50;
27
-    widows: 100%;
28
-    height: 100%;
24
+<style scoped>
25
+#app .theme-picker {
26
+  display: none;
29 27
 }
30 28
 </style>

+ 0
- 58
src/api/axiosFun.js Целия файл

@@ -1,58 +0,0 @@
1
-import axios from 'axios';
2
-
3
-// 登录请求方法
4
-const loginreq = (method, url, params) => {
5
-    return axios({
6
-        method: method,
7
-        url: url,
8
-        headers: {
9
-            'Content-Type': 'application/x-www-form-urlencoded',
10
-        },
11
-        data: params,
12
-        traditional: true,
13
-        transformRequest: [
14
-            function(data) {
15
-                let ret = ''
16
-                for (let it in data) {
17
-                    ret +=
18
-                        encodeURIComponent(it) +
19
-                        '=' +
20
-                        encodeURIComponent(data[it]) +
21
-                        '&'
22
-                }
23
-                return ret
24
-            }
25
-        ]
26
-    }).then(res => res.data);
27
-};
28
-// 通用公用方法
29
-const req = (method, url, params) => {
30
-    return axios({
31
-        method: method,
32
-        url: url,
33
-        headers: {
34
-            'Content-Type': 'application/x-www-form-urlencoded',
35
-            token: localStorage.getItem('logintoken')
36
-        },
37
-        data: params,
38
-        traditional: true,
39
-        transformRequest: [
40
-            function(data) {
41
-                let ret = ''
42
-                for (let it in data) {
43
-                    ret +=
44
-                        encodeURIComponent(it) +
45
-                        '=' +
46
-                        encodeURIComponent(data[it]) +
47
-                        '&'
48
-                }
49
-                return ret
50
-            }
51
-        ]
52
-    }).then(res => res.data);
53
-};
54
-
55
-export {
56
-    loginreq,
57
-    req
58
-}

+ 0
- 32
src/api/basisMG.js Целия файл

@@ -1,32 +0,0 @@
1
-import axios from 'axios';
2
-import { req } from './axiosFun';
3
-
4
-/**
5
- * 商品管理
6
- **/
7
-// 商品管理-获取商品管理列表
8
-export const GoodsList = (params) => { return req("post", "/api/Goods/list", params) };
9
-// 商品管理-保存商品管理
10
-export const GoodsSave = (params) => { return req("post", "/api/Goods/save", params) };
11
-// 商品管理-删除商品管理
12
-export const GoodsDelete = (params) => { return axios.delete("/api/Goods/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
13
-
14
-/**
15
- * 机器信息管理 
16
- **/
17
-// 机器信息管理-获取机器信息管理列表
18
-export const MachineList = (params) => { return req("post", "/api/Machine/list", params) };
19
-// 机器信息管理-保存机器信息管理
20
-export const MachineSave = (params) => { return req("post", "/api/Machine/save", params) };
21
-// 机器信息管理-删除机器信息管理
22
-export const MachineDelete = (params) => { return axios.delete("/api/Machine/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
23
-
24
-/**
25
- * 货道信息管理
26
- **/
27
-// 货道信息管理-获取获取货道信息管理列表
28
-export const MachineAisleList = (params) => { return req("post", "/api/MachineAisle/list", params) };
29
-// 货道信息管理-删除货道信息管理
30
-export const MachineAisleDelete = (params) => { return axios.delete("/api/MachineAisle/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
31
-// 货道信息管理-保存货道信息管理
32
-export const MachineAisleRsave = (params) => { return req("post", "/api/MachineAisle/save", params) };

+ 59
- 0
src/api/login.js Целия файл

@@ -0,0 +1,59 @@
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
+    },
16
+    method: 'post',
17
+    data: data
18
+  })
19
+}
20
+
21
+// 注册方法
22
+export function register(data) {
23
+  return request({
24
+    url: '/register',
25
+    headers: {
26
+      isToken: false
27
+    },
28
+    method: 'post',
29
+    data: data
30
+  })
31
+}
32
+
33
+// 获取用户详细信息
34
+export function getInfo() {
35
+  return request({
36
+    url: '/getInfo',
37
+    method: 'get'
38
+  })
39
+}
40
+
41
+// 退出方法
42
+export function logout() {
43
+  return request({
44
+    url: '/logout',
45
+    method: 'post'
46
+  })
47
+}
48
+
49
+// 获取验证码
50
+export function getCodeImg() {
51
+  return request({
52
+    url: '/captchaImage',
53
+    headers: {
54
+      isToken: false
55
+    },
56
+    method: 'get',
57
+    timeout: 20000
58
+  })
59
+}

+ 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
+}

+ 0
- 32
src/api/payMG.js Целия файл

@@ -1,32 +0,0 @@
1
-import axios from 'axios';
2
-import { req } from './axiosFun';
3
-
4
-/**
5
- * 支付配置信息
6
- **/
7
-// 支付配置信息-获取支付配置信息列表
8
-export const MachineConfigList = (params) => { return req("post", "/api/MachineConfig/list", params) };
9
-// 支付配置信息-保存支付配置信息
10
-export const MachineConfigSave = (params) => { return req("post", "/api/MachineConfig/save", params) };
11
-// 支付配置信息-删除支付配置信息
12
-export const MachineConfigDelete = (params) => { return axios.delete("/api/MachineConfig/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
13
-
14
-/**
15
- * 支付配置 
16
- **/
17
-// 支付配置-获取支付配置列表
18
-export const ConfigList = (params) => { return req("post", "/api/Config/list", params) };
19
-// 支付配置-保存支付配置
20
-export const ConfigSave = (params) => { return req("post", "/api/Config/save", params) };
21
-// 支付配置-删除支付配置
22
-export const ConfigDelete = (params) => { return axios.delete("/api/Config/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
23
-
24
-/**
25
- * 订单管理-交易订单 
26
- **/
27
-// 交易订单-获取交易订单列表
28
-export const OrderList = (params) => { return req("post", "/api/Order/list", params) };
29
-// 交易订单-s删除交易订单
30
-export const OrderDelete = (params) => { return axios.delete("/api/Order/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
31
-// 交易订单-交易订单退款
32
-export const OrderRefund = (params) => { return req("post", "/api/Order/refund", params) };

+ 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
+}

+ 76
- 0
src/api/tool/gen.js Целия файл

@@ -0,0 +1,76 @@
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 previewTable(tableId) {
48
+  return request({
49
+    url: '/tool/gen/preview/' + tableId,
50
+    method: 'get'
51
+  })
52
+}
53
+
54
+// 删除表数据
55
+export function delTable(tableId) {
56
+  return request({
57
+    url: '/tool/gen/' + tableId,
58
+    method: 'delete'
59
+  })
60
+}
61
+
62
+// 生成代码(自定义路径)
63
+export function genCode(tableName) {
64
+  return request({
65
+    url: '/tool/gen/genCode/' + tableName,
66
+    method: 'get'
67
+  })
68
+}
69
+
70
+// 同步数据库
71
+export function synchDb(tableName) {
72
+  return request({
73
+    url: '/tool/gen/synchDb/' + tableName,
74
+    method: 'get'
75
+  })
76
+}

+ 0
- 97
src/api/userMG.js Целия файл

@@ -1,97 +0,0 @@
1
-import axios from 'axios';
2
-import { loginreq, req } from './axiosFun';
3
-
4
-// 登录接口 
5
-export const login = (params) => { return loginreq("post", "/api/login", params) };
6
-// 获取用户菜单
7
-export const menu = (params) => { return axios.get("/api/menu?&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
8
-// 退出接口
9
-export const loginout = () => { return axios.delete("/api/login?&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
10
-
11
-/**
12
- * 用户管理 
13
- **/
14
-// 用户管理-获取用户列表
15
-export const userList = (params) => { return req("post", "/api/User/list", params) };
16
-// 用户管理-保存(添加编辑)
17
-export const userSave = (params) => { return req("post", "/api/User/save", params) };
18
-// 用户管理-删除用户
19
-export const userDelete = (params) => { return axios.delete("/api/User/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
20
-// 用户管理-重置密码
21
-export const userPwd = (params) => { return req("post", "/api/User/pwd", params) };
22
-// 用户管理-修改状态
23
-export const userLock = (params) => { return axios.get("/api/User/lock?userId=" + params.userId + "&lock=" + params.lock + "&token=" + localStorage.getItem('logintoken')) };
24
-// 用户管理-数据权限
25
-export const UserDeptTree = (params) => { return axios.get("/api/UserDept/tree/" + params + "?token=" + localStorage.getItem('logintoken')) };
26
-// 用户管理-数据权限保存
27
-export const UserDeptSave = (params) => { return req("post", "/api/UserDept/save", params) };
28
-// 用户管理-获取部门设置
29
-export const UserDeptdeptTree = (params) => { return axios.get("/api/UserDept/deptTree/" + params + "?token=" + localStorage.getItem('logintoken')) };
30
-// 用户管理-保存部门设置
31
-export const UserChangeDept = (params) => { return req("post", "/api/User/change/dept", params) };
32
-// 用户管理-用户下线
33
-export const userExpireToken = (params) => { return req("get", "/api/User/expireToken/" + params, {}) };
34
-// 用户管理-刷新缓存
35
-export const userFlashCache = (params) => { return req("get", "/api/User/flashCache/" + params, {}) };
36
-
37
-/**
38
- * 菜单管理
39
- **/
40
-// 菜单管理-获取菜单Module/list
41
-export const ModuleList = () => { return req("post", "/api/Module/list") };
42
-// 菜单管理-根据菜单获取数据
43
-export const ModuleGet = (params) => { return axios.get("/api/Module/get/" + params + "?token=" + localStorage.getItem('logintoken')) };
44
-// 菜单管理-获取父级菜单Module/nodes
45
-export const ModuleNodes = (params) => { return req("post", "/api/Module/nodes", params) };
46
-// 菜单管理-修改菜单
47
-export const ModuleSave = (params) => { return req("post", "/api/Module/save", params) };
48
-// 菜单管理-删除菜单
49
-export const ModuleDelete = (params) => { return axios.delete("/api/Module/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
50
-
51
-/**
52
- * 角色管理 
53
- **/
54
-// 角色管理-获取角色列表
55
-export const roleList = (params) => { return req("post", "/api/Role/list", params) };
56
-// 角色管理-保存(添加编辑)
57
-export const roleSave = (params) => { return req("post", "/api/Role/save", params) };
58
-// 角色管理-删除角色
59
-export const roleDelete = (params) => { return axios.delete("/api/Role/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
60
-// 角色管理-菜单权限(获取)
61
-export const RoleRightTree = (params) => { return axios.get("/api/RoleRight/tree/" + params + "?token=" + localStorage.getItem('logintoken')) };
62
-// 角色管理-菜单权限(保存)
63
-export const RoleRightSave = (params) => { return req("post", "/api/RoleRight/save", params) };
64
-
65
-/**
66
- * 公司管理 
67
- **/
68
-// 公司管理-获取公司列表
69
-export const deptList = (params) => { return req("post", "/api/Dept/list", params) };
70
-// 公司管理-保存(添加编辑)
71
-export const deptSave = (params) => { return req("post", "/api/Dept/save", params) };
72
-// 公司管理-删除公司
73
-export const deptDelete = (params) => { return axios.get("/api/Dept/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
74
-
75
-/**
76
- * 系统环境变量 
77
- **/
78
-// 系统环境变量-获取系统环境变量列表
79
-export const variableList = (params) => { return req("post", "/api/Variable/list", params) };
80
-// 系统环境变量-保存(添加编辑)
81
-export const variableSave = (params) => { return req("post", "/api/Variable/save", params) };
82
-// 系统环境变量-删除系统环境变量
83
-export const variableDelete = (params) => { return axios.delete("/api/Variable/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
84
-
85
-/**
86
- * 权限管理 
87
- **/
88
-// 权限管理-获取权限列表
89
-export const permissionList = (params) => { return req("post", "/api/Permission/list", params) };
90
-// 权限管理-保存权限
91
-export const ermissionSave = (params) => { return req("post", "/api/Permission/save", params) };
92
-// 权限管理-删除权限
93
-export const ermissionDelete = (params) => { return axios.delete("/api/Permission/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
94
-// 权限管理-获取权限
95
-export const roleDropDown = () => { return axios.get("/api/Role/dropDown/all?&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
96
-// 权限管理-配置权限
97
-export const RolePermission = (params) => { return req("post", "/api/RolePermission/save", params) };

BIN
src/assets/401_images/401.gif Целия файл


BIN
src/assets/404_images/404.png Целия файл


BIN
src/assets/404_images/404_cloud.png Целия файл


+ 0
- 101
src/assets/icon/iconfont.css
Файловите разлики са ограничени, защото са твърде много
Целия файл


BIN
src/assets/icon/iconfont.eot Целия файл


+ 0
- 96
src/assets/icon/iconfont.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


BIN
src/assets/icon/iconfont.ttf Целия файл


BIN
src/assets/icon/iconfont.woff Целия файл


+ 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 Целия файл

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M121.718 73.272v9.953c3.957-7.584 6.199-16.05 6.199-24.995C127.917 26.079 99.273 0 63.958 0 28.644 0 0 26.079 0 58.23c0 .403.028.806.028 1.21l22.97-25.953h13.34l-19.76 27.187h6.42V53.77l13.728-19.477v49.361H22.998V73.272H2.158c5.951 20.284 23.608 36.208 45.998 41.399-1.44 3.3-5.618 11.263-12.565 12.674-8.607 1.764 23.358.428 46.163-13.178 17.519-4.611 31.938-15.849 39.77-30.513h-13.506V73.272H85.02V59.464l22.998-25.977h13.008l-19.429 27.187h6.421v-7.433l13.727-19.402v39.433h-.027zm-78.24 2.822a10.516 10.516 0 0 1-.996-4.535V44.548c0-1.613.332-3.124.996-4.535a11.66 11.66 0 0 1 2.713-3.68c1.134-1.032 2.49-1.864 4.04-2.468 1.55-.605 3.21-.908 4.982-.908h11.292c1.77 0 3.431.303 4.981.908 1.522.604 2.85 1.41 3.986 2.418l-12.26 16.303v-2.898a1.96 1.96 0 0 0-.665-1.512c-.443-.403-.996-.604-1.66-.604-.665 0-1.218.201-1.661.604a1.96 1.96 0 0 0-.664 1.512v9.071L44.364 77.606a10.556 10.556 0 0 1-.886-1.512zm35.73-4.535c0 1.613-.332 3.124-.997 4.535a11.66 11.66 0 0 1-2.712 3.68c-1.134 1.032-2.49 1.864-4.04 2.469-1.55.604-3.21.907-4.982.907H55.185c-1.77 0-3.431-.303-4.981-.907-1.55-.605-2.906-1.437-4.041-2.47a12.49 12.49 0 0 1-1.384-1.512l13.727-18.217v6.375c0 .605.222 1.109.665 1.512.442.403.996.604 1.66.604.664 0 1.218-.201 1.66-.604a1.96 1.96 0 0 0 .665-1.512V53.87L75.97 36.838c.913.932 1.66 1.99 2.214 3.175.664 1.41.996 2.922.996 4.535v27.011h.028z"/></svg>

+ 1
- 0
src/assets/icons/svg/bug.svg Целия файл

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M127.88 73.143c0 1.412-.506 2.635-1.518 3.669-1.011 1.033-2.209 1.55-3.592 1.55h-17.887c0 9.296-1.783 17.178-5.35 23.645l16.609 17.044c1.011 1.034 1.517 2.257 1.517 3.67 0 1.412-.506 2.635-1.517 3.668-.958 1.033-2.155 1.55-3.593 1.55-1.438 0-2.635-.517-3.593-1.55l-15.811-16.063a15.49 15.49 0 0 1-1.196 1.06c-.532.434-1.65 1.208-3.353 2.322a50.104 50.104 0 0 1-5.192 2.974c-1.758.87-3.94 1.658-6.546 2.364-2.607.706-5.189 1.06-7.748 1.06V47.044H58.89v73.062c-2.716 0-5.417-.367-8.106-1.102-2.688-.734-5.003-1.631-6.945-2.692a66.769 66.769 0 0 1-5.268-3.179c-1.571-1.057-2.73-1.94-3.476-2.65L33.9 109.34l-14.611 16.877c-1.066 1.14-2.344 1.711-3.833 1.711-1.277 0-2.422-.434-3.434-1.304-1.012-.978-1.557-2.187-1.635-3.627-.079-1.44.333-2.705 1.236-3.794l16.129-18.51c-3.087-6.197-4.63-13.644-4.63-22.342H5.235c-1.383 0-2.58-.517-3.592-1.55S.125 74.545.125 73.132c0-1.412.506-2.635 1.518-3.668 1.012-1.034 2.21-1.55 3.592-1.55h17.887V43.939L9.308 29.833c-1.012-1.033-1.517-2.256-1.517-3.669 0-1.412.505-2.635 1.517-3.668 1.012-1.034 2.21-1.55 3.593-1.55s2.58.516 3.593 1.55l13.813 14.106h67.396l13.814-14.106c1.012-1.034 2.21-1.55 3.592-1.55 1.384 0 2.581.516 3.593 1.55 1.012 1.033 1.518 2.256 1.518 3.668 0 1.413-.506 2.636-1.518 3.67l-13.814 14.105v23.975h17.887c1.383 0 2.58.516 3.593 1.55 1.011 1.033 1.517 2.256 1.517 3.668l-.005.01zM89.552 26.175H38.448c0-7.23 2.489-13.386 7.466-18.469C50.892 2.623 56.92.082 64 .082c7.08 0 13.108 2.541 18.086 7.624 4.977 5.083 7.466 11.24 7.466 18.469z"/></svg>

+ 1
- 0
src/assets/icons/svg/build.svg Целия файл

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1568899741379" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2054" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M960 591.424V368.96c0-0.288 0.16-0.512 0.16-0.768S960 367.68 960 367.424V192a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v175.424c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768v222.464c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768V864a32 32 0 0 0 32 32h832a32 32 0 0 0 32-32v-271.04c0-0.288 0.16-0.512 0.16-0.768S960 591.68 960 591.424z m-560-31.232v-160H608v160h-208z m208 64V832h-208v-207.808H608z m-480-224h208v160H128v-160z m544 0h224v160h-224v-160zM896 224v112.192H128V224h768zM128 624.192h208V832H128v-207.808zM672 832v-207.808h224V832h-224z" p-id="2055"></path></svg>

+ 1
- 0
src/assets/icons/svg/button.svg Целия файл

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1588670460195" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1314" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M230.4 307.712c13.824 0 25.088-11.264 25.088-25.088 0-100.352 81.92-182.272 182.272-182.272s182.272 81.408 182.272 182.272c0 13.824 11.264 25.088 25.088 25.088s25.088-11.264 24.576-25.088c0-127.488-103.936-231.936-231.936-231.936S205.824 154.624 205.824 282.624c-0.512 14.336 10.752 25.088 24.576 25.088z m564.736 234.496c-11.264 0-21.504 2.048-31.232 6.144 0-44.544-40.448-81.92-88.064-81.92-14.848 0-28.16 3.584-39.936 10.24-13.824-28.16-44.544-48.128-78.848-48.128-12.288 0-24.576 2.56-35.328 7.68V284.16c0-45.568-37.888-81.92-84.48-81.92s-84.48 36.864-84.48 81.92v348.672l-69.12-112.64c-18.432-28.16-58.368-36.864-91.136-19.968-26.624 14.336-46.592 47.104-30.208 88.064 3.072 8.192 76.8 205.312 171.52 311.296 0 0 28.16 24.576 43.008 58.88 4.096 9.728 13.312 15.36 22.528 15.36 3.072 0 6.656-0.512 9.728-2.048 12.288-5.12 18.432-19.968 12.8-32.256-19.456-44.544-53.76-74.752-53.76-74.752C281.6 768 209.408 573.44 208.384 570.88c-5.12-12.8-2.56-20.992 7.168-26.112 9.216-4.608 21.504-4.608 26.112 2.56l113.152 184.32c4.096 8.704 12.8 14.336 22.528 14.336 13.824 0 25.088-10.752 25.088-25.088V284.16c0-17.92 15.36-32.256 34.816-32.256s34.816 14.336 34.816 32.256v284.16c0 13.824 10.24 25.088 24.576 25.088 13.824 0 25.088-11.264 25.088-25.088v-57.344c0-17.92 15.36-32.768 34.816-32.768 19.968 0 37.376 15.36 37.376 32.768v95.232c0 7.168 3.072 13.312 7.68 17.92 4.608 4.608 10.752 7.168 17.92 7.168 13.824 0 24.576-11.264 24.576-25.088V547.84c0-18.432 13.824-32.256 32.256-32.256 20.48 0 38.912 15.36 38.912 32.256v95.232c0 13.824 11.264 25.088 25.088 25.088s24.576-11.264 25.088-25.088v-18.944c0-18.944 12.8-32.256 30.72-32.256 18.432 0 22.528 18.944 22.528 31.744 0 1.024-11.776 99.84-50.688 173.056-30.72 58.368-45.056 112.128-51.2 146.944-2.56 13.312 6.656 26.112 19.968 28.672 1.536 0 3.072 0.512 4.608 0.512 11.776 0 22.016-8.192 24.064-20.48 5.632-31.232 18.432-79.36 46.08-132.608 43.52-81.92 55.808-186.88 56.32-193.536-0.512-50.688-29.696-83.968-72.704-83.968z"></path></path></svg>

+ 1
- 0
src/assets/icons/svg/cascader.svg Целия файл

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1576153230908" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="971" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M772.87036133 734.06115723c-43.34106445 0-80.00793458 27.93273926-93.76831055 66.57714843H475.90991211c-56.60705567 0-102.66723633-46.06018067-102.66723633-102.66723633V600.82446289h305.859375c13.76037598 38.64440918 50.42724609 66.57714844 93.76831055 66.57714844 55.12390137 0 99.94812012-44.82421875 99.94812012-99.94812012S827.9942627 467.50537109 772.87036133 467.50537109c-43.34106445 0-80.00793458 27.93273926-93.76831055 66.57714844H373.24267578V401.01062011h321.92687989c55.12390137 0 99.94812012-44.82421875 99.94812011-99.94812011V190.07312011C795.11767578 134.94921875 750.29345703 90.125 695.16955567 90.125H251.12963867C196.0057373 90.125 151.18151855 134.94921875 151.18151855 190.07312011V301.0625c0 55.12390137 44.82421875 99.94812012 99.94812012 99.94812012h55.53588867v296.96044921c0 93.35632325 75.97045898 169.32678223 169.32678224 169.32678223h203.19213866c13.76037598 38.64440918 50.42724609 66.57714844 93.76831055 66.57714844 55.12390137 0 99.94812012-44.82421875 99.94812012-99.94812012s-44.90661622-99.86572266-100.03051758-99.86572265z m0-199.89624024c18.37463379 0 33.28857422 14.91394043 33.28857422 33.28857423s-14.91394043 33.28857422-33.28857422 33.28857421-33.28857422-14.91394043-33.28857422-33.28857421 14.91394043-33.28857422 33.28857422-33.28857422zM217.75866699 301.0625V190.07312011c0-18.37463379 14.91394043-33.28857422 33.28857423-33.28857421h444.03991698c18.37463379 0 33.28857422 14.91394043 33.28857422 33.28857422V301.0625c0 18.37463379-14.91394043 33.28857422-33.28857422 33.28857422H251.12963867c-18.37463379 0-33.37097168-14.91394043-33.37097168-33.28857422z m555.11169434 566.23535156c-18.37463379 0-33.28857422-14.91394043-33.28857422-33.28857422 0-18.37463379 14.91394043-33.28857422 33.28857422-33.28857422s33.28857422 14.91394043 33.28857422 33.28857422c0.08239747 18.29223633-14.91394043 33.28857422-33.28857422 33.28857422z" p-id="972"></path></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 Целия файл

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575982282951" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="902" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M828.40625 90.125H195.59375C137.375 90.125 90.125 137.375 90.125 195.59375v632.8125c0 58.21875 47.25 105.46875 105.46875 105.46875h632.8125c58.21875 0 105.46875-47.25 105.46875-105.46875V195.59375c0-58.21875-47.25-105.46875-105.46875-105.46875z m52.734375 738.28125c0 29.16-23.57015625 52.734375-52.734375 52.734375H195.59375c-29.109375 0-52.734375-23.574375-52.734375-52.734375V195.59375c0-29.109375 23.625-52.734375 52.734375-52.734375h632.8125c29.16 0 52.734375 23.625 52.734375 52.734375v632.8125z" p-id="903"></path><path d="M421.52890625 709.55984375a36.28125 36.28125 0 0 1-27.55265625-12.66890625L205.17453125 476.613125a36.28546875 36.28546875 0 0 1 55.10109375-47.22890625l164.986875 192.4846875 342.16171875-298.48078125a36.2896875 36.2896875 0 0 1 47.70984375 54.68765625L445.3859375 700.6203125a36.3234375 36.3234375 0 0 1-23.85703125 8.93953125z" p-id="904"></path></svg>

+ 1
- 0
src/assets/icons/svg/clipboard.svg Целия файл

@@ -0,0 +1 @@
1
+<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.857 118.857h64V73.143H89.143c-1.902 0-3.52-.668-4.855-2.002-1.335-1.335-2.002-2.954-2.002-4.855V36.57H54.857v82.286zM73.143 16v-4.571a2.2 2.2 0 0 0-.677-1.61 2.198 2.198 0 0 0-1.609-.676H20.571c-.621 0-1.158.225-1.609.676a2.198 2.198 0 0 0-.676 1.61V16a2.2 2.2 0 0 0 .676 1.61c.451.45.988.676 1.61.676h50.285c.622 0 1.158-.226 1.61-.677.45-.45.676-.987.676-1.609zm18.286 48h21.357L91.43 42.642V64zM128 73.143v48c0 1.902-.667 3.52-2.002 4.855-1.335 1.335-2.953 2.002-4.855 2.002H52.57c-1.901 0-3.52-.667-4.854-2.002-1.335-1.335-2.003-2.953-2.003-4.855v-11.429H6.857c-1.902 0-3.52-.667-4.855-2.002C.667 106.377 0 104.759 0 102.857v-96c0-1.902.667-3.52 2.002-4.855C3.337.667 4.955 0 6.857 0h77.714c1.902 0 3.52.667 4.855 2.002 1.335 1.335 2.003 2.953 2.003 4.855V30.29c1 .622 1.856 1.29 2.569 2.003l29.147 29.147c1.335 1.335 2.478 3.145 3.429 5.43.95 2.287 1.426 4.383 1.426 6.291v-.018z"/></svg>

+ 1
- 0
src/assets/icons/svg/code.svg Целия файл

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1546567861908" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2422" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M318.577778 819.2L17.066667 512l301.511111-307.2 45.511111 45.511111L96.711111 512l267.377778 261.688889zM705.422222 819.2l-45.511111-45.511111L927.288889 512l-267.377778-261.688889 45.511111-45.511111L1006.933333 512zM540.785778 221.866667l55.751111 11.150222L483.157333 802.133333l-55.751111-11.093333z" p-id="2423"></path></svg>

+ 0
- 0
src/assets/icons/svg/color.svg Целия файл


Някои файлове не бяха показани, защото твърде много файлове са промени