matianxiang 3 周之前
當前提交
ae871c952f
共有 100 個文件被更改,包括 24599 次插入0 次删除
  1. 2 0
      .env.development
  2. 2 0
      .env.production
  3. 2 0
      .env.production.sit
  4. 2 0
      .env.production.uat
  5. 1 0
      .eslintignore
  6. 3 0
      .gitignore
  7. 5 0
      README.md
  8. 5 0
      babel.config.js
  9. 105 0
      gulpfile.js
  10. 20555 0
      package-lock.json
  11. 104 0
      package.json
  12. 1 0
      public/element-theme/blue/aui.css
  13. 二進制
      public/element-theme/blue/fonts/element-icons.ttf
  14. 二進制
      public/element-theme/blue/fonts/element-icons.woff
  15. 1 0
      public/element-theme/blue/index.css
  16. 1 0
      public/element-theme/brown/aui.css
  17. 二進制
      public/element-theme/brown/fonts/element-icons.ttf
  18. 二進制
      public/element-theme/brown/fonts/element-icons.woff
  19. 1 0
      public/element-theme/brown/index.css
  20. 1 0
      public/element-theme/cyan/aui.css
  21. 二進制
      public/element-theme/cyan/fonts/element-icons.ttf
  22. 二進制
      public/element-theme/cyan/fonts/element-icons.woff
  23. 1 0
      public/element-theme/cyan/index.css
  24. 1 0
      public/element-theme/default/aui.css
  25. 二進制
      public/element-theme/default/fonts/element-icons.ttf
  26. 二進制
      public/element-theme/default/fonts/element-icons.woff
  27. 1 0
      public/element-theme/default/index.css
  28. 1 0
      public/element-theme/gray/aui.css
  29. 二進制
      public/element-theme/gray/fonts/element-icons.ttf
  30. 二進制
      public/element-theme/gray/fonts/element-icons.woff
  31. 1 0
      public/element-theme/gray/index.css
  32. 1 0
      public/element-theme/green/aui.css
  33. 二進制
      public/element-theme/green/fonts/element-icons.ttf
  34. 二進制
      public/element-theme/green/fonts/element-icons.woff
  35. 1 0
      public/element-theme/green/index.css
  36. 1 0
      public/element-theme/indigo/aui.css
  37. 二進制
      public/element-theme/indigo/fonts/element-icons.ttf
  38. 二進制
      public/element-theme/indigo/fonts/element-icons.woff
  39. 1 0
      public/element-theme/indigo/index.css
  40. 1 0
      public/element-theme/orange/aui.css
  41. 二進制
      public/element-theme/orange/fonts/element-icons.ttf
  42. 二進制
      public/element-theme/orange/fonts/element-icons.woff
  43. 1 0
      public/element-theme/orange/index.css
  44. 1 0
      public/element-theme/pink/aui.css
  45. 二進制
      public/element-theme/pink/fonts/element-icons.ttf
  46. 二進制
      public/element-theme/pink/fonts/element-icons.woff
  47. 1 0
      public/element-theme/pink/index.css
  48. 1 0
      public/element-theme/purple/aui.css
  49. 二進制
      public/element-theme/purple/fonts/element-icons.ttf
  50. 二進制
      public/element-theme/purple/fonts/element-icons.woff
  51. 1 0
      public/element-theme/purple/index.css
  52. 1 0
      public/element-theme/red/aui.css
  53. 二進制
      public/element-theme/red/fonts/element-icons.ttf
  54. 二進制
      public/element-theme/red/fonts/element-icons.woff
  55. 1 0
      public/element-theme/red/index.css
  56. 1 0
      public/element-theme/turquoise/aui.css
  57. 二進制
      public/element-theme/turquoise/fonts/element-icons.ttf
  58. 二進制
      public/element-theme/turquoise/fonts/element-icons.woff
  59. 1 0
      public/element-theme/turquoise/index.css
  60. 1 0
      public/element-theme/yellow/aui.css
  61. 二進制
      public/element-theme/yellow/fonts/element-icons.ttf
  62. 二進制
      public/element-theme/yellow/fonts/element-icons.woff
  63. 1 0
      public/element-theme/yellow/index.css
  64. 二進制
      public/favicon.ico
  65. 66 0
      public/index.html
  66. 34 0
      src/App.vue
  67. 二進制
      src/assets/img/avatar.png
  68. 二進制
      src/assets/img/login_bg.jpg
  69. 11 0
      src/assets/scss/aui.scss
  70. 713 0
      src/assets/scss/common.scss
  71. 15 0
      src/assets/scss/modules/home.scss
  72. 447 0
      src/assets/scss/normalize.scss
  73. 48 0
      src/assets/scss/pages/404.scss
  74. 220 0
      src/assets/scss/pages/login.scss
  75. 22 0
      src/assets/scss/variables.scss
  76. 0 0
      src/components/.gitkeep
  77. 7 0
      src/components/ren-dept-tree/index.js
  78. 118 0
      src/components/ren-dept-tree/src/ren-dept-tree.vue
  79. 7 0
      src/components/ren-process-detail/index.js
  80. 79 0
      src/components/ren-process-detail/src/ren-process-detail.vue
  81. 7 0
      src/components/ren-process-multiple/index.js
  82. 87 0
      src/components/ren-process-multiple/src/ren-process-multiple.vue
  83. 7 0
      src/components/ren-process-running/index.js
  84. 100 0
      src/components/ren-process-running/src/ren-process-running.vue
  85. 85 0
      src/components/ren-process-running/src/ren-task-back.vue
  86. 102 0
      src/components/ren-process-running/src/ren-task-entrust.vue
  87. 175 0
      src/components/ren-process-running/src/ren-task-handle.vue
  88. 84 0
      src/components/ren-process-running/src/select-user.vue
  89. 7 0
      src/components/ren-process-start/index.js
  90. 134 0
      src/components/ren-process-start/src/ren-process-start.vue
  91. 7 0
      src/components/ren-radio-group/index.js
  92. 20 0
      src/components/ren-radio-group/src/ren-radio-group.vue
  93. 7 0
      src/components/ren-region-tree/index.js
  94. 132 0
      src/components/ren-region-tree/src/ren-region-tree.vue
  95. 7 0
      src/components/ren-select/index.js
  96. 21 0
      src/components/ren-select/src/ren-select.vue
  97. 23 0
      src/element-ui/config.js
  98. 994 0
      src/element-ui/theme-variables.scss
  99. 1 0
      src/element-ui/theme/alert.css
  100. 0 0
      src/element-ui/theme/aside.css

+ 2 - 0
.env.development

@@ -0,0 +1,2 @@
1
+NODE_ENV=development
2
+VUE_APP_NODE_ENV=dev

+ 2 - 0
.env.production

@@ -0,0 +1,2 @@
1
+NODE_ENV=production
2
+VUE_APP_NODE_ENV=prod

+ 2 - 0
.env.production.sit

@@ -0,0 +1,2 @@
1
+NODE_ENV=production
2
+VUE_APP_NODE_ENV=prod:sit

+ 2 - 0
.env.production.uat

@@ -0,0 +1,2 @@
1
+NODE_ENV=production
2
+VUE_APP_NODE_ENV=prod:uat

+ 1 - 0
.eslintignore

@@ -0,0 +1 @@
1
+/src/icons/iconfont.js

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
1
+/yarn-error.log
2
+/.idea/
3
+/node_modules/

+ 5 - 0
README.md

@@ -0,0 +1,5 @@
1
+eitc-security【企业版】版权声明
2
+
3
+1. eitc-security【企业版】已申请软件著作权,未经授权的企业或个人,请购买正版授权,否则我们会根据事态轻重追究相应法律责任。
4
+2. 授权者不得擅自将源码上传到包括但不限于GitHub、Gitee、CSDN、百度网盘等互联网分享平台,不得直接对授权的产品本身进行二次转售或倒卖等,否则我们收回产品授权,并移交司法机关处理。
5
+3. 未经授权的任何公司及个人,无权使用、重构及二次开发,否则,我们将收集并固定相关证据,对侵权者采取一切必要的法律措施,追究侵权行为人的法律责任以维护我司的合法权益。

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  presets: [
3
+    '@vue/cli-plugin-babel/preset'
4
+  ]
5
+}

+ 105 - 0
gulpfile.js

@@ -0,0 +1,105 @@
1
+var gulp   = require('gulp')
2
+var $      = require('gulp-load-plugins')()
3
+var fs     = require('fs')
4
+var path   = require('path')
5
+var del    = require('del')
6
+//var colors = require('colors')
7
+var child_process = require('child_process')
8
+
9
+var theme            = {}
10
+var themeList        = require('./src/element-ui/config.js').filter(item => !item.hasBuild)
11
+var styleFileDir     = './src/assets/scss'
12
+var styleFileDirTemp = `${styleFileDir}-temp`
13
+var themeFileDir     = './public/element-theme'
14
+var et               = require('element-theme')
15
+var etOptions        = require('./package.json')['element-theme']
16
+var themeFileName    = etOptions.config.replace(/.*\/(.+\.scss)/, '$1')
17
+
18
+/**
19
+ * 构建生成主题
20
+ */
21
+gulp.task('themes', () => {
22
+  if (themeList.length <= 0) { return del(styleFileDirTemp) }
23
+
24
+  // 删除临时文件,保证本次操作正常执行
25
+  //del(styleFileDirTemp)
26
+  console.log('del(styleFileDirTemp)');
27
+
28
+  // 拷贝一份scss样式文件夹,作为构建的临时处理文件夹
29
+  //child_process.spawnSync('cp', ['-r', styleFileDir, styleFileDirTemp])
30
+  console.log('copy styleFileDirTemp');
31
+
32
+  // 拷贝element组件scss变量样式文件至临时处理文件夹中,并修改相应配置信息
33
+  //child_process.spawnSync('cp', ['-r', etOptions.config, styleFileDirTemp])
34
+  etOptions.config = `${styleFileDirTemp}/${themeFileName}`
35
+
36
+  // 开始构建生成
37
+  fnCreate(themeList)
38
+
39
+  function fnCreate (themeList) {
40
+    if (themeList.length >= 1) {
41
+      // 保存当前构建生成的主题对象
42
+      theme = themeList[0]
43
+
44
+      console.log('\n')
45
+      console.log('-------------------- 待构建,主题 -------------------------')
46
+      console.log(themeList)
47
+      console.log('\n')
48
+      console.log('-------------------- 构建中,主题 -------------------------')
49
+      console.log(theme)
50
+      console.log('\n')
51
+
52
+      // 修改.scss临时文件中的$--color-primary主题变量值
53
+      var data = fs.readFileSync(etOptions.config, 'utf8')
54
+      var result = data.replace(/\$--color-primary:(.*) !default;/, `$--color-primary:${theme.color} !default;`)
55
+      fs.writeFileSync(path.resolve(etOptions.config), result)
56
+
57
+      // 修改aui.scss临时文件中引入element组件主题变量文件路径
58
+      var data = fs.readFileSync(`${styleFileDirTemp}/aui.scss`, 'utf8')
59
+      var result = data.replace(new RegExp(`(@import \")(.*\/)(${themeFileName}\";)`), '$1./$3')
60
+      fs.writeFileSync(path.resolve(`${styleFileDirTemp}/aui.scss`), result)
61
+
62
+      // 调用element-theme插件,生成element组件主题
63
+      etOptions.out = `${themeFileDir}/${theme.name}`
64
+      et.run(etOptions, () => {
65
+        // 生成后,构建同主题色aui.css项目主题
66
+        gulp.start(['styles'], () => {
67
+          // 递归下一步
68
+          themeList.splice(0, 1)
69
+          fnCreate(themeList)
70
+        })
71
+      })
72
+    } else {
73
+      // 删除临时文件
74
+      del(styleFileDirTemp)
75
+      console.log('\n')
76
+      console.log('-------------------- 构建完毕,删除临时文件 -------------------------')
77
+      console.log(styleFileDirTemp)
78
+      console.log('\n')
79
+
80
+      // 删除主题不需要的部分文件
81
+      var files = [
82
+        `${themeFileDir}/**/*.css`,
83
+        `!${themeFileDir}/**/index.css`,
84
+        `!${themeFileDir}/**/aui.css`,
85
+        `!${themeFileDir}/**/fonts`
86
+      ]
87
+      del(files)
88
+      console.log('-------------------- 构建完毕,删除主题独立组件文件 -------------------------')
89
+      console.log(files)
90
+      console.log('\n')
91
+    }
92
+  }
93
+})
94
+
95
+gulp.task('styles', () => {
96
+  return gulp.src([`${styleFileDirTemp}/aui.scss`])
97
+    .pipe($.sass().on('error', $.sass.logError))
98
+    .pipe($.autoprefixer({
99
+      browsers: etOptions.browsers,
100
+      cascade: false
101
+    }))
102
+    .pipe($.cleanCss())
103
+    .pipe($.rename('aui.css'))
104
+    .pipe(gulp.dest(`${themeFileDir}/${theme.name}`))
105
+})

File diff suppressed because it is too large
+ 20555 - 0
package-lock.json


+ 104 - 0
package.json

@@ -0,0 +1,104 @@
1
+{
2
+  "name": "security-enterprise-tenant-admin",
3
+  "version": "2.8.0",
4
+  "private": true,
5
+  "scripts": {
6
+    "serve": "vue-cli-service serve",
7
+    "build": "vue-cli-service build",
8
+    "lint": "vue-cli-service lint",
9
+    "build:prod": "vue-cli-service build --mode production",
10
+    "build:sit": "vue-cli-service build --mode production.sit",
11
+    "build:uat": "vue-cli-service build --mode production.uat",
12
+    "et": "node_modules/.bin/et",
13
+    "et:init": "node_modules/.bin/et -i",
14
+    "et:list": "gulp themes"
15
+  },
16
+  "dependencies": {
17
+    "axios": "^0.19.2",
18
+    "babel-eslint": "^8.0.1",
19
+    "babel-plugin-component": "^1.1.1",
20
+    "core-js": "^3.6.5",
21
+    "element-theme": "^2.0.1",
22
+    "element-ui": "^2.13.2",
23
+    "gulp-autoprefixer": "^7.0.1",
24
+    "gulp-clean-css": "^4.3.0",
25
+    "gulp-load-plugins": "^2.0.3",
26
+    "gulp-rename": "^2.0.0",
27
+    "gulp-sass": "^4.1.0",
28
+    "js-cookie": "^2.2.1",
29
+    "lodash": "^4.17.19",
30
+    "monaco-editor": "^0.20.0",
31
+    "monaco-editor-webpack-plugin": "^1.9.0",
32
+    "node-sass": "^4.14.1",
33
+    "qs": "^6.9.4",
34
+    "quill": "^1.3.7",
35
+    "sass-loader": "^9.0.2",
36
+    "screenfull": "^4.2.1",
37
+    "sortablejs": "^1.10.2",
38
+    "svg-sprite-loader": "^5.0.0",
39
+    "vue": "^2.6.11",
40
+    "vue-cron": "^1.0.9",
41
+    "vue-i18n": "^8.18.2",
42
+    "vue-monaco": "^1.2.1",
43
+    "vue-router": "^3.3.4",
44
+    "vuex": "^3.5.1",
45
+    "vxe-table": "^2.9.19",
46
+    "xe-utils": "^2.7.10"
47
+  },
48
+  "devDependencies": {
49
+    "@vue/cli-plugin-babel": "^4.4.6",
50
+    "@vue/cli-plugin-eslint": "^4.4.6",
51
+    "@vue/cli-service": "^4.4.6",
52
+    "@vue/eslint-config-standard": "^5.1.2",
53
+    "babel-eslint": "^10.1.0",
54
+    "element-theme-chalk": "^2.13.2",
55
+    "eslint": "^7.5.0",
56
+    "eslint-plugin-import": "^2.22.0",
57
+    "eslint-plugin-node": "^11.1.0",
58
+    "eslint-plugin-promise": "^4.2.1",
59
+    "eslint-plugin-standard": "^4.0.1",
60
+    "eslint-plugin-vue": "^6.2.2",
61
+    "natives": "^1.1.6",
62
+    "vue-template-compiler": "^2.6.11"
63
+  },
64
+  "eslintConfig": {
65
+    "root": true,
66
+    "env": {
67
+      "node": true
68
+    },
69
+    "extends": [
70
+      "plugin:vue/essential",
71
+      "@vue/standard"
72
+    ],
73
+    "rules": {},
74
+    "parserOptions": {
75
+      "parser": "babel-eslint"
76
+    }
77
+  },
78
+  "postcss": {
79
+    "plugins": {
80
+      "autoprefixer": {}
81
+    }
82
+  },
83
+  "browserslist": [
84
+    "> 1%",
85
+    "last 2 versions",
86
+    "not ie <= 10"
87
+  ],
88
+  "element-theme": {
89
+    "config": "./src/element-ui/theme-variables.scss",
90
+    "out": "./src/element-ui/theme",
91
+    "minimize": true,
92
+    "browsers": [
93
+      "> 1%",
94
+      "last 2 versions",
95
+      "not ie <= 10"
96
+    ]
97
+  },
98
+  "engines": {
99
+    "node": ">= 8.11.1",
100
+    "npm": ">= 5.6.0"
101
+  },
102
+  "main": "index.js",
103
+  "license": "MIT"
104
+}

File diff suppressed because it is too large
+ 1 - 0
public/element-theme/blue/aui.css


二進制
public/element-theme/blue/fonts/element-icons.ttf


二進制
public/element-theme/blue/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/blue/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/brown/aui.css


二進制
public/element-theme/brown/fonts/element-icons.ttf


二進制
public/element-theme/brown/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/brown/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/cyan/aui.css


二進制
public/element-theme/cyan/fonts/element-icons.ttf


二進制
public/element-theme/cyan/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/cyan/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/default/aui.css


二進制
public/element-theme/default/fonts/element-icons.ttf


二進制
public/element-theme/default/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/default/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/gray/aui.css


二進制
public/element-theme/gray/fonts/element-icons.ttf


二進制
public/element-theme/gray/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/gray/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/green/aui.css


二進制
public/element-theme/green/fonts/element-icons.ttf


二進制
public/element-theme/green/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/green/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/indigo/aui.css


二進制
public/element-theme/indigo/fonts/element-icons.ttf


二進制
public/element-theme/indigo/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/indigo/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/orange/aui.css


二進制
public/element-theme/orange/fonts/element-icons.ttf


二進制
public/element-theme/orange/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/orange/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/pink/aui.css


二進制
public/element-theme/pink/fonts/element-icons.ttf


二進制
public/element-theme/pink/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/pink/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/purple/aui.css


二進制
public/element-theme/purple/fonts/element-icons.ttf


二進制
public/element-theme/purple/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/purple/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/red/aui.css


二進制
public/element-theme/red/fonts/element-icons.ttf


二進制
public/element-theme/red/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/red/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/turquoise/aui.css


二進制
public/element-theme/turquoise/fonts/element-icons.ttf


二進制
public/element-theme/turquoise/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/turquoise/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/yellow/aui.css


二進制
public/element-theme/yellow/fonts/element-icons.ttf


二進制
public/element-theme/yellow/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/yellow/index.css


二進制
public/favicon.ico


+ 66 - 0
public/index.html

@@ -0,0 +1,66 @@
1
+<!DOCTYPE html>
2
+<html>
3
+<head>
4
+  <meta charset="UTF-8">
5
+  <meta http-equiv="X-UA-Compatible" content="ie=edge">
6
+  <link rel="shortcut icon" href="<%= BASE_URL %>favicon.ico">
7
+  <!-- 站点配置 -->
8
+  <script>
9
+    window.SITE_CONFIG = {};
10
+    window.SITE_CONFIG['version'] = 'v2.8.0';
11
+    window.SITE_CONFIG['nodeEnv'] = '<%= process.env.VUE_APP_NODE_ENV %>';
12
+    window.SITE_CONFIG['apiURL'] = '';                      // api请求地址
13
+    window.SITE_CONFIG['storeState'] = {};                  // vuex本地储存初始化状态(用于不刷新页面的情况下,也能重置初始化项目中所有状态)
14
+    window.SITE_CONFIG['contentTabDefault'] = {             // 内容标签页默认属性对象
15
+      'name': '',        // 名称, 由 this.$route.name 自动赋值(默认,名称 === 路由名称 === 路由路径)
16
+      'params': {},      // 参数, 由 this.$route.params 自动赋值
17
+      'query': {},       // 查询参数, 由 this.$route.query 自动赋值
18
+      'menuId': '',      // 菜单id(用于选中侧边栏菜单,与this.$store.state.sidebarMenuActiveName进行匹配)
19
+      'title': '',       // 标题
20
+      'isTab': true,     // 是否通过tab展示内容?
21
+      'iframeURL': ''    // 是否通过iframe嵌套展示内容? (以http[s]://开头, 自动匹配)
22
+    };
23
+    window.SITE_CONFIG['menuList'] = [];                     // 左侧菜单列表(后台返回,未做处理)
24
+    window.SITE_CONFIG['permissions'] = [];                  // 页面按钮操作权限(后台返回,未做处理)
25
+    window.SITE_CONFIG['dynamicRoutes'] = [];                // 动态路由列表
26
+    window.SITE_CONFIG['dynamicMenuRoutes'] = [];            // 动态(菜单)路由列表
27
+    window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = false; // 动态(菜单)路由是否已经添加的状态标示(用于判断是否需要重新拉取数据并进行动态添加操作)
28
+  </script>
29
+
30
+  <!-- 开发环境 -->
31
+  <% if (process.env.VUE_APP_NODE_ENV === 'dev') { %>
32
+    <script>
33
+    window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/admin';
34
+    // WebSocket地址
35
+    window.SITE_CONFIG['socketURL'] ='ws://localhost:8080/admin/websocket';
36
+    </script>
37
+  <% } %>
38
+  <!-- 集成测试环境 -->
39
+  <% if (process.env.VUE_APP_NODE_ENV === 'prod:sit') { %>
40
+    <script>
41
+      window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/admin';
42
+      // WebSocket地址
43
+      window.SITE_CONFIG['socketURL'] ='ws://localhost:8080/admin/websocket';
44
+    </script>
45
+  <% } %>
46
+  <!-- 验收测试环境 -->
47
+  <% if (process.env.VUE_APP_NODE_ENV === 'prod:uat') { %>
48
+    <script>
49
+      window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/admin';
50
+      // WebSocket地址
51
+      window.SITE_CONFIG['socketURL'] ='ws://localhost:8080/admin/websocket';
52
+    </script>
53
+  <% } %>
54
+  <!-- 生产环境 -->
55
+  <% if (process.env.VUE_APP_NODE_ENV === 'prod') { %>
56
+    <script>
57
+      window.SITE_CONFIG['apiURL'] = 'http://localhost:8080/admin';
58
+      // WebSocket地址
59
+      window.SITE_CONFIG['socketURL'] ='ws://localhost:8080/admin/websocket';
60
+    </script>
61
+  <% } %>
62
+</head>
63
+<body>
64
+  <div id="app"></div>
65
+</body>
66
+</html>

+ 34 - 0
src/App.vue

@@ -0,0 +1,34 @@
1
+<template>
2
+  <transition name="el-fade-in-linear">
3
+    <router-view />
4
+  </transition>
5
+</template>
6
+
7
+<style>
8
+  .el-table th.gutter{
9
+    display: table-cell!important;
10
+  }
11
+</style>
12
+<script>
13
+import Cookies from 'js-cookie'
14
+import { messages } from '@/i18n'
15
+export default {
16
+  watch: {
17
+    '$i18n.locale': 'i18nHandle'
18
+  },
19
+  created () {
20
+    this.i18nHandle(this.$i18n.locale)
21
+  },
22
+  methods: {
23
+    i18nHandle (val, oldVal) {
24
+      Cookies.set('language', val)
25
+      document.querySelector('html').setAttribute('lang', val)
26
+      document.title = messages[val].brand.lg
27
+      // 非登录页面,切换语言刷新页面
28
+      if (this.$route.name !== 'login' && oldVal) {
29
+        window.location.reload()
30
+      }
31
+    }
32
+  }
33
+}
34
+</script>

二進制
src/assets/img/avatar.png


二進制
src/assets/img/login_bg.jpg


+ 11 - 0
src/assets/scss/aui.scss

@@ -0,0 +1,11 @@
1
+// 变量
2
+@import "~@/element-ui/theme-variables.scss";
3
+@import "./variables.scss";
4
+// 公共
5
+@import "./normalize.scss";
6
+@import "./common.scss";
7
+// 页面
8
+@import "./pages/login.scss";
9
+@import "./pages/404.scss";
10
+// 模块
11
+@import "./modules/home.scss";

+ 713 - 0
src/assets/scss/common.scss

@@ -0,0 +1,713 @@
1
+*,
2
+*:before,
3
+*:after {
4
+  box-sizing: border-box;
5
+}
6
+body {
7
+  font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
8
+  font-size: $--font-size-base;
9
+  line-height: $base--line-height;
10
+  color: $--color-text-primary;
11
+  background-color: #fff;
12
+}
13
+a {
14
+  color: mix(#fff, $--color-primary, 20%);
15
+  text-decoration: none;
16
+  &:focus,
17
+  &:hover {
18
+    color: $--color-primary;
19
+    text-decoration: underline;
20
+  }
21
+}
22
+img {
23
+  vertical-align: middle;
24
+}
25
+:focus,
26
+:hover {
27
+  outline: none;
28
+}
29
+
30
+/* Utils
31
+------------------------------ */
32
+[v-cloak] {
33
+  display: none;
34
+}
35
+.clearfix:before,
36
+.clearfix:after {
37
+  content: " ";
38
+  display: table;
39
+}
40
+.clearfix:after {
41
+  clear: both;
42
+}
43
+.fr {
44
+  float: right !important;
45
+}
46
+.fl {
47
+  float: left !important;
48
+}
49
+.fi {
50
+  float: initial !important;
51
+}
52
+.m-auto {
53
+  margin: auto !important;
54
+}
55
+.mt-auto {
56
+  margin-top: auto !important;
57
+}
58
+.mr-auto {
59
+  margin-right: auto !important;
60
+}
61
+.mb-auto {
62
+  margin-bottom: auto !important;
63
+}
64
+.ml-auto {
65
+  margin-left: auto !important;
66
+}
67
+.text-right {
68
+  text-align: right !important;
69
+}
70
+.text-center {
71
+  text-align: center !important;
72
+}
73
+.text-left {
74
+  text-align: left !important;
75
+}
76
+.w-percent-100 {
77
+  width: 100% !important;
78
+}
79
+.base-line-height {
80
+  line-height: $base--line-height !important;
81
+}
82
+
83
+
84
+/* Reset element-ui
85
+------------------------------ */
86
+.aui-wrapper {
87
+  .el-card + .el-card {
88
+    margin-top: 15px;
89
+  }
90
+  .el-input__prefix .el-input__icon {
91
+    display: inline-block;
92
+    vertical-align: middle;
93
+  }
94
+  .el-date-editor .el-range-separator {
95
+    width: 8%;
96
+  }
97
+  .el-table th {
98
+    color: $--color-text-primary;
99
+    background-color: $--background-color-base;
100
+  }
101
+  .el-pagination {
102
+    margin-top: 15px;
103
+    text-align: right;
104
+  }
105
+  .el-table__expand-icon {
106
+    display: inline-block;
107
+    width: 14px;
108
+    vertical-align: middle;
109
+    margin-right: 5px;
110
+  }
111
+}
112
+
113
+
114
+/* Common
115
+------------------------------ */
116
+// 图标
117
+.icon-svg {
118
+  width: 1em;
119
+  height: 1em;
120
+  fill: currentColor;
121
+  vertical-align: middle;
122
+  overflow: hidden;
123
+}
124
+// 卡片
125
+.aui-card--fill .el-card__header {
126
+  height: $content--card-header-height;
127
+  line-height: $content--card-header-height - 36px;
128
+}
129
+.aui-card__title {
130
+  font-size: 16px;
131
+}
132
+// 表单
133
+.aui-form__label-icon {
134
+  display: inline-block;
135
+  margin: 0 3px;
136
+  vertical-align: middle;
137
+  font-size: 18px;
138
+  color: $--color-text-secondary;
139
+}
140
+// 按钮
141
+.aui-button--dashed {
142
+  border-style: dashed;
143
+  &:focus,
144
+  &:hover {
145
+    background-color: transparent;
146
+  }
147
+  &-add {
148
+    > span > *[class*="el-icon-"],
149
+    > span > *[class*="icon"] {
150
+      vertical-align: middle;
151
+      font-size: 18px;
152
+      margin-right: 5px;
153
+    }
154
+  }
155
+}
156
+// 主题工具
157
+.aui-theme-tools {
158
+  position: fixed;
159
+  top: $navbar--height + $content--tabs-header-height + 15px;
160
+  right: -210px;
161
+  bottom: 0;
162
+  z-index: 1010;
163
+  width: 210px;
164
+  transition: right .3s;
165
+  &--open {
166
+    right: 0;
167
+  }
168
+  &__toggle {
169
+    position: absolute;
170
+    top: 80px;
171
+    left: -40px;
172
+    width: 40px;
173
+    padding: 10px 8px;
174
+    text-align: center;
175
+    font-size: 20px;
176
+    border-right: 0;
177
+    border-radius: $--border-radius-base 0 0 $--border-radius-base;
178
+    color: #fff;
179
+    background-color: $--color-primary;
180
+    cursor: pointer;
181
+  }
182
+  &__content {
183
+    height: 100%;
184
+    padding: 5px 20px 20px;
185
+    border: 1px solid $--border-color-lighter;
186
+    border-radius: $--border-radius-base 0 0 $--border-radius-base;
187
+    background-color: #fff;
188
+    .el-radio {
189
+      display: block;
190
+      margin-left: 0 !important;
191
+      line-height: 28px;
192
+    }
193
+  }
194
+  &__item + &__item {
195
+    margin-top: 15px;
196
+    border-top: 1px solid $--border-color-lighter;
197
+  }
198
+}
199
+
200
+
201
+/* Layout
202
+------------------------------ */
203
+.aui-wrapper {
204
+  position: relative;
205
+  padding-top: $navbar--height;
206
+}
207
+
208
+
209
+/* Sidebar fold
210
+------------------------------ */
211
+.aui-sidebar--fold {
212
+  .aui-navbar {
213
+    &__header,
214
+    &__brand {
215
+      width: $sidebar--width-fold;
216
+    }
217
+    &__brand {
218
+      &-lg {
219
+        display: none;
220
+      }
221
+      &-mini {
222
+        display: inline-block;
223
+      }
224
+    }
225
+    &__icon-menu--switch {
226
+      transform: rotateZ(180deg);
227
+    }
228
+  }
229
+  .aui-sidebar {
230
+    &__inner {
231
+      width: $sidebar--width-fold + 20px;
232
+    }
233
+    &,
234
+    &__menu {
235
+      width: $sidebar--width-fold;
236
+    }
237
+    &__menu > li > .el-submenu__title {
238
+      text-align: center;
239
+    }
240
+    &__menu-icon {
241
+      margin-right: 0;
242
+      font-size: 18px;
243
+    }
244
+  }
245
+  .aui-content {
246
+    &__wrapper {
247
+      margin-left: $sidebar--width-fold;
248
+    }
249
+    &--tabs > .el-tabs > .el-tabs__header {
250
+      left: $sidebar--width-fold;
251
+    }
252
+  }
253
+}
254
+
255
+
256
+/* Navbar
257
+------------------------------ */
258
+.aui-navbar {
259
+  position: fixed;
260
+  top: 0;
261
+  right: 0;
262
+  left: 0;
263
+  z-index: 1030;
264
+  display: flex;
265
+  align-items: stretch;
266
+  height: $navbar--height;
267
+  background-color: $--color-primary;
268
+  box-shadow: 0 1px 0 0 rgba(0, 0, 0, .05);
269
+  &--colorful {
270
+    .aui-navbar__body {
271
+      background-color: transparent;
272
+    }
273
+    .aui-navbar__menu {
274
+      > .el-menu-item,
275
+      > .el-submenu > .el-submenu__title {
276
+        color: #fff;
277
+        &:focus,
278
+        &:hover {
279
+          color: #fff;
280
+          background-color: mix(#000, $--color-primary, 15%);
281
+        }
282
+      }
283
+      > .el-menu-item.is-active,
284
+      > .el-submenu.is-active > .el-submenu__title {
285
+        color: #fff;
286
+        &:focus,
287
+        &:hover {
288
+          color: #fff;
289
+        }
290
+      }
291
+      .el-menu-item i,
292
+      .el-submenu__title i,
293
+      .el-menu-item svg,
294
+      .el-submenu__title svg,
295
+      .el-menu-item .el-dropdown {
296
+        color: #fff !important;
297
+      }
298
+      .el-button {
299
+        color: #fff;
300
+        background-color: transparent;
301
+      }
302
+    }
303
+    .aui-navbar__search {
304
+      &-txt {
305
+        .el-input__inner {
306
+          color: #fff;
307
+          border-color: #fff;
308
+          &::-webkit-input-placeholder {
309
+            color: #fff;
310
+          }
311
+        }
312
+      }
313
+    }
314
+  }
315
+  &__header {
316
+    position: relative;
317
+    width: $sidebar--width;
318
+    height: $navbar--height;
319
+    transition: width .3s;
320
+  }
321
+  &__brand {
322
+    display: flex;
323
+    justify-content: center;
324
+    align-items: center;
325
+    padding: 5px;
326
+    margin: 0;
327
+    width: 100%;
328
+    height: 100%;
329
+    font-size: 20px;
330
+    text-transform: uppercase;
331
+    white-space: nowrap;
332
+    color: #fff;
333
+    overflow: hidden;
334
+    transition: width .3s;
335
+    &-lg,
336
+    &-mini {
337
+      max-width: 100%;
338
+      color: #fff;
339
+      cursor: pointer;
340
+      &:focus,
341
+      &:hover {
342
+        color: #fff;
343
+        text-decoration: none;
344
+      }
345
+    }
346
+    &-mini {
347
+      display: none;
348
+    }
349
+  }
350
+  &__body {
351
+    position: relative;
352
+    display: flex;
353
+    flex: 1;
354
+    background-color: #fff;
355
+    overflow: hidden;
356
+  }
357
+  &__menu {
358
+    background-color: transparent;
359
+    border-bottom: 0 !important;
360
+    a:focus,
361
+    a:hover {
362
+      text-decoration: none;
363
+    }
364
+    .el-menu-item,
365
+    .el-submenu > .el-submenu__title {
366
+      height: $navbar--height;
367
+      padding: 0 15px;
368
+      line-height: $navbar--height;
369
+      border-color: transparent !important;
370
+    }
371
+    .el-menu-item.is-active,
372
+    .el-submenu.is-active > .el-submenu__title {
373
+      color: $--color-text-secondary;
374
+      &:focus,
375
+      &:hover {
376
+        color: $--color-text-primary;
377
+      }
378
+    }
379
+    .el-menu-item {
380
+      &:focus,
381
+      &:hover {
382
+        .aui-navbar__icon-menu {
383
+          color: $--color-text-primary;
384
+        }
385
+        .el-dropdown {
386
+          color: $--color-text-primary;
387
+          .el-icon-arrow-down {
388
+            transform: rotateZ(180deg);
389
+          }
390
+        }
391
+      }
392
+      * {
393
+        vertical-align: initial;
394
+      }
395
+      .aui-navbar__icon-menu {
396
+        vertical-align: middle;
397
+        font-size: 16px;
398
+      }
399
+      .el-dropdown {
400
+        color: $--color-text-secondary;
401
+        .el-icon-arrow-down {
402
+          width: auto;
403
+          font-size: 12px;
404
+          margin: 0 0 0 5px;
405
+          transition: transform .3s;
406
+        }
407
+      }
408
+    }
409
+    .el-badge {
410
+      display: inline;
411
+      z-index: 2;
412
+      &__content {
413
+        line-height: 16px;
414
+      }
415
+    }
416
+  }
417
+  &__search {
418
+    > *[class*="el-icon-"],
419
+    > *[class*="icon"] {
420
+      display: inline-block;
421
+      vertical-align: middle;
422
+    }
423
+    &-txt {
424
+      width: 0;
425
+      transition: width .3s, margin-left .3s;
426
+      &.is-show {
427
+        width: 210px;
428
+        margin-left: 8px;
429
+      }
430
+      .el-input__inner {
431
+        height: $navbar--height - 20px;
432
+        padding: 0;
433
+        line-height: $navbar--height - 20px;
434
+        border-color: $--color-text-primary;
435
+        border-top: 0;
436
+        border-right: 0;
437
+        border-left: 0;
438
+        border-radius: 0;
439
+        background: transparent;
440
+      }
441
+    }
442
+  }
443
+  &__avatar {
444
+    .el-dropdown-link {
445
+      > img {
446
+        width: 36px;
447
+        height: auto;
448
+        margin-right: 5px;
449
+        border-radius: 100%;
450
+        vertical-align: middle;
451
+      }
452
+    }
453
+  }
454
+}
455
+
456
+
457
+/* Sidebar
458
+------------------------------ */
459
+.aui-sidebar {
460
+  position: fixed;
461
+  top: $navbar--height;
462
+  left: 0;
463
+  bottom: 0;
464
+  z-index: 1020;
465
+  width: $sidebar--width;
466
+  background-color: #fff;
467
+  box-shadow: 1px 0 2px 0 rgba(0, 0, 0, .05);
468
+  overflow: hidden;
469
+  transition: width .3s;
470
+  &--dark {
471
+    background-color: $sidebar--background-color-dark;
472
+    .aui-sidebar__menu,
473
+    > .el-menu--popup {
474
+      background-color: $sidebar--background-color-dark;
475
+      .el-menu-item,
476
+      .el-submenu > .el-submenu__title {
477
+        color: $sidebar--text-color-dark;
478
+        &:focus,
479
+        &:hover {
480
+          color: mix(#fff, $sidebar--text-color-dark, 50%);
481
+          background-color: mix(#fff, $sidebar--background-color-dark, 2.5%);
482
+        }
483
+      }
484
+      .el-menu,
485
+      .el-submenu.is-opened {
486
+        background-color: mix(#000, $sidebar--background-color-dark, 15%);
487
+      }
488
+      .el-menu-item.is-active,
489
+      .el-submenu.is-active > .el-submenu__title {
490
+        color: mix(#fff, $sidebar--text-color-dark, 80%);
491
+      }
492
+    }
493
+  }
494
+  &__inner {
495
+    position: relative;
496
+    z-index: 1;
497
+    width: $sidebar--width + 20px;
498
+    height: 100%;
499
+    padding-bottom: 15px;
500
+    overflow-x: hidden;
501
+    overflow-y: scroll;
502
+    transition: width .3s;
503
+  }
504
+  &__menu {
505
+    width: $sidebar--width;
506
+    border-right: 0;
507
+    transition: width .3s;
508
+    .el-menu-item,
509
+    .el-submenu__title {
510
+      height: $sidebar--menu-item-height;
511
+      line-height: $sidebar--menu-item-height;
512
+    }
513
+  }
514
+  &__menu-icon {
515
+    display: inline-block;
516
+    vertical-align: middle;
517
+    width: 24px !important;
518
+    margin-right: 5px;
519
+    text-align: center;
520
+    font-size: 16px;
521
+    color: inherit !important;
522
+    transition: font-size .3s;
523
+  }
524
+}
525
+
526
+
527
+/* Content
528
+------------------------------ */
529
+.aui-content {
530
+  position: relative;
531
+  padding: $content--padding;
532
+  min-height: calc(100vh - #{$navbar--height});
533
+  &__wrapper {
534
+    position: relative;
535
+    margin-left: $sidebar--width;
536
+    min-height: calc(100vh - #{$navbar--height});
537
+    background-color: $content--background-color;
538
+    transition: margin-left .3s;
539
+  }
540
+  > .aui-card--fill > .el-card__body {
541
+    min-height: calc(#{$content--fill-height} - 2px);
542
+  }
543
+  > .aui-card--fill > .el-card__header + .el-card__body {
544
+    min-height: calc(#{$content--fill-height} - #{$content--card-header-height} - 2px);
545
+  }
546
+  &--tabs {
547
+    padding: $content--tabs-header-height 0 0;
548
+  }
549
+  &--tabs-tools {
550
+    position: fixed;
551
+    top: $navbar--height;
552
+    right: 0;
553
+    z-index: 931;
554
+    min-width: $content--tabs-header-height;
555
+    height: $content--tabs-header-height;
556
+    padding: 0 12px;
557
+    text-align: center;
558
+    font-size: 16px;
559
+    line-height: $content--tabs-header-height;
560
+    background-color: $--background-color-base;
561
+    cursor: pointer;
562
+  }
563
+  &--tabs-icon-nav {
564
+    display: inline-block;
565
+    vertical-align: middle;
566
+    font-size: 16px;
567
+  }
568
+  > .el-tabs {
569
+    > .el-tabs__header {
570
+      position: fixed;
571
+      top: $navbar--height;
572
+      left: $sidebar--width;
573
+      right: 0;
574
+      z-index: 930;
575
+      padding: 0 55px 0 15px;
576
+      margin: 0;
577
+      box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05);
578
+      background-color: #fff;
579
+      transition: left .3s;
580
+      > .el-tabs__nav-wrap {
581
+        margin-bottom: 0;
582
+        &:after {
583
+          display: none;
584
+        }
585
+        > .el-tabs__nav-next,
586
+        > .el-tabs__nav-prev {
587
+          line-height: $content--tabs-header-height;
588
+        }
589
+        > .el-tabs__nav-scroll > .el-tabs__nav {
590
+          & > .el-tabs__active-bar {
591
+            display: none;
592
+          }
593
+          & > .el-tabs__item {
594
+            height: $content--tabs-header-height;
595
+            padding: 0 15px;
596
+            line-height: $content--tabs-header-height;
597
+            border: 0;
598
+            color: $--color-text-regular;
599
+            &:focus,
600
+            &:hover,
601
+            &.is-active {
602
+              color: $--color-text-primary;
603
+              background-color: $--background-color-base;
604
+              &:after {
605
+                display: block;
606
+              }
607
+              > .el-icon-close {
608
+                color: $--color-text-primary;
609
+              }
610
+            }
611
+            &:after {
612
+              display: none;
613
+              position: absolute;
614
+              bottom: 0;
615
+              left: 0;
616
+              content: '';
617
+              width: 100%;
618
+              height: 2px;
619
+              background-color: $--color-primary;
620
+            }
621
+            + .el-tabs__item {
622
+              margin-left: 1px;
623
+            }
624
+            > .el-icon-close {
625
+              width: 14px;
626
+              margin-left: 15px;
627
+              color: $--color-text-secondary;
628
+            }
629
+            > i.icon {
630
+              display: inline-block;
631
+              vertical-align: middle;
632
+              font-size: 18px;
633
+            }
634
+          }
635
+        }
636
+      }
637
+    }
638
+    > .el-tabs__content {
639
+      padding: $content--padding;
640
+      .el-loading-mask {
641
+        z-index: 830;
642
+      }
643
+      > .el-tab-pane {
644
+        min-height: calc(#{$content--fill-height-tabs});
645
+        > .aui-card--fill > .el-card__body {
646
+          min-height: calc(#{$content--fill-height-tabs} - 2px);
647
+        }
648
+        > .aui-card--fill > .el-card__header + .el-card__body {
649
+          min-height: calc(#{$content--fill-height-tabs} - #{$content--card-header-height} - 2px);
650
+        }
651
+        &.is-iframe {
652
+          height: calc(#{$content--fill-height-tabs} + #{$content--padding * 2});
653
+          margin: -$content--padding;
654
+          min-height: auto;
655
+          > .aui-card--fill {
656
+            background-color: transparent;
657
+          }
658
+          > .aui-card--fill > .el-card__header {
659
+            background-color: #fff;
660
+          }
661
+          > .aui-card--fill > .el-card__body {
662
+            height: calc(#{$content--fill-height-tabs} - 2px);
663
+            margin: $content--padding;
664
+            min-height: auto;
665
+            border: $--border-base;
666
+            border-color: $--border-color-lighter;
667
+            border-radius: $--border-radius-base;
668
+            background-color: #fff;
669
+          }
670
+          > .aui-card--fill > .el-card__header + .el-card__body {
671
+            height: calc(#{$content--fill-height-tabs} - #{$content--card-header-height} - 2px);
672
+          }
673
+        }
674
+      }
675
+    }
676
+  }
677
+  // quill富文本编辑器
678
+  .ql-toolbar {
679
+    line-height: 20px;
680
+    &.ql-snow {
681
+      border-color: $--border-color-base;
682
+    }
683
+    .ql-formats {
684
+      margin: 0 5px;
685
+    }
686
+  }
687
+  .ql-container {
688
+    height: 150px;
689
+    &.ql-snow {
690
+      border-color: $--border-color-base;
691
+    }
692
+  }
693
+}
694
+
695
+
696
+/* Page
697
+------------------------------ */
698
+*[class*="aui-page__"] {
699
+  padding-top: 0;
700
+  .aui-content {
701
+    min-height: auto;
702
+    &__wrapper {
703
+      min-height: 100vh;
704
+      margin-left: 0;
705
+    }
706
+    > .aui-card--fill > .el-card__body {
707
+      min-height: calc(100vh - #{$content--padding * 2} - 2px);
708
+    }
709
+    > .aui-card--fill > .el-card__header + .el-card__body {
710
+      min-height: calc(100vh - #{$content--padding * 2} - #{$content--card-header-height} - 2px);
711
+    }
712
+  }
713
+}

+ 15 - 0
src/assets/scss/modules/home.scss

@@ -0,0 +1,15 @@
1
+.mod-home {
2
+  table {
3
+    width: 100%;
4
+    border: 1px solid $--border-color-lighter;
5
+    border-collapse: collapse;
6
+    th,
7
+    td {
8
+      padding: 12px 10px;
9
+      border: 1px solid $--border-color-lighter;
10
+    }
11
+    th {
12
+      width: 30%;
13
+    }
14
+  }
15
+}

+ 447 - 0
src/assets/scss/normalize.scss

@@ -0,0 +1,447 @@
1
+/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
2
+
3
+/* Document
4
+   ========================================================================== */
5
+
6
+/**
7
+ * 1. Correct the line height in all browsers.
8
+ * 2. Prevent adjustments of font size after orientation changes in
9
+ *    IE on Windows Phone and in iOS.
10
+ */
11
+
12
+ html {
13
+  line-height: 1.15; /* 1 */
14
+  -ms-text-size-adjust: 100%; /* 2 */
15
+  -webkit-text-size-adjust: 100%; /* 2 */
16
+}
17
+
18
+/* Sections
19
+   ========================================================================== */
20
+
21
+/**
22
+ * Remove the margin in all browsers (opinionated).
23
+ */
24
+
25
+body {
26
+  margin: 0;
27
+}
28
+
29
+/**
30
+ * Add the correct display in IE 9-.
31
+ */
32
+
33
+article,
34
+aside,
35
+footer,
36
+header,
37
+nav,
38
+section {
39
+  display: block;
40
+}
41
+
42
+/**
43
+ * Correct the font size and margin on `h1` elements within `section` and
44
+ * `article` contexts in Chrome, Firefox, and Safari.
45
+ */
46
+
47
+h1 {
48
+  font-size: 2em;
49
+  margin: 0.67em 0;
50
+}
51
+
52
+/* Grouping content
53
+   ========================================================================== */
54
+
55
+/**
56
+ * Add the correct display in IE 9-.
57
+ * 1. Add the correct display in IE.
58
+ */
59
+
60
+figcaption,
61
+figure,
62
+main { /* 1 */
63
+  display: block;
64
+}
65
+
66
+/**
67
+ * Add the correct margin in IE 8.
68
+ */
69
+
70
+figure {
71
+  margin: 1em 40px;
72
+}
73
+
74
+/**
75
+ * 1. Add the correct box sizing in Firefox.
76
+ * 2. Show the overflow in Edge and IE.
77
+ */
78
+
79
+hr {
80
+  box-sizing: content-box; /* 1 */
81
+  height: 0; /* 1 */
82
+  overflow: visible; /* 2 */
83
+}
84
+
85
+/**
86
+ * 1. Correct the inheritance and scaling of font size in all browsers.
87
+ * 2. Correct the odd `em` font sizing in all browsers.
88
+ */
89
+
90
+pre {
91
+  font-family: monospace, monospace; /* 1 */
92
+  font-size: 1em; /* 2 */
93
+}
94
+
95
+/* Text-level semantics
96
+   ========================================================================== */
97
+
98
+/**
99
+ * 1. Remove the gray background on active links in IE 10.
100
+ * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
101
+ */
102
+
103
+a {
104
+  background-color: transparent; /* 1 */
105
+  -webkit-text-decoration-skip: objects; /* 2 */
106
+}
107
+
108
+/**
109
+ * 1. Remove the bottom border in Chrome 57- and Firefox 39-.
110
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
111
+ */
112
+
113
+abbr[title] {
114
+  border-bottom: none; /* 1 */
115
+  text-decoration: underline; /* 2 */
116
+  text-decoration: underline dotted; /* 2 */
117
+}
118
+
119
+/**
120
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
121
+ */
122
+
123
+b,
124
+strong {
125
+  font-weight: inherit;
126
+}
127
+
128
+/**
129
+ * Add the correct font weight in Chrome, Edge, and Safari.
130
+ */
131
+
132
+b,
133
+strong {
134
+  font-weight: bolder;
135
+}
136
+
137
+/**
138
+ * 1. Correct the inheritance and scaling of font size in all browsers.
139
+ * 2. Correct the odd `em` font sizing in all browsers.
140
+ */
141
+
142
+code,
143
+kbd,
144
+samp {
145
+  font-family: monospace, monospace; /* 1 */
146
+  font-size: 1em; /* 2 */
147
+}
148
+
149
+/**
150
+ * Add the correct font style in Android 4.3-.
151
+ */
152
+
153
+dfn {
154
+  font-style: italic;
155
+}
156
+
157
+/**
158
+ * Add the correct background and color in IE 9-.
159
+ */
160
+
161
+mark {
162
+  background-color: #ff0;
163
+  color: #000;
164
+}
165
+
166
+/**
167
+ * Add the correct font size in all browsers.
168
+ */
169
+
170
+small {
171
+  font-size: 80%;
172
+}
173
+
174
+/**
175
+ * Prevent `sub` and `sup` elements from affecting the line height in
176
+ * all browsers.
177
+ */
178
+
179
+sub,
180
+sup {
181
+  font-size: 75%;
182
+  line-height: 0;
183
+  position: relative;
184
+  vertical-align: baseline;
185
+}
186
+
187
+sub {
188
+  bottom: -0.25em;
189
+}
190
+
191
+sup {
192
+  top: -0.5em;
193
+}
194
+
195
+/* Embedded content
196
+   ========================================================================== */
197
+
198
+/**
199
+ * Add the correct display in IE 9-.
200
+ */
201
+
202
+audio,
203
+video {
204
+  display: inline-block;
205
+}
206
+
207
+/**
208
+ * Add the correct display in iOS 4-7.
209
+ */
210
+
211
+audio:not([controls]) {
212
+  display: none;
213
+  height: 0;
214
+}
215
+
216
+/**
217
+ * Remove the border on images inside links in IE 10-.
218
+ */
219
+
220
+img {
221
+  border-style: none;
222
+}
223
+
224
+/**
225
+ * Hide the overflow in IE.
226
+ */
227
+
228
+svg:not(:root) {
229
+  overflow: hidden;
230
+}
231
+
232
+/* Forms
233
+   ========================================================================== */
234
+
235
+/**
236
+ * 1. Change the font styles in all browsers (opinionated).
237
+ * 2. Remove the margin in Firefox and Safari.
238
+ */
239
+
240
+button,
241
+input,
242
+optgroup,
243
+select,
244
+textarea {
245
+  font-family: sans-serif; /* 1 */
246
+  font-size: 100%; /* 1 */
247
+  line-height: 1.15; /* 1 */
248
+  margin: 0; /* 2 */
249
+}
250
+
251
+/**
252
+ * Show the overflow in IE.
253
+ * 1. Show the overflow in Edge.
254
+ */
255
+
256
+button,
257
+input { /* 1 */
258
+  overflow: visible;
259
+}
260
+
261
+/**
262
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
263
+ * 1. Remove the inheritance of text transform in Firefox.
264
+ */
265
+
266
+button,
267
+select { /* 1 */
268
+  text-transform: none;
269
+}
270
+
271
+/**
272
+ * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
273
+ *    controls in Android 4.
274
+ * 2. Correct the inability to style clickable types in iOS and Safari.
275
+ */
276
+
277
+button,
278
+html [type="button"], /* 1 */
279
+[type="reset"],
280
+[type="submit"] {
281
+  -webkit-appearance: button; /* 2 */
282
+}
283
+
284
+/**
285
+ * Remove the inner border and padding in Firefox.
286
+ */
287
+
288
+button::-moz-focus-inner,
289
+[type="button"]::-moz-focus-inner,
290
+[type="reset"]::-moz-focus-inner,
291
+[type="submit"]::-moz-focus-inner {
292
+  border-style: none;
293
+  padding: 0;
294
+}
295
+
296
+/**
297
+ * Restore the focus styles unset by the previous rule.
298
+ */
299
+
300
+button:-moz-focusring,
301
+[type="button"]:-moz-focusring,
302
+[type="reset"]:-moz-focusring,
303
+[type="submit"]:-moz-focusring {
304
+  outline: 1px dotted ButtonText;
305
+}
306
+
307
+/**
308
+ * Correct the padding in Firefox.
309
+ */
310
+
311
+fieldset {
312
+  padding: 0.35em 0.75em 0.625em;
313
+}
314
+
315
+/**
316
+ * 1. Correct the text wrapping in Edge and IE.
317
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
318
+ * 3. Remove the padding so developers are not caught out when they zero out
319
+ *    `fieldset` elements in all browsers.
320
+ */
321
+
322
+legend {
323
+  box-sizing: border-box; /* 1 */
324
+  color: inherit; /* 2 */
325
+  display: table; /* 1 */
326
+  max-width: 100%; /* 1 */
327
+  padding: 0; /* 3 */
328
+  white-space: normal; /* 1 */
329
+}
330
+
331
+/**
332
+ * 1. Add the correct display in IE 9-.
333
+ * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
334
+ */
335
+
336
+progress {
337
+  display: inline-block; /* 1 */
338
+  vertical-align: baseline; /* 2 */
339
+}
340
+
341
+/**
342
+ * Remove the default vertical scrollbar in IE.
343
+ */
344
+
345
+textarea {
346
+  overflow: auto;
347
+}
348
+
349
+/**
350
+ * 1. Add the correct box sizing in IE 10-.
351
+ * 2. Remove the padding in IE 10-.
352
+ */
353
+
354
+[type="checkbox"],
355
+[type="radio"] {
356
+  box-sizing: border-box; /* 1 */
357
+  padding: 0; /* 2 */
358
+}
359
+
360
+/**
361
+ * Correct the cursor style of increment and decrement buttons in Chrome.
362
+ */
363
+
364
+[type="number"]::-webkit-inner-spin-button,
365
+[type="number"]::-webkit-outer-spin-button {
366
+  height: auto;
367
+}
368
+
369
+/**
370
+ * 1. Correct the odd appearance in Chrome and Safari.
371
+ * 2. Correct the outline style in Safari.
372
+ */
373
+
374
+[type="search"] {
375
+  -webkit-appearance: textfield; /* 1 */
376
+  outline-offset: -2px; /* 2 */
377
+}
378
+
379
+/**
380
+ * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
381
+ */
382
+
383
+[type="search"]::-webkit-search-cancel-button,
384
+[type="search"]::-webkit-search-decoration {
385
+  -webkit-appearance: none;
386
+}
387
+
388
+/**
389
+ * 1. Correct the inability to style clickable types in iOS and Safari.
390
+ * 2. Change font properties to `inherit` in Safari.
391
+ */
392
+
393
+::-webkit-file-upload-button {
394
+  -webkit-appearance: button; /* 1 */
395
+  font: inherit; /* 2 */
396
+}
397
+
398
+/* Interactive
399
+   ========================================================================== */
400
+
401
+/*
402
+ * Add the correct display in IE 9-.
403
+ * 1. Add the correct display in Edge, IE, and Firefox.
404
+ */
405
+
406
+details, /* 1 */
407
+menu {
408
+  display: block;
409
+}
410
+
411
+/*
412
+ * Add the correct display in all browsers.
413
+ */
414
+
415
+summary {
416
+  display: list-item;
417
+}
418
+
419
+/* Scripting
420
+   ========================================================================== */
421
+
422
+/**
423
+ * Add the correct display in IE 9-.
424
+ */
425
+
426
+canvas {
427
+  display: inline-block;
428
+}
429
+
430
+/**
431
+ * Add the correct display in IE.
432
+ */
433
+
434
+template {
435
+  display: none;
436
+}
437
+
438
+/* Hidden
439
+   ========================================================================== */
440
+
441
+/**
442
+ * Add the correct display in IE 10-.
443
+ */
444
+
445
+[hidden] {
446
+  display: none;
447
+}

+ 48 - 0
src/assets/scss/pages/404.scss

@@ -0,0 +1,48 @@
1
+.aui-page__not-found {
2
+  .aui-content {
3
+    display: flex;
4
+    flex-flow: column wrap;
5
+    align-items: center;
6
+    min-height: 100vh;
7
+    padding: 15% 50px 50px;
8
+    text-align: center;
9
+    &__wrapper {
10
+      height: 100vh;
11
+      background-color: transparent;
12
+      overflow-x: hidden;
13
+      overflow-y: auto;
14
+    }
15
+  }
16
+  .title {
17
+    margin: 0 0 15px;
18
+    font-size: 10em;
19
+    font-weight: 400;
20
+    color: $--color-text-regular;
21
+  }
22
+  .desc {
23
+    margin: 0 0 20px;
24
+    font-size: 26px;
25
+    color: $--color-text-secondary;
26
+    > em {
27
+      margin: 0 5px;
28
+      font-style: normal;
29
+      color: $--color-warning;
30
+    }
31
+  }
32
+  .btn-bar .el-button {
33
+    margin: 0 15px;
34
+  }
35
+}
36
+@media (max-width: 767px) {
37
+  .aui-page__not-found {
38
+    .title {
39
+      font-size: 8em;
40
+    }
41
+    .desc {
42
+      font-size: 20px;
43
+    }
44
+    .btn-bar .el-button {
45
+      margin: 0 7.5px;
46
+    }
47
+  }
48
+}

+ 220 - 0
src/assets/scss/pages/login.scss

@@ -0,0 +1,220 @@
1
+.aui-page__login {
2
+  &::before,
3
+  &::after {
4
+    position: absolute;
5
+    top: 0;
6
+    right: 0;
7
+    bottom: 0;
8
+    left: 0;
9
+    z-index: -1;
10
+    content: "";
11
+  }
12
+  &::before {
13
+    background-image: url(~@/assets/img/login_bg.jpg);
14
+    background-size: cover;
15
+  }
16
+  &::after {
17
+    background-color: rgba(38, 50, 56, .4);
18
+  }
19
+  .aui-content {
20
+    display: flex;
21
+    flex-flow: column wrap;
22
+    justify-content: center;
23
+    align-items: center;
24
+    min-height: 100vh;
25
+    padding: 50px 20px 150px;
26
+    text-align: center;
27
+    &__wrapper {
28
+      height: 100vh;
29
+      background-color: transparent;
30
+      overflow-x: hidden;
31
+      overflow-y: auto;
32
+    }
33
+  }
34
+  .login-header {
35
+    padding: 20px;
36
+    color: #fff;
37
+    .login-brand {
38
+      margin: 0 0 15px;
39
+      font-size: 40px;
40
+      font-weight: 400;
41
+      letter-spacing: 2px;
42
+      text-transform: uppercase;
43
+    }
44
+    .login-intro {
45
+      padding: 0;
46
+      margin: 0;
47
+      list-style: none;
48
+      > li {
49
+        font-size: 16px;
50
+        line-height: 1.5;
51
+        color: rgba(255, 255, 255, .6);
52
+        & + li {
53
+          margin-top: 5px;
54
+        }
55
+      }
56
+    }
57
+  }
58
+  .login-body,
59
+  .login-footer {
60
+    width: 460px;
61
+  }
62
+  .login-body {
63
+    padding: 20px 30px;
64
+    background-color: #fff;
65
+    .login-title {
66
+      font-size: 18px;
67
+      font-weight: 400;
68
+    }
69
+    .el-input__prefix .el-input__icon {
70
+      font-size: 16px;
71
+    }
72
+    .login-captcha {
73
+      height: $--input-height;
74
+      line-height: $--input-height -2px;
75
+      > img {
76
+        max-width: 100%;
77
+        cursor: pointer;
78
+      }
79
+    }
80
+    .login-shortcut {
81
+      margin-bottom: 20px;
82
+      &__title {
83
+        position: relative;
84
+        margin: 0 0 15px;
85
+        font-weight: 400;
86
+        
87
+        &::before {
88
+          position: absolute;
89
+          top: 50%;
90
+          right: 0;
91
+          left: 0;
92
+          z-index: 1;
93
+          content: "";
94
+          height: 1px;
95
+          margin-top: -.5px;
96
+          background-color: $--border-color-base;
97
+          overflow: hidden;
98
+        }
99
+        > span {
100
+          position: relative;
101
+          z-index: 2;
102
+          padding: 0 20px;
103
+          color: rgba(0, 0, 0, .3);
104
+          background-color: #fff;
105
+        }
106
+      }
107
+      &__list {
108
+        padding: 0;
109
+        margin: 0;
110
+        list-style: none;
111
+        font-size: 0;
112
+        > li {
113
+          display: inline-block;
114
+          vertical-align: middle;
115
+          margin: 0 10px;
116
+          font-size: 28px;
117
+        }
118
+      }
119
+    }
120
+    .login-guide {
121
+      color: rgba(0, 0, 0, .3);
122
+    }
123
+  }
124
+  .login-footer {
125
+    position: absolute;
126
+    bottom: 0;
127
+    padding: 20px;
128
+    color: rgba(255, 255, 255, .6);
129
+    p {
130
+      margin: 10px 0;
131
+    }
132
+    a {
133
+      padding: 0 5px;
134
+      color: rgba(255, 255, 255, .6);
135
+      &:focus,
136
+      &:hover {
137
+        color: #fff;
138
+      }
139
+    }
140
+  }
141
+  // 右侧垂直风格
142
+  &--right-vertical {
143
+    .aui-content {
144
+      flex-flow: row nowrap;
145
+      justify-content: flex-start;
146
+      align-items: stretch;
147
+      padding: 0;
148
+    }
149
+    .login-header {
150
+      flex: 1;
151
+      display: flex;
152
+      flex-flow: column wrap;
153
+      justify-content: center;
154
+      padding: 30px 120px;
155
+      text-align: left;
156
+    }
157
+    .login-body {
158
+      position: relative;
159
+      display: flex;
160
+      flex-flow: column wrap;
161
+      justify-content: center;
162
+      padding: 120px 30px 150px;
163
+      text-align: center;
164
+      .login-guide {
165
+        margin-top: 0;
166
+      }
167
+    }
168
+    .login-footer {
169
+      right: 0;
170
+      color: $--color-text-regular;
171
+      a {
172
+        color: $--color-text-regular;
173
+        &:focus,
174
+        &:hover {
175
+          color: $--color-primary;
176
+        }
177
+      }
178
+    }
179
+  }
180
+}
181
+@media (max-width: 991px) {
182
+  .aui-page__login {
183
+    &--right-vertical {
184
+      .login-header {
185
+        padding: 30px;
186
+      }
187
+    }
188
+  }
189
+}
190
+@media (max-width: 767px) {
191
+  .aui-page__login {
192
+    &--right-vertical {
193
+      .login-header {
194
+        .login-brand,
195
+        .login-intro {
196
+          display: none;
197
+        }
198
+      }
199
+    }
200
+  }
201
+}
202
+@media (max-width: 575px) {
203
+  .aui-page__login {
204
+    .login-body,
205
+    .login-footer {
206
+      width: 100%;
207
+    }
208
+    .login-captcha {
209
+      text-align: left;
210
+      > img {
211
+        width: 136px;
212
+      }
213
+    }
214
+    &--right-vertical {
215
+      .login-header {
216
+        display: none;
217
+      }
218
+    }
219
+  }
220
+}

+ 22 - 0
src/assets/scss/variables.scss

@@ -0,0 +1,22 @@
1
+// Base
2
+$base--line-height: 1.15;
3
+
4
+// Navbar
5
+$navbar--height: 50px;
6
+
7
+// Sidebar
8
+$sidebar--width: 230px;
9
+$sidebar--width-fold: 64px;
10
+$sidebar--background-color-dark: #263238;
11
+$sidebar--text-color-dark: #8a979e;
12
+$sidebar--menu-item-height: 48px;
13
+
14
+// Content
15
+$content--padding: 15px; 
16
+$content--background-color: #f1f4f5;
17
+$content--card-header-height: 60px;
18
+$content--tabs-header-height: 38px;
19
+// Content, 填充整屏高度(非tabs状态) = 整屏高度 - 导航条高度 - aui-content上下内边距高度
20
+$content--fill-height: calc(100vh - #{$navbar--height} - #{$content--padding * 2});
21
+// Content, 填充整屏高度(是tabs状态) = 整屏高度 - 导航条高度 - tabs组件header高度 - tabs组件content上下内边距高度
22
+$content--fill-height-tabs: calc(100vh - #{$navbar--height} - #{$content--tabs-header-height} - #{$content--padding * 2});

+ 0 - 0
src/components/.gitkeep


+ 7 - 0
src/components/ren-dept-tree/index.js

@@ -0,0 +1,7 @@
1
+import RenDeptTree from './src/ren-dept-tree'
2
+
3
+RenDeptTree.install = function (Vue) {
4
+  Vue.component(RenDeptTree.name, RenDeptTree)
5
+}
6
+
7
+export default RenDeptTree

+ 118 - 0
src/components/ren-dept-tree/src/ren-dept-tree.vue

@@ -0,0 +1,118 @@
1
+<template>
2
+  <div>
3
+  <el-input v-model="showDeptName" :placeholder="placeholder" @focus="deptDialog">
4
+    <el-button slot="append" icon="el-icon-search" @click="deptDialog"></el-button>
5
+  </el-input>
6
+  <el-input :value="value" style="display: none"></el-input>
7
+  <el-dialog :visible.sync="visibleDept" width="30%" :modal="false" :title="placeholder" :close-on-click-modal="false" :close-on-press-escape="false">
8
+    <el-form size="mini" :inline="true">
9
+      <el-form-item :label="$t('keyword')">
10
+        <el-input v-model="filterText"></el-input>
11
+      </el-form-item>
12
+      <el-form-item>
13
+        <el-button type="default">{{ $t('query') }}</el-button>
14
+      </el-form-item>
15
+    </el-form>
16
+    <el-tree
17
+      class="filter-tree"
18
+      :data="deptList"
19
+      :default-expanded-keys="expandedKeys"
20
+      :props="{ label: 'name', children: 'children' }"
21
+      :expand-on-click-node="false"
22
+      :filter-node-method="filterNode"
23
+      :highlight-current="true"
24
+      node-key="id"
25
+      ref="tree">
26
+    </el-tree>
27
+    <template slot="footer">
28
+      <el-button type="default" @click="cancelHandle()" size="mini">{{ $t('cancel') }}</el-button>
29
+      <el-button v-if="query" type="info" @click="clearHandle()" size="mini">{{ $t('clear') }}</el-button>
30
+      <el-button type="primary" @click="commitHandle()" size="mini">{{ $t('confirm') }}</el-button>
31
+    </template>
32
+  </el-dialog>
33
+  </div>
34
+</template>
35
+<script>
36
+export default {
37
+  name: 'RenDeptTree',
38
+  data () {
39
+    return {
40
+      filterText: '',
41
+      visibleDept: false,
42
+      deptList: [],
43
+      showDeptName: '',
44
+      expandedKeys: null,
45
+      defaultProps: {
46
+        children: 'children',
47
+        label: 'label'
48
+      }
49
+    }
50
+  },
51
+  props: {
52
+    value: [Number, String],
53
+    deptName: String,
54
+    query: Boolean,
55
+    placeholder: String
56
+  },
57
+  watch: {
58
+    filterText (val) {
59
+      this.$refs.tree.filter(val)
60
+    },
61
+    deptName (val) {
62
+      this.showDeptName = val
63
+    }
64
+  },
65
+  methods: {
66
+    deptDialog () {
67
+      this.expandedKeys = null
68
+      if (this.$refs.tree) {
69
+        this.$refs.tree.setCurrentKey(null)
70
+      }
71
+      this.visibleDept = true
72
+      this.getDeptList(this.value)
73
+    },
74
+    filterNode (value, data) {
75
+      if (!value) return true
76
+      return data.name.indexOf(value) !== -1
77
+    },
78
+    getDeptList (id) {
79
+      return this.$http.get('/sys/dept/list').then(({ data: res }) => {
80
+        if (res.code !== 0) {
81
+          return this.$message.error(res.msg)
82
+        }
83
+        this.deptList = res.data
84
+        this.$nextTick(() => {
85
+          this.$refs.tree.setCurrentKey(id)
86
+          this.expandedKeys = [id]
87
+        })
88
+      }).catch(() => {})
89
+    },
90
+    cancelHandle () {
91
+      this.visibleDept = false
92
+      this.deptList = []
93
+      this.filterText = ''
94
+    },
95
+    clearHandle () {
96
+      this.$emit('input', '')
97
+      this.$emit('update:deptName', '')
98
+      this.showDeptName = ''
99
+      this.visibleDept = false
100
+      this.deptList = []
101
+      this.filterText = ''
102
+    },
103
+    commitHandle () {
104
+      const node = this.$refs.tree.getCurrentNode()
105
+      if (!node) {
106
+        this.$message.error(this.$t('dept.chooseerror'))
107
+        return
108
+      }
109
+      this.$emit('input', node.id)
110
+      this.$emit('update:deptName', node.name)
111
+      this.showDeptName = node.name
112
+      this.visibleDept = false
113
+      this.deptList = []
114
+      this.filterText = ''
115
+    }
116
+  }
117
+}
118
+</script>

+ 7 - 0
src/components/ren-process-detail/index.js

@@ -0,0 +1,7 @@
1
+import RenProcessDetail from './src/ren-process-detail'
2
+
3
+RenProcessDetail.install = function (Vue) {
4
+  Vue.component(RenProcessDetail.name, RenProcessDetail)
5
+}
6
+
7
+export default RenProcessDetail

+ 79 - 0
src/components/ren-process-detail/src/ren-process-detail.vue

@@ -0,0 +1,79 @@
1
+<template>
2
+  <el-card shadow="never" class="aui-card--fill">
3
+    <h4>{{ $t('process.flowImage') }}</h4>
4
+    <img :src="getResourceURL()" class="image">
5
+    <h4>{{ $t('process.circulation') }}</h4>
6
+    <div class="mod-sys__dict">
7
+      <el-table
8
+        v-loading="dataListLoading"
9
+        :data="dataList"
10
+        border
11
+        @selection-change="dataListSelectionChangeHandle"
12
+        @sort-change="dataListSortChangeHandle"
13
+        style="width: 100%;">
14
+        <el-table-column prop="activityName"  :label="$t('process.taskName')" header-align="center" align="center"></el-table-column>
15
+        <el-table-column prop="assignee" :label="$t('process.assignee')" header-align="center" align="center"></el-table-column>
16
+        <el-table-column prop="startTime" :label="$t('task.startTime')" header-align="center" align="center"></el-table-column>
17
+        <el-table-column prop="endTime" :label="$t('task.endTime')"  header-align="center" align="center"></el-table-column>
18
+        <el-table-column prop="comment" :label="$t('process.comment')" header-align="center" align="center"></el-table-column>
19
+        <el-table-column prop="durationInSeconds" :label="$t('task.durationInSeconds')" header-align="center" align="center" width="180"></el-table-column>
20
+      </el-table>
21
+      <el-pagination
22
+        v-if="dataForm.pid === '0'"
23
+        :current-page="page"
24
+        :page-sizes="[10, 20, 50, 100]"
25
+        :page-size="limit"
26
+        :total="total"
27
+        layout="total, sizes, prev, pager, next, jumper"
28
+        @size-change="pageSizeChangeHandle"
29
+        @current-change="pageCurrentChangeHandle">
30
+      </el-pagination>
31
+    </div>
32
+  </el-card>
33
+</template>
34
+<style scoped>
35
+  .image {
36
+    width: 60%;
37
+    display: block;
38
+    margin: 0 auto 30px auto;
39
+  }
40
+</style>
41
+
42
+<script>
43
+import Cookies from 'js-cookie'
44
+import qs from 'qs'
45
+import mixinViewModule from '@/mixins/view-module'
46
+export default {
47
+  mixins: [mixinViewModule],
48
+  name: 'RenProcessDetail',
49
+  data () {
50
+    return {
51
+      mixinViewModuleOptions: {
52
+        getDataListURL: '/act/his/getTaskHandleDetailInfo',
53
+        getDataListIsPage: false,
54
+        createdIsNeed: false,
55
+        deleteIsBatch: true,
56
+        deleteIsBatchKey: 'deploymentId'
57
+      },
58
+      dataForm: {
59
+        processInstanceId: ''
60
+      }
61
+    }
62
+  },
63
+  created () {
64
+    this.dataForm.processInstanceId = this.$route.params.processInstanceId
65
+    this.getResourceURL()
66
+    this.getDataList()
67
+  },
68
+  methods: {
69
+    // 获取流程(xml/image)url地址
70
+    getResourceURL () {
71
+      const params = qs.stringify({
72
+        token: Cookies.get('token'),
73
+        processInstanceId: this.dataForm.processInstanceId
74
+      })
75
+      return `${window.SITE_CONFIG.apiURL}/act/his/getInstImage?${params}`
76
+    }
77
+  }
78
+}
79
+</script>

+ 7 - 0
src/components/ren-process-multiple/index.js

@@ -0,0 +1,7 @@
1
+import RenProcessMultiple from './src/ren-process-multiple'
2
+
3
+RenProcessMultiple.install = function (Vue) {
4
+  Vue.component(RenProcessMultiple.name, RenProcessMultiple)
5
+}
6
+
7
+export default RenProcessMultiple

+ 87 - 0
src/components/ren-process-multiple/src/ren-process-multiple.vue

@@ -0,0 +1,87 @@
1
+<template>
2
+  <div>
3
+    <ren-process-start v-if="startProcessVisible" :saveFormUrl="saveFormUrl" :updateInstanceIdUrl="updateInstanceIdUrl" :dataFormName="dataFormName" ref="renProcessStart"></ren-process-start>
4
+    <ren-process-running v-if="runningHandleVisible" ref="renProcessRunning"></ren-process-running>
5
+    <ren-process-detail v-if="processDetailVisible" ref="renProcessDetail"></ren-process-detail>
6
+  </div>
7
+</template>
8
+
9
+<script>
10
+export default {
11
+  name: 'RenProcessMultiple',
12
+  data () {
13
+    return {
14
+      // 是否显示启动流程
15
+      startProcessVisible: false,
16
+      // 是否任务处理
17
+      runningHandleVisible: false,
18
+      // 是否显示流程处理详情
19
+      processDetailVisible: false,
20
+      // 用于区分流程启动(start)、任务处理(taskHandle)以及查看详情(null)
21
+      showType: null,
22
+      // 父级对象
23
+      parentObj: null,
24
+      dataForm: {
25
+        processDefinitionKey: '',
26
+        taskId: '',
27
+        businessKey: '',
28
+        processInstanceId: ''
29
+      },
30
+      // 回调函数
31
+      callbacks: {
32
+        // 启动成功回调
33
+        startProcessSuccessCallback: null,
34
+        // 启动失败回调
35
+        startProcessErrorCallback: null,
36
+        // 任务处理成功回调
37
+        taskHandleSuccessCallback: null,
38
+        // 任务处理失败回调
39
+        taskHandleErrorCallback: null,
40
+        // 表单保存成功回调
41
+        formSaveSuccessCallback: null,
42
+        // 表单保存失败回调
43
+        formSaveErrorCallback: null
44
+      }
45
+    }
46
+  },
47
+  components: {
48
+  },
49
+  created () {
50
+    this.$nextTick(() => {
51
+      if (!this.showType) {
52
+        this.startProcessVisible = false
53
+        this.runningHandleVisible = false
54
+        this.processDetailVisible = true
55
+      } else if (this.showType === 'start') {
56
+        // 启动流程
57
+        this.startProcessVisible = true
58
+        this.$nextTick(() => {
59
+          this.$refs.renProcessStart.rootObj = this.parentObj
60
+          this.$refs.renProcessStart.callbacks = this.callbacks
61
+          this.$refs.renProcessStart.dataForm.processDefinitionKey = this.dataForm.processDefinitionKey
62
+        })
63
+      } else if (this.showType === 'taskHandle') {
64
+        // 任务处理
65
+        this.runningHandleVisible = true
66
+        this.$nextTick(() => {
67
+          this.$refs.renProcessRunning.rootObj = this.parentObj
68
+          this.$refs.renProcessRunning.dataForm.taskId = this.dataForm.taskId
69
+          this.$refs.renProcessRunning.dataForm.processInstanceId = this.dataForm.processInstanceId
70
+          this.$refs.renProcessRunning.callbacks = this.callbacks
71
+          this.$refs.renProcessRunning.dataForm.businessKey = this.dataForm.businessKey
72
+          this.$refs.renProcessRunning.dataForm.processDefinitionKey = this.dataForm.processDefinitionKey
73
+        })
74
+      }
75
+    })
76
+  },
77
+  props: {
78
+    saveFormUrl: String,
79
+    updateInstanceIdUrl: String,
80
+    dataFormName: String
81
+  },
82
+  watch: {
83
+  },
84
+  methods: {
85
+  }
86
+}
87
+</script>

+ 7 - 0
src/components/ren-process-running/index.js

@@ -0,0 +1,7 @@
1
+import RenProcessRunning from './src/ren-process-running'
2
+
3
+RenProcessRunning.install = function (Vue) {
4
+  Vue.component(RenProcessRunning.name, RenProcessRunning)
5
+}
6
+
7
+export default RenProcessRunning

+ 100 - 0
src/components/ren-process-running/src/ren-process-running.vue

@@ -0,0 +1,100 @@
1
+<template>
2
+  <div>
3
+    <el-button type="primary" @click="completeTask()">{{ $t('process.completeTask') }}</el-button>
4
+    <el-button type="warning" @click="rejectTask()">{{ $t('process.rejectTask') }}</el-button>
5
+    <el-button type="success" @click="rollbackTask()">{{ $t('process.doBackRollback') }}</el-button>
6
+    <el-button type="info" @click="entrustTask()">{{ $t('process.entrustTask') }}</el-button>
7
+    <el-button type="danger" @click="terminationTask()">{{ $t('process.terminationTask') }}</el-button>
8
+    <ren-task-back v-if="renTaskBackVisible" ref="renTaskBack"></ren-task-back>
9
+    <ren-task-entrust v-if="renTaskEntrustVisible" ref="renTaskEntrust"></ren-task-entrust>
10
+    <ren-task-handle v-if="renTaskHandleVisible" ref="renTaskHandle"></ren-task-handle>
11
+  </div>
12
+</template>
13
+
14
+<script>
15
+import RenTaskBack from './ren-task-back'
16
+import RenTaskEntrust from './ren-task-entrust'
17
+import RenTaskHandle from './ren-task-handle'
18
+export default {
19
+  name: 'RenProcessRunning',
20
+  data () {
21
+    return {
22
+      // 是否显示退回窗口
23
+      renTaskBackVisible: false,
24
+      renTaskEntrustVisible: false,
25
+      renTaskHandleVisible: false,
26
+      parentObj: null,
27
+      dataForm: {
28
+        taskId: '',
29
+        businessKey: '',
30
+        processDefinitionKey: '',
31
+        processInstanceId: ''
32
+      },
33
+      // 回调函数
34
+      callbacks: {
35
+        taskHandleSuccessCallback: null,
36
+        taskHandleErrorCallback: null
37
+      }
38
+    }
39
+  },
40
+  components: {
41
+    RenTaskBack,
42
+    RenTaskEntrust,
43
+    RenTaskHandle
44
+  },
45
+  created () {
46
+    this.$nextTick(() => {
47
+    })
48
+  },
49
+  props: {
50
+  },
51
+  watch: {
52
+  },
53
+  methods: {
54
+    completeTask () {
55
+      this.renTaskHandleVisible = true
56
+      this.$nextTick(() => {
57
+        this.$refs.renTaskHandle.dataForm.taskId = this.dataForm.taskId
58
+        this.$refs.renTaskHandle.callbacks = this.callbacks
59
+        this.$refs.renTaskHandle.handleType = 'complete'
60
+        this.$refs.renTaskHandle.init()
61
+      })
62
+    },
63
+    rejectTask () {
64
+      this.renTaskHandleVisible = true
65
+      this.$nextTick(() => {
66
+        this.$refs.renTaskHandle.dataForm.taskId = this.dataForm.taskId
67
+        this.$refs.renTaskHandle.callbacks = this.callbacks
68
+        this.$refs.renTaskHandle.handleType = 'reject'
69
+        this.$refs.renTaskHandle.init()
70
+      })
71
+    },
72
+    rollbackTask () {
73
+      this.renTaskBackVisible = true
74
+      this.$nextTick(() => {
75
+        this.$refs.renTaskBack.dataForm.taskId = this.dataForm.taskId
76
+        this.$refs.renTaskBack.dataForm.processInstanceId = this.dataForm.processInstanceId
77
+        this.$refs.renTaskBack.callbacks = this.callbacks
78
+        this.$refs.renTaskBack.init()
79
+      })
80
+    },
81
+    entrustTask () {
82
+      this.renTaskEntrustVisible = true
83
+      this.$nextTick(() => {
84
+        this.$refs.renTaskEntrust.dataForm.taskId = this.dataForm.taskId
85
+        this.$refs.renTaskEntrust.callbacks = this.callbacks
86
+        this.$refs.renTaskEntrust.init()
87
+      })
88
+    },
89
+    terminationTask () {
90
+      this.renTaskHandleVisible = true
91
+      this.$nextTick(() => {
92
+        this.$refs.renTaskHandle.dataForm.taskId = this.dataForm.taskId
93
+        this.$refs.renTaskHandle.callbacks = this.callbacks
94
+        this.$refs.renTaskHandle.handleType = 'termination'
95
+        this.$refs.renTaskHandle.init()
96
+      })
97
+    }
98
+  }
99
+}
100
+</script>

+ 85 - 0
src/components/ren-process-running/src/ren-task-back.vue

@@ -0,0 +1,85 @@
1
+<template>
2
+  <el-dialog :visible.sync="visible" :title="$t('process.doBackRollback')" :close-on-click-modal="false" :close-on-press-escape="false">
3
+    <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
4
+      <el-form-item :label="$t('process.comment')" prop="comment">
5
+            <el-input type="textarea" v-model="dataForm.comment" :placeholder="$t('process.comment')"></el-input>
6
+      </el-form-item>
7
+    </el-form>
8
+    <template slot="footer">
9
+      <el-button @click="visible = false">{{ $t('cancel') }}</el-button>
10
+      <el-button type="primary" @click="doBackRollback()">{{ $t('confirm') }}</el-button>
11
+    </template>
12
+  </el-dialog>
13
+</template>
14
+
15
+<script>
16
+import debounce from 'lodash/debounce'
17
+import qs from 'qs'
18
+export default {
19
+  data () {
20
+    return {
21
+      visible: false,
22
+      dataForm: {
23
+        id: '',
24
+        comment: '',
25
+        taskId: '',
26
+        processInstanceId: ''
27
+      },
28
+      // 回调函数
29
+      callbacks: {
30
+        taskHandleSuccessCallback: null,
31
+        taskHandleErrorCallback: null
32
+      }
33
+    }
34
+  },
35
+  computed: {
36
+    dataRule () {
37
+      return {
38
+        comment: [
39
+          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
40
+        ]
41
+      }
42
+    }
43
+  },
44
+  methods: {
45
+    init () {
46
+      this.visible = true
47
+      this.$nextTick(() => {
48
+        this.$refs['dataForm'].resetFields()
49
+      })
50
+    },
51
+    doBackRollback: debounce(function () {
52
+      this.$refs['dataForm'].validate((valid) => {
53
+        if (!valid) {
54
+          return false
55
+        }
56
+        var params = qs.stringify({
57
+          'taskId': this.dataForm.taskId,
58
+          'processInstanceId': this.dataForm.processInstanceId,
59
+          'comment': this.dataForm.comment
60
+        })
61
+        this.$http['post']('/act/task/backPreviousTask?', params).then(({ data: res }) => {
62
+          if (res.code !== 0) {
63
+            this.$message.error(res.msg)
64
+            if (this.callbacks.taskHandleErrorCallback) {
65
+              this.callbacks.taskHandleErrorCallback(res)
66
+            }
67
+            return
68
+          }
69
+          this.$message({
70
+            message: this.$t('prompt.success'),
71
+            type: 'success',
72
+            duration: 500,
73
+            onClose: () => {
74
+              this.visible = false
75
+              if (this.callbacks.taskHandleSuccessCallback) {
76
+                this.callbacks.taskHandleSuccessCallback(res)
77
+              }
78
+            }
79
+          })
80
+        })
81
+      })
82
+    }, 1000, { 'leading': true, 'trailing': false })
83
+  }
84
+}
85
+</script>

+ 102 - 0
src/components/ren-process-running/src/ren-task-entrust.vue

@@ -0,0 +1,102 @@
1
+<template>
2
+  <el-dialog :visible.sync="visible" :title="$t('process.entrustTask')" :close-on-click-modal="false" :close-on-press-escape="false">
3
+    <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
4
+      <el-form-item :label="$t('process.assignee')">
5
+        <el-input v-model="dataForm.entrustUserName" class="input-with-select">
6
+          <el-button slot="append" icon="el-icon-search" @click="selectUserInfo()"></el-button>
7
+        </el-input>
8
+      </el-form-item>
9
+    </el-form>
10
+    <template slot="footer">
11
+      <el-button @click="visible = false">{{ $t('cancel') }}</el-button>
12
+      <el-button type="primary" @click="entrustTask()">{{ $t('confirm') }}</el-button>
13
+    </template>
14
+    <select-user v-if="selectUserVisible" ref="selectUser" ></select-user>
15
+  </el-dialog>
16
+</template>
17
+
18
+<script>
19
+import SelectUser from './select-user'
20
+import qs from 'qs'
21
+export default {
22
+  data () {
23
+    return {
24
+      visible: false,
25
+      selectUserVisible: false,
26
+      dataForm: {
27
+        id: '',
28
+        entrustUserId: '',
29
+        entrustUserName: '',
30
+        taskId: ''
31
+      },
32
+      // 回调函数
33
+      callbacks: {
34
+        taskHandleSuccessCallback: null,
35
+        taskHandleErrorCallback: null
36
+      }
37
+    }
38
+  },
39
+  computed: {
40
+    dataRule () {
41
+      return {
42
+        entrustUserName: [
43
+          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
44
+        ]
45
+      }
46
+    }
47
+  },
48
+  components: {
49
+    SelectUser
50
+  },
51
+  methods: {
52
+    init () {
53
+      this.visible = true
54
+      this.$nextTick(() => {
55
+        this.$refs['dataForm'].resetFields()
56
+      })
57
+    },
58
+    // 委托
59
+    entrustTask () {
60
+      if (!this.dataForm.entrustUserId) {
61
+        this.$message.error(this.$t('process.entrustError'))
62
+        return
63
+      }
64
+      var task = qs.stringify({
65
+        taskId: this.dataForm.taskId,
66
+        assignee: this.dataForm.entrustUserId
67
+      })
68
+      this.$http['post']('/act/task/entrust', task).then(({ data: res }) => {
69
+        if (res.code !== 0) {
70
+          this.$message.error(res.msg)
71
+          if (this.callbacks.taskHandleErrorCallback) {
72
+            this.callbacks.taskHandleErrorCallback(res)
73
+          }
74
+          return
75
+        }
76
+        this.$message({
77
+          message: this.$t('prompt.success'),
78
+          type: 'success',
79
+          duration: 500,
80
+          onClose: () => {
81
+            this.visible = false
82
+            if (this.callbacks.taskHandleSuccessCallback) {
83
+              this.callbacks.taskHandleSuccessCallback(res)
84
+            }
85
+          }
86
+        })
87
+      }).catch(() => {})
88
+    },
89
+    selectUserInfo () {
90
+      this.selectUserVisible = true
91
+      this.$nextTick(() => {
92
+        this.$refs.selectUser.dataForm.id = ''
93
+        this.$refs.selectUser.init(this.setUserInfo)
94
+      })
95
+    },
96
+    setUserInfo (userInfo) {
97
+      this.dataForm.entrustUserId = userInfo.id
98
+      this.dataForm.entrustUserName = userInfo.realName
99
+    }
100
+  }
101
+}
102
+</script>

+ 175 - 0
src/components/ren-process-running/src/ren-task-handle.vue

@@ -0,0 +1,175 @@
1
+<template>
2
+  <el-dialog :visible.sync="visible" :title="handleTitle" :close-on-click-modal="false" :close-on-press-escape="false">
3
+    <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
4
+      <el-form-item :label="$t('process.comment')" prop="comment">
5
+        <el-input type="textarea" v-model="dataForm.comment" :placeholder="$t('process.comment')"></el-input>
6
+      </el-form-item>
7
+    </el-form>
8
+    <template slot="footer">
9
+      <el-button @click="visible = false">{{ $t('cancel') }}</el-button>
10
+      <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
11
+    </template>
12
+  </el-dialog>
13
+</template>
14
+
15
+<script>
16
+import debounce from 'lodash/debounce'
17
+import qs from 'qs'
18
+export default {
19
+  data () {
20
+    return {
21
+      visible: false,
22
+      handleType: '',
23
+      handleTitle: '',
24
+      dataForm: {
25
+        comment: '',
26
+        taskId: ''
27
+      },
28
+      // 回调函数
29
+      callbacks: {
30
+        taskHandleSuccessCallback: null,
31
+        taskHandleErrorCallback: null
32
+      }
33
+    }
34
+  },
35
+  computed: {
36
+    dataRule () {
37
+      return {
38
+        comment: [
39
+          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
40
+        ]
41
+      }
42
+    }
43
+  },
44
+  methods: {
45
+    init () {
46
+      this.visible = true
47
+      if (this.handleType === 'complete') {
48
+        this.handleTitle = this.$t('process.completeTask')
49
+      } else if (this.handleType === 'reject') {
50
+        this.handleTitle = this.$t('process.rejectTask')
51
+      } else if (this.handleType === 'termination') {
52
+        this.handleTitle = this.$t('process.terminationTask')
53
+      }
54
+      this.$nextTick(() => {
55
+        this.$refs['dataForm'].resetFields()
56
+      })
57
+    },
58
+    // 表单提交
59
+    dataFormSubmitHandle () {
60
+      if (this.handleType === 'complete') {
61
+        this.completeTask()
62
+      } else if (this.handleType === 'reject') {
63
+        this.rejectTask()
64
+      } else if (this.handleType === 'termination') {
65
+        this.terminationTask()
66
+      }
67
+    },
68
+    // 驳回
69
+    rejectTask: debounce(function () {
70
+      this.$refs['dataForm'].validate((valid) => {
71
+        if (!valid) {
72
+          return false
73
+        }
74
+        if (!this.dataForm.taskId) {
75
+          return false
76
+        }
77
+        var params = qs.stringify({
78
+          'taskId': this.dataForm.taskId,
79
+          'comment': this.dataForm.comment
80
+        })
81
+        this.$http['post']('/act/task/backToFirst?', params).then(({ data: res }) => {
82
+          if (res.code !== 0) {
83
+            this.$message.error(res.msg)
84
+            if (this.callbacks.taskHandleErrorCallback) {
85
+              this.callbacks.taskHandleErrorCallback(res)
86
+            }
87
+            return
88
+          }
89
+          this.$message({
90
+            message: this.$t('prompt.success'),
91
+            type: 'success',
92
+            duration: 500,
93
+            onClose: () => {
94
+              this.visible = false
95
+              if (this.callbacks.taskHandleSuccessCallback) {
96
+                this.callbacks.taskHandleSuccessCallback(res)
97
+              }
98
+            }
99
+          })
100
+        })
101
+      })
102
+    }, 1000, { 'leading': true, 'trailing': false }),
103
+    // 通过
104
+    completeTask: debounce(function () {
105
+      this.$refs['dataForm'].validate((valid) => {
106
+        if (!valid) {
107
+          return false
108
+        }
109
+        if (!this.dataForm.taskId) {
110
+          return false
111
+        }
112
+        var params = qs.stringify({
113
+          'taskId': this.dataForm.taskId,
114
+          'comment': this.dataForm.comment
115
+        })
116
+        this.$http.post('/act/task/complete?' + params).then(({ data: res }) => {
117
+          if (res.code !== 0) {
118
+            this.$message.error(res.msg)
119
+            if (this.callbacks.taskHandleErrorCallback) {
120
+              this.callbacks.taskHandleErrorCallback(res)
121
+            }
122
+            return
123
+          }
124
+          this.$message({
125
+            message: this.$t('prompt.success'),
126
+            type: 'success',
127
+            duration: 500,
128
+            onClose: () => {
129
+              this.visible = false
130
+              if (this.callbacks.taskHandleSuccessCallback) {
131
+                this.callbacks.taskHandleSuccessCallback(res)
132
+              }
133
+            }
134
+          })
135
+        }).catch(() => {})
136
+      })
137
+    }, 1000, { 'leading': true, 'trailing': false }),
138
+    // 终止
139
+    terminationTask: debounce(function () {
140
+      this.$refs['dataForm'].validate((valid) => {
141
+        if (!valid) {
142
+          return false
143
+        }
144
+        if (!this.dataForm.taskId) {
145
+          return false
146
+        }
147
+        var task = qs.stringify({
148
+          taskId: this.dataForm.taskId,
149
+          comment: this.dataForm.comment
150
+        })
151
+        this.$http['post']('/act/task/endProcess', task).then(({ data: res }) => {
152
+          if (res.code !== 0) {
153
+            this.$message.error(res.msg)
154
+            if (this.callbacks.taskHandleErrorCallback) {
155
+              this.callbacks.taskHandleErrorCallback(res)
156
+            }
157
+            return
158
+          }
159
+          this.$message({
160
+            message: this.$t('prompt.success'),
161
+            type: 'success',
162
+            duration: 500,
163
+            onClose: () => {
164
+              this.visible = false
165
+              if (this.callbacks.taskHandleSuccessCallback) {
166
+                this.callbacks.taskHandleSuccessCallback(res)
167
+              }
168
+            }
169
+          })
170
+        }).catch(() => {})
171
+      })
172
+    }, 1000, { 'leading': true, 'trailing': false })
173
+  }
174
+}
175
+</script>

+ 84 - 0
src/components/ren-process-running/src/select-user.vue

@@ -0,0 +1,84 @@
1
+<template>
2
+  <el-dialog :visible.sync="visibleSelect" width="60%" :modal="false" :title="$t('user.select')" :close-on-click-modal="false" :close-on-press-escape="false">
3
+    <div class="mod-sys__user">
4
+      <el-form :inline="true" size="mini" :model="dataForm" @keyup.enter.native="getDataList()">
5
+        <el-form-item>
6
+          <el-input v-model="dataForm.username" :placeholder="$t('user.username')" clearable></el-input>
7
+        </el-form-item>
8
+        <el-form-item>
9
+          <el-button @click="getDataList()">{{ $t('query') }}</el-button>
10
+        </el-form-item>
11
+      </el-form>
12
+      <el-table
13
+        v-loading="dataListLoading"
14
+        :data="dataList"
15
+        border
16
+        @selection-change="dataListSelectionChangeHandle"
17
+        @sort-change="dataListSortChangeHandle"
18
+        style="width: 100%;" size="mini">
19
+        <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
20
+        <el-table-column prop="username" :label="$t('user.username')" sortable="custom" header-align="center" align="center"></el-table-column>
21
+        <el-table-column prop="deptName" :label="$t('user.deptName')" header-align="center" align="center"></el-table-column>
22
+        <el-table-column prop="email" :label="$t('user.email')" header-align="center" align="center"></el-table-column>
23
+        <el-table-column prop="mobile" :label="$t('user.mobile')" sortable="custom" header-align="center" align="center"></el-table-column>
24
+      </el-table>
25
+      <el-pagination
26
+        :current-page="page"
27
+        :page-sizes="[10, 20, 50, 100]"
28
+        :page-size="limit"
29
+        :total="total"
30
+        layout="total, sizes, prev, pager, next, jumper"
31
+        @size-change="pageSizeChangeHandle"
32
+        @current-change="pageCurrentChangeHandle">
33
+      </el-pagination>
34
+    </div>
35
+    <template slot="footer">
36
+      <el-button type="default" @click="cancelHandle()">{{ $t('cancel') }}</el-button>
37
+      <el-button type="primary" @click="commitHandle()">{{ $t('confirm') }}</el-button>
38
+    </template>
39
+  </el-dialog>
40
+</template>
41
+
42
+<script>
43
+import mixinViewModule from '@/mixins/view-module'
44
+export default {
45
+  mixins: [mixinViewModule],
46
+  data () {
47
+    return {
48
+      visibleSelect: false,
49
+      mixinViewModuleOptions: {
50
+        getDataListURL: '/sys/user/page',
51
+        getDataListIsPage: true
52
+      },
53
+      dataForm: {
54
+        username: ''
55
+      },
56
+      callback: null
57
+    }
58
+  },
59
+  components: {},
60
+  methods: {
61
+    init (callback) {
62
+      this.visibleSelect = true
63
+      this.callback = callback
64
+      this.$nextTick(() => {
65
+        this.getDataList()
66
+      })
67
+    },
68
+    cancelHandle () {
69
+      this.visibleSelect = false
70
+    },
71
+    commitHandle () {
72
+      if (this.callback) {
73
+        if (this.dataListSelections.length !== 1) {
74
+          this.$message.error(this.$t('user.selecterror'))
75
+          return
76
+        } else {
77
+          this.callback(this.dataListSelections[0])
78
+        }
79
+      }
80
+      this.visibleSelect = false
81
+    }
82
+  }
83
+}
84
+</script>

+ 7 - 0
src/components/ren-process-start/index.js

@@ -0,0 +1,7 @@
1
+import RenProcessStart from './src/ren-process-start'
2
+
3
+RenProcessStart.install = function (Vue) {
4
+  Vue.component(RenProcessStart.name, RenProcessStart)
5
+}
6
+
7
+export default RenProcessStart

+ 134 - 0
src/components/ren-process-start/src/ren-process-start.vue

@@ -0,0 +1,134 @@
1
+<template>
2
+  <el-button type="primary" @click="processStartHandle()">{{ $t('process.createInstance') }}</el-button>
3
+</template>
4
+
5
+<script>
6
+import qs from 'qs'
7
+export default {
8
+  name: 'RenProcessStart',
9
+  data () {
10
+    return {
11
+      formUrl: '',
12
+      instanceIdUrl: '',
13
+      formName: null,
14
+      rootObj: null,
15
+      dataForm: {
16
+        processDefinitionKey: ''
17
+      },
18
+      // 回调函数
19
+      callbacks: {
20
+        startProcessSuccessCallback: null,
21
+        startProcessErrorCallback: null,
22
+        formSaveSuccessCallback: null,
23
+        formSaveErrorCallback: null
24
+      }
25
+    }
26
+  },
27
+  components: {
28
+  },
29
+  created () {
30
+    this.$nextTick(() => {
31
+      this.formUrl = this.saveFormUrl
32
+      this.instanceIdUrl = this.updateInstanceIdUrl
33
+      this.formName = this.dataFormName
34
+    })
35
+  },
36
+  props: {
37
+    saveFormUrl: String,
38
+    updateInstanceIdUrl: String,
39
+    dataFormName: String
40
+  },
41
+  watch: {
42
+    saveFormUrl (val) {
43
+      this.formUrl = val
44
+    },
45
+    updateInstanceIdUrl (val) {
46
+      this.instanceIdUrl = val
47
+    },
48
+    dataFormName (val) {
49
+      this.formName = val
50
+    }
51
+  },
52
+  methods: {
53
+    // 启动流程事件
54
+    processStartHandle () {
55
+      if (!this.formUrl) {
56
+        return this.$message.error(this.$t('process.formURLError'))
57
+      }
58
+      if (!this.dataForm.processDefinitionKey) {
59
+        return this.$message.error(this.$t('process.keyError'))
60
+      }
61
+      if (!this.formName) {
62
+        return this.$message.error(this.$t('process.formNameError'))
63
+      }
64
+      this.rootObj.$refs[this.formName].validate((valid) => {
65
+        if (!valid) {
66
+          return false
67
+        }
68
+        this.$http.get(`/act/process/lastestPage`, {
69
+          params: {
70
+            key: this.dataForm.processDefinitionKey
71
+          }
72
+        }).then(({ data: res }) => {
73
+          if (res.code !== 0) {
74
+            return this.$message.error(res.msg)
75
+          }
76
+          if (!res.data.list || res.data.list.length <= 0) {
77
+            return this.$message.error(this.$t('process.notExistError'))
78
+          }
79
+          this.$http['post'](this.formUrl, this.rootObj[this.formName]).then(({ data: res }) => {
80
+            if (res.code !== 0) {
81
+              this.$message.error(res.msg)
82
+              if (this.callbacks.formSaveErrorCallback) {
83
+                this.callbacks.formSaveErrorCallback(res)
84
+              }
85
+            }
86
+            if (this.callbacks.formSaveSuccessCallback) {
87
+              this.callbacks.formSaveSuccessCallback(res)
88
+            }
89
+            if (!res.data.businessKey) {
90
+              return this.$message.error(this.$t('process.businessKeyError'))
91
+              // this.startProcess(this.dataForm.processDefinitionKey, null, this.rootObj[this.formName])
92
+            } else {
93
+              this.startProcess(this.dataForm.processDefinitionKey, res.data.businessKey, this.rootObj[this.formName])
94
+            }
95
+          }).catch(() => {})
96
+        }).catch(() => {})
97
+      })
98
+    },
99
+    // 启动流程
100
+    startProcess (processDefinitionKey, businessKey, formData) {
101
+      var data = {
102
+        processDefinitionKey: processDefinitionKey,
103
+        businessKey: businessKey,
104
+        variables: formData
105
+      }
106
+      this.$http['post']('/act/running/startOfBusinessKey', data).then(({ data: res }) => {
107
+        if (res.code !== 0) {
108
+          if (this.callbacks.startProcessErrorCallback) {
109
+            this.callbacks.startProcessErrorCallback(res.data)
110
+          }
111
+        }
112
+        this.$message({
113
+          message: this.$t('prompt.success'),
114
+          type: 'success',
115
+          duration: 500,
116
+          onClose: () => {
117
+            if (this.callbacks.startProcessSuccessCallback) {
118
+              this.callbacks.startProcessSuccessCallback(res.data)
119
+            }
120
+          }
121
+        })
122
+        if (this.instanceIdUrl) {
123
+          var params = qs.stringify({
124
+            processInstanceId: res.data.processInstanceId,
125
+            processDefinitionKey: processDefinitionKey,
126
+            businessKey: businessKey
127
+          })
128
+          this.$http['post'](this.instanceIdUrl + '?' + params).then(({ data: res }) => {})
129
+        }
130
+      }).catch(() => {})
131
+    }
132
+  }
133
+}
134
+</script>

+ 7 - 0
src/components/ren-radio-group/index.js

@@ -0,0 +1,7 @@
1
+import RenRadioGroup from './src/ren-radio-group'
2
+
3
+RenRadioGroup.install = function (Vue) {
4
+  Vue.component(RenRadioGroup.name, RenRadioGroup)
5
+}
6
+
7
+export default RenRadioGroup

+ 20 - 0
src/components/ren-radio-group/src/ren-radio-group.vue

@@ -0,0 +1,20 @@
1
+<template>
2
+  <el-radio-group :value="value+''" @input="$emit('input', $event)">
3
+    <el-radio :label="data.dictValue" v-for="data in dataList" :key="data.dictValue">{{data.dictLabel}}</el-radio>
4
+  </el-radio-group>
5
+</template>
6
+<script>
7
+import { getDictDataList } from '@/utils'
8
+export default {
9
+  name: 'RenRadioGroup',
10
+  data () {
11
+    return {
12
+      dataList: getDictDataList(this.dictType)
13
+    }
14
+  },
15
+  props: {
16
+    value: [Number, String],
17
+    dictType: String
18
+  }
19
+}
20
+</script>

+ 7 - 0
src/components/ren-region-tree/index.js

@@ -0,0 +1,7 @@
1
+import RenRegionTree from './src/ren-region-tree'
2
+
3
+RenRegionTree.install = function (Vue) {
4
+  Vue.component(RenRegionTree.name, RenRegionTree)
5
+}
6
+
7
+export default RenRegionTree

+ 132 - 0
src/components/ren-region-tree/src/ren-region-tree.vue

@@ -0,0 +1,132 @@
1
+<template>
2
+  <div class="ren-region">
3
+  <el-input v-model="showName" :placeholder="placeholder" @focus="treeDialog">
4
+    <el-button slot="append" icon="el-icon-search" @click="treeDialog"></el-button>
5
+  </el-input>
6
+  <el-input :value="value" style="display: none"></el-input>
7
+  <el-dialog :visible.sync="visibleTree" width="360px" :modal="false" :title="placeholder" :close-on-click-modal="false" :close-on-press-escape="false">
8
+    <el-form size="mini" :inline="true">
9
+      <el-form-item :label="$t('keyword')">
10
+        <el-input v-model="filterText"></el-input>
11
+      </el-form-item>
12
+      <el-form-item>
13
+        <el-button type="default">{{ $t('query') }}</el-button>
14
+      </el-form-item>
15
+    </el-form>
16
+    <el-tree
17
+      class="filter-tree"
18
+      :data="dataList"
19
+      :default-expanded-keys="expandedKeys"
20
+      :props="{ label: 'name', children: 'children' }"
21
+      :expand-on-click-node="false"
22
+      :filter-node-method="filterNode"
23
+      :highlight-current="true"
24
+      node-key="id"
25
+      ref="tree">
26
+    </el-tree>
27
+    <template slot="footer">
28
+      <el-button type="default" @click="cancelHandle()" size="mini">{{ $t('cancel') }}</el-button>
29
+      <el-button type="info" @click="clearHandle()" size="mini">{{ $t('clear') }}</el-button>
30
+      <el-button type="primary" @click="commitHandle()" size="mini">{{ $t('confirm') }}</el-button>
31
+    </template>
32
+  </el-dialog>
33
+  </div>
34
+</template>
35
+<style lang="scss">
36
+.ren-region {
37
+    .filter-tree {
38
+        max-height: 230px;
39
+        overflow: auto;
40
+    }
41
+    .el-dialog__body {
42
+        padding: 0px 0px 0px 20px;
43
+    }
44
+    .el-dialog__footer {
45
+        padding: 10px 20px 8px 20px;
46
+    }
47
+}
48
+</style>
49
+<script>
50
+import { treeDataTranslate } from '@/utils'
51
+export default {
52
+  name: 'RenRegionTree',
53
+  data () {
54
+    return {
55
+      filterText: '',
56
+      visibleTree: false,
57
+      dataList: [],
58
+      showName: '',
59
+      expandedKeys: null,
60
+      defaultProps: {
61
+        children: 'children',
62
+        label: 'name'
63
+      }
64
+    }
65
+  },
66
+  props: {
67
+    value: [Number, String],
68
+    parentName: String,
69
+    placeholder: String
70
+  },
71
+  watch: {
72
+    filterText (val) {
73
+      this.$refs.tree.filter(val)
74
+    },
75
+    parentName (val) {
76
+      this.showName = val
77
+    }
78
+  },
79
+  methods: {
80
+    treeDialog () {
81
+      this.expandedKeys = null
82
+      if (this.$refs.tree) {
83
+        this.$refs.tree.setCurrentKey(null)
84
+      }
85
+      this.visibleTree = true
86
+      this.getDataList(this.value)
87
+    },
88
+    filterNode (value, data) {
89
+      if (!value) return true
90
+      return data.name.indexOf(value) !== -1
91
+    },
92
+    getDataList (id) {
93
+      return this.$http.get('/sys/region/tree').then(({ data: res }) => {
94
+        if (res.code !== 0) {
95
+          return this.$message.error(res.msg)
96
+        }
97
+        this.dataList = treeDataTranslate(res.data)
98
+        this.$nextTick(() => {
99
+          this.$refs.tree.setCurrentKey(id)
100
+          this.expandedKeys = [id]
101
+        })
102
+      }).catch(() => {})
103
+    },
104
+    cancelHandle () {
105
+      this.visibleTree = false
106
+      this.dataList = []
107
+      this.filterText = ''
108
+    },
109
+    clearHandle () {
110
+      this.$emit('input', '0')
111
+      this.$emit('update:parentName', '')
112
+      this.showName = ''
113
+      this.visibleTree = false
114
+      this.dataList = []
115
+      this.filterText = ''
116
+    },
117
+    commitHandle () {
118
+      const node = this.$refs.tree.getCurrentNode()
119
+      if (!node) {
120
+        this.$message.error(this.$t('choose'))
121
+        return
122
+      }
123
+      this.$emit('input', node.id)
124
+      this.$emit('update:parentName', node.name)
125
+      this.showName = node.name
126
+      this.visibleTree = false
127
+      this.dataList = []
128
+      this.filterText = ''
129
+    }
130
+  }
131
+}
132
+</script>

+ 7 - 0
src/components/ren-select/index.js

@@ -0,0 +1,7 @@
1
+import RenSelect from './src/ren-select'
2
+
3
+RenSelect.install = function (Vue) {
4
+  Vue.component(RenSelect.name, RenSelect)
5
+}
6
+
7
+export default RenSelect

+ 21 - 0
src/components/ren-select/src/ren-select.vue

@@ -0,0 +1,21 @@
1
+<template>
2
+    <el-select :value="value+''" @input="$emit('input', $event)" :placeholder="placeholder" clearable>
3
+        <el-option :label="data.dictLabel" v-for="data in dataList" :key="data.dictValue" :value ="data.dictValue">{{data.dictLabel}}</el-option>
4
+    </el-select>
5
+</template>
6
+<script>
7
+import { getDictDataList } from '@/utils'
8
+export default {
9
+  name: 'RenSelect',
10
+  data () {
11
+    return {
12
+      dataList: getDictDataList(this.dictType)
13
+    }
14
+  },
15
+  props: {
16
+    value: [Number, String],
17
+    dictType: String,
18
+    placeholder: String
19
+  }
20
+}
21
+</script>

+ 23 - 0
src/element-ui/config.js

@@ -0,0 +1,23 @@
1
+/* eslint-disable */
2
+/**
3
+ * 主题配置信息
4
+ * 
5
+ * hasBuild 是否已构建?
6
+ *  true :已构建,不再构建
7
+ *  false:未构建,执行命令后会自动构建
8
+ */
9
+module.exports = [
10
+  {  name: 'default',   color: '#409EFF', desc: '默认色', hasBuild: false },
11
+  {  name: 'cyan',      color: '#0BB2D4', desc: '青色',   hasBuild: false },
12
+  {  name: 'blue',      color: '#3E8EF7', desc: '蓝色',   hasBuild: false },
13
+  {  name: 'green',     color: '#11C26D', desc: '绿色',   hasBuild: false },
14
+  {  name: 'turquoise', color: '#17B3A3', desc: '蓝绿色', hasBuild: false },
15
+  {  name: 'indigo',    color: '#667AFA', desc: '靛青色', hasBuild: false },
16
+  {  name: 'brown',     color: '#997B71', desc: '棕色',   hasBuild: false },
17
+  {  name: 'purple',    color: '#9463F7', desc: '紫色',   hasBuild: false },
18
+  {  name: 'gray',      color: '#757575', desc: '灰色',   hasBuild: false },
19
+  {  name: 'orange',    color: '#EB6709', desc: '橙色',   hasBuild: false },
20
+  {  name: 'pink',      color: '#F74584', desc: '粉红色', hasBuild: false },
21
+  {  name: 'yellow',    color: '#FCB900', desc: '黄色',   hasBuild: false },
22
+  {  name: 'red',       color: '#FF4C52', desc: '红色',   hasBuild: false }
23
+]

+ 994 - 0
src/element-ui/theme-variables.scss

@@ -0,0 +1,994 @@
1
+/* Element Chalk Variables */
2
+
3
+// Special comment for theme configurator
4
+// type|skipAutoTranslation|Category|Order
5
+// skipAutoTranslation 1
6
+
7
+/* Transition
8
+-------------------------- */
9
+$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default;
10
+$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
11
+$--fade-linear-transition: opacity 200ms linear !default;
12
+$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
13
+$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default;
14
+$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
15
+
16
+/* Color
17
+-------------------------- */
18
+/// color|1|Brand Color|0
19
+$--color-primary: #17B3A3 !default;
20
+/// color|1|Background Color|4
21
+$--color-white: #FFFFFF !default;
22
+/// color|1|Background Color|4
23
+$--color-black: #000000 !default;
24
+$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
25
+$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
26
+$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
27
+$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
28
+$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
29
+$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
30
+$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
31
+$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
32
+$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
33
+/// color|1|Functional Color|1
34
+$--color-success: #67C23A !default;
35
+/// color|1|Functional Color|1
36
+$--color-warning: #E6A23C !default;
37
+/// color|1|Functional Color|1
38
+$--color-danger: #F56C6C !default;
39
+/// color|1|Functional Color|1
40
+$--color-info: #909399 !default;
41
+
42
+$--color-success-light: mix($--color-white, $--color-success, 80%) !default;
43
+$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default;
44
+$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default;
45
+$--color-info-light: mix($--color-white, $--color-info, 80%) !default;
46
+
47
+$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default;
48
+$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default;
49
+$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default;
50
+$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default;
51
+/// color|1|Font Color|2
52
+$--color-text-primary: #303133 !default;
53
+/// color|1|Font Color|2
54
+$--color-text-regular: #606266 !default;
55
+/// color|1|Font Color|2
56
+$--color-text-secondary: #909399 !default;
57
+/// color|1|Font Color|2
58
+$--color-text-placeholder: #C0C4CC !default;
59
+/// color|1|Border Color|3
60
+$--border-color-base: #DCDFE6 !default;
61
+/// color|1|Border Color|3
62
+$--border-color-light: #E4E7ED !default;
63
+/// color|1|Border Color|3
64
+$--border-color-lighter: #EBEEF5 !default;
65
+/// color|1|Border Color|3
66
+$--border-color-extra-light: #F2F6FC !default;
67
+
68
+// Background
69
+/// color|1|Background Color|4
70
+$--background-color-base: #F5F7FA !default;
71
+
72
+/* Link
73
+-------------------------- */
74
+$--link-color: $--color-primary-light-2 !default;
75
+$--link-hover-color: $--color-primary !default;
76
+
77
+/* Border
78
+-------------------------- */
79
+$--border-width-base: 1px !default;
80
+$--border-style-base: solid !default;
81
+$--border-color-hover: $--color-text-placeholder !default;
82
+$--border-base: $--border-width-base $--border-style-base $--border-color-base !default;
83
+/// borderRadius|1|Radius|0
84
+$--border-radius-base: 4px !default;
85
+/// borderRadius|1|Radius|0
86
+$--border-radius-small: 2px !default;
87
+/// borderRadius|1|Radius|0
88
+$--border-radius-circle: 100% !default;
89
+/// borderRadius|1|Radius|0
90
+$--border-radius-zero: 0 !default;
91
+
92
+// Box-shadow
93
+/// boxShadow|1|Shadow|1
94
+$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default;
95
+// boxShadow|1|Shadow|1
96
+$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default;
97
+/// boxShadow|1|Shadow|1
98
+$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default;
99
+
100
+/* Fill
101
+-------------------------- */
102
+$--fill-base: $--color-white !default;
103
+
104
+/* Typography
105
+-------------------------- */
106
+$--font-path: 'fonts' !default;
107
+$--font-display: 'auto' !default;
108
+/// fontSize|1|Font Size|0
109
+$--font-size-extra-large: 20px !default;
110
+/// fontSize|1|Font Size|0
111
+$--font-size-large: 18px !default;
112
+/// fontSize|1|Font Size|0
113
+$--font-size-medium: 16px !default;
114
+/// fontSize|1|Font Size|0
115
+$--font-size-base: 14px !default;
116
+/// fontSize|1|Font Size|0
117
+$--font-size-small: 13px !default;
118
+/// fontSize|1|Font Size|0
119
+$--font-size-extra-small: 12px !default;
120
+/// fontWeight|1|Font Weight|1
121
+$--font-weight-primary: 500 !default;
122
+/// fontWeight|1|Font Weight|1
123
+$--font-weight-secondary: 100 !default;
124
+/// fontLineHeight|1|Line Height|2
125
+$--font-line-height-primary: 24px !default;
126
+/// fontLineHeight|1|Line Height|2
127
+$--font-line-height-secondary: 16px !default;
128
+$--font-color-disabled-base: #bbb !default;
129
+/* Size
130
+-------------------------- */
131
+$--size-base: 14px !default;
132
+
133
+/* z-index
134
+-------------------------- */
135
+$--index-normal: 1 !default;
136
+$--index-top: 1000 !default;
137
+$--index-popper: 2000 !default;
138
+
139
+/* Disable base
140
+-------------------------- */
141
+$--disabled-fill-base: $--background-color-base !default;
142
+$--disabled-color-base: $--color-text-placeholder !default;
143
+$--disabled-border-base: $--border-color-light !default;
144
+
145
+/* Icon
146
+-------------------------- */
147
+$--icon-color: #666 !default;
148
+$--icon-color-base: $--color-info !default;
149
+
150
+/* Checkbox
151
+-------------------------- */
152
+/// fontSize||Font|1
153
+$--checkbox-font-size: 14px !default;
154
+/// fontWeight||Font|1
155
+$--checkbox-font-weight: $--font-weight-primary !default;
156
+/// color||Color|0
157
+$--checkbox-font-color: $--color-text-regular !default;
158
+$--checkbox-input-height: 14px !default;
159
+$--checkbox-input-width: 14px !default;
160
+/// borderRadius||Border|2
161
+$--checkbox-border-radius: $--border-radius-small !default;
162
+/// color||Color|0
163
+$--checkbox-background-color: $--color-white !default;
164
+$--checkbox-input-border: $--border-base !default;
165
+
166
+/// color||Color|0
167
+$--checkbox-disabled-border-color: $--border-color-base !default;
168
+$--checkbox-disabled-input-fill: #edf2fc !default;
169
+$--checkbox-disabled-icon-color: $--color-text-placeholder !default;
170
+
171
+$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default;
172
+$--checkbox-disabled-checked-input-border-color: $--border-color-base !default;
173
+$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default;
174
+
175
+/// color||Color|0
176
+$--checkbox-checked-font-color: $--color-primary !default;
177
+$--checkbox-checked-input-border-color: $--color-primary !default;
178
+/// color||Color|0
179
+$--checkbox-checked-background-color: $--color-primary !default;
180
+$--checkbox-checked-icon-color: $--fill-base !default;
181
+
182
+$--checkbox-input-border-color-hover: $--color-primary !default;
183
+/// height||Other|4
184
+$--checkbox-bordered-height: 40px !default;
185
+/// padding||Spacing|3
186
+$--checkbox-bordered-padding: 9px 20px 9px 10px !default;
187
+/// padding||Spacing|3
188
+$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default;
189
+/// padding||Spacing|3
190
+$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default;
191
+/// padding||Spacing|3
192
+$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default;
193
+$--checkbox-bordered-medium-input-height: 14px !default;
194
+$--checkbox-bordered-medium-input-width: 14px !default;
195
+/// height||Other|4
196
+$--checkbox-bordered-medium-height: 36px !default;
197
+$--checkbox-bordered-small-input-height: 12px !default;
198
+$--checkbox-bordered-small-input-width: 12px !default;
199
+/// height||Other|4
200
+$--checkbox-bordered-small-height: 32px !default;
201
+$--checkbox-bordered-mini-input-height: 12px !default;
202
+$--checkbox-bordered-mini-input-width: 12px !default;
203
+/// height||Other|4
204
+$--checkbox-bordered-mini-height: 28px !default;
205
+
206
+/// color||Color|0
207
+$--checkbox-button-checked-background-color: $--color-primary !default;
208
+/// color||Color|0
209
+$--checkbox-button-checked-font-color: $--color-white !default;
210
+/// color||Color|0
211
+$--checkbox-button-checked-border-color: $--color-primary !default;
212
+
213
+
214
+
215
+/* Radio
216
+-------------------------- */
217
+/// fontSize||Font|1
218
+$--radio-font-size: $--font-size-base !default;
219
+/// fontWeight||Font|1
220
+$--radio-font-weight: $--font-weight-primary !default;
221
+/// color||Color|0
222
+$--radio-font-color: $--color-text-regular !default;
223
+$--radio-input-height: 14px !default;
224
+$--radio-input-width: 14px !default;
225
+/// borderRadius||Border|2
226
+$--radio-input-border-radius: $--border-radius-circle !default;
227
+/// color||Color|0
228
+$--radio-input-background-color: $--color-white !default;
229
+$--radio-input-border: $--border-base !default;
230
+/// color||Color|0
231
+$--radio-input-border-color: $--border-color-base !default;
232
+/// color||Color|0
233
+$--radio-icon-color: $--color-white !default;
234
+
235
+$--radio-disabled-input-border-color: $--disabled-border-base !default;
236
+$--radio-disabled-input-fill: $--disabled-fill-base !default;
237
+$--radio-disabled-icon-color: $--disabled-fill-base !default;
238
+
239
+$--radio-disabled-checked-input-border-color: $--disabled-border-base !default;
240
+$--radio-disabled-checked-input-fill: $--disabled-fill-base !default;
241
+$--radio-disabled-checked-icon-color: $--color-text-placeholder !default;
242
+
243
+/// color||Color|0
244
+$--radio-checked-font-color: $--color-primary !default;
245
+/// color||Color|0
246
+$--radio-checked-input-border-color: $--color-primary !default;
247
+/// color||Color|0
248
+$--radio-checked-input-background-color: $--color-white !default;
249
+/// color||Color|0
250
+$--radio-checked-icon-color: $--color-primary !default;
251
+
252
+$--radio-input-border-color-hover: $--color-primary !default;
253
+
254
+$--radio-bordered-height: 40px !default;
255
+$--radio-bordered-padding: 12px 20px 0 10px !default;
256
+$--radio-bordered-medium-padding: 10px 20px 0 10px !default;
257
+$--radio-bordered-small-padding: 8px 15px 0 10px !default;
258
+$--radio-bordered-mini-padding: 6px 15px 0 10px !default;
259
+$--radio-bordered-medium-input-height: 14px !default;
260
+$--radio-bordered-medium-input-width: 14px !default;
261
+$--radio-bordered-medium-height: 36px !default;
262
+$--radio-bordered-small-input-height: 12px !default;
263
+$--radio-bordered-small-input-width: 12px !default;
264
+$--radio-bordered-small-height: 32px !default;
265
+$--radio-bordered-mini-input-height: 12px !default;
266
+$--radio-bordered-mini-input-width: 12px !default;
267
+$--radio-bordered-mini-height: 28px !default;
268
+
269
+/// fontSize||Font|1
270
+$--radio-button-font-size: $--font-size-base !default;
271
+/// color||Color|0
272
+$--radio-button-checked-background-color: $--color-primary !default;
273
+/// color||Color|0
274
+$--radio-button-checked-font-color: $--color-white !default;
275
+/// color||Color|0
276
+$--radio-button-checked-border-color: $--color-primary !default;
277
+$--radio-button-disabled-checked-fill: $--border-color-extra-light !default;
278
+
279
+/* Select
280
+-------------------------- */
281
+$--select-border-color-hover: $--border-color-hover !default;
282
+$--select-disabled-border: $--disabled-border-base !default;
283
+/// fontSize||Font|1
284
+$--select-font-size: $--font-size-base !default;
285
+$--select-close-hover-color: $--color-text-secondary !default;
286
+
287
+$--select-input-color: $--color-text-placeholder !default;
288
+$--select-multiple-input-color: #666 !default;
289
+/// color||Color|0
290
+$--select-input-focus-border-color: $--color-primary !default;
291
+/// fontSize||Font|1
292
+$--select-input-font-size: 14px !default;
293
+
294
+$--select-option-color: $--color-text-regular !default;
295
+$--select-option-disabled-color: $--color-text-placeholder !default;
296
+$--select-option-disabled-background: $--color-white !default;
297
+/// height||Other|4
298
+$--select-option-height: 34px !default;
299
+$--select-option-hover-background: $--background-color-base !default;
300
+/// color||Color|0
301
+$--select-option-selected-font-color: $--color-primary !default;
302
+$--select-option-selected-hover: $--background-color-base !default;
303
+
304
+$--select-group-color: $--color-info !default;
305
+$--select-group-height: 30px !default;
306
+$--select-group-font-size: 12px !default;
307
+
308
+$--select-dropdown-background: $--color-white !default;
309
+$--select-dropdown-shadow: $--box-shadow-light !default;
310
+$--select-dropdown-empty-color: #999 !default;
311
+/// height||Other|4
312
+$--select-dropdown-max-height: 274px !default;
313
+$--select-dropdown-padding: 6px 0 !default;
314
+$--select-dropdown-empty-padding: 10px 0 !default;
315
+$--select-dropdown-border: solid 1px $--border-color-light !default;
316
+
317
+/* Alert
318
+-------------------------- */
319
+$--alert-padding: 8px 16px !default;
320
+/// borderRadius||Border|2
321
+$--alert-border-radius: $--border-radius-base !default;
322
+/// fontSize||Font|1
323
+$--alert-title-font-size: 13px !default;
324
+/// fontSize||Font|1
325
+$--alert-description-font-size: 12px !default;
326
+/// fontSize||Font|1
327
+$--alert-close-font-size: 12px !default;
328
+/// fontSize||Font|1
329
+$--alert-close-customed-font-size: 13px !default;
330
+
331
+$--alert-success-color: $--color-success-lighter !default;
332
+$--alert-info-color: $--color-info-lighter !default;
333
+$--alert-warning-color: $--color-warning-lighter !default;
334
+$--alert-danger-color: $--color-danger-lighter !default;
335
+
336
+/// height||Other|4
337
+$--alert-icon-size: 16px !default;
338
+/// height||Other|4
339
+$--alert-icon-large-size: 28px !default;
340
+
341
+/* MessageBox
342
+-------------------------- */
343
+/// color||Color|0
344
+$--messagebox-title-color: $--color-text-primary !default;
345
+$--msgbox-width: 420px !default;
346
+$--msgbox-border-radius: 4px !default;
347
+/// fontSize||Font|1
348
+$--messagebox-font-size: $--font-size-large !default;
349
+/// fontSize||Font|1
350
+$--messagebox-content-font-size: $--font-size-base !default;
351
+/// color||Color|0
352
+$--messagebox-content-color: $--color-text-regular !default;
353
+/// fontSize||Font|1
354
+$--messagebox-error-font-size: 12px !default;
355
+$--msgbox-padding-primary: 15px !default;
356
+/// color||Color|0
357
+$--messagebox-success-color: $--color-success !default;
358
+/// color||Color|0
359
+$--messagebox-info-color: $--color-info !default;
360
+/// color||Color|0
361
+$--messagebox-warning-color: $--color-warning !default;
362
+/// color||Color|0
363
+$--messagebox-danger-color: $--color-danger !default;
364
+
365
+/* Message
366
+-------------------------- */
367
+$--message-shadow: $--box-shadow-base !default;
368
+$--message-min-width: 380px !default;
369
+$--message-background-color: #edf2fc !default;
370
+$--message-padding: 15px 15px 15px 20px !default;
371
+/// color||Color|0
372
+$--message-close-icon-color: $--color-text-placeholder !default;
373
+/// height||Other|4
374
+$--message-close-size: 16px !default;
375
+/// color||Color|0
376
+$--message-close-hover-color: $--color-text-secondary !default;
377
+
378
+/// color||Color|0
379
+$--message-success-font-color: $--color-success !default;
380
+/// color||Color|0
381
+$--message-info-font-color: $--color-info !default;
382
+/// color||Color|0
383
+$--message-warning-font-color: $--color-warning !default;
384
+/// color||Color|0
385
+$--message-danger-font-color: $--color-danger !default;
386
+
387
+/* Notification
388
+-------------------------- */
389
+$--notification-width: 330px !default;
390
+/// padding||Spacing|3
391
+$--notification-padding: 14px 26px 14px 13px !default;
392
+$--notification-radius: 8px !default;
393
+$--notification-shadow: $--box-shadow-light !default;
394
+/// color||Color|0
395
+$--notification-border-color: $--border-color-lighter !default;
396
+$--notification-icon-size: 24px !default;
397
+$--notification-close-font-size: $--message-close-size !default;
398
+$--notification-group-margin-left: 13px !default;
399
+$--notification-group-margin-right: 8px !default;
400
+/// fontSize||Font|1
401
+$--notification-content-font-size: $--font-size-base !default;
402
+/// color||Color|0
403
+$--notification-content-color: $--color-text-regular !default;
404
+/// fontSize||Font|1
405
+$--notification-title-font-size: 16px !default;
406
+/// color||Color|0
407
+$--notification-title-color: $--color-text-primary !default;
408
+
409
+/// color||Color|0
410
+$--notification-close-color: $--color-text-secondary !default;
411
+/// color||Color|0
412
+$--notification-close-hover-color: $--color-text-regular !default;
413
+
414
+/// color||Color|0
415
+$--notification-success-icon-color: $--color-success !default;
416
+/// color||Color|0
417
+$--notification-info-icon-color: $--color-info !default;
418
+/// color||Color|0
419
+$--notification-warning-icon-color: $--color-warning !default;
420
+/// color||Color|0
421
+$--notification-danger-icon-color: $--color-danger !default;
422
+
423
+/* Input
424
+-------------------------- */
425
+$--input-font-size: $--font-size-base !default;
426
+/// color||Color|0
427
+$--input-font-color: $--color-text-regular !default;
428
+/// height||Other|4
429
+$--input-width: 140px !default;
430
+/// height||Other|4
431
+$--input-height: 40px !default;
432
+$--input-border: $--border-base !default;
433
+$--input-border-color: $--border-color-base !default;
434
+/// borderRadius||Border|2
435
+$--input-border-radius: $--border-radius-base !default;
436
+$--input-border-color-hover: $--border-color-hover !default;
437
+/// color||Color|0
438
+$--input-background-color: $--color-white !default;
439
+$--input-fill-disabled: $--disabled-fill-base !default;
440
+$--input-color-disabled: $--font-color-disabled-base !default;
441
+/// color||Color|0
442
+$--input-icon-color: $--color-text-placeholder !default;
443
+/// color||Color|0
444
+$--input-placeholder-color: $--color-text-placeholder !default;
445
+$--input-max-width: 314px !default;
446
+
447
+$--input-hover-border: $--border-color-hover !default;
448
+$--input-clear-hover-color: $--color-text-secondary !default;
449
+
450
+$--input-focus-border: $--color-primary !default;
451
+$--input-focus-fill: $--color-white !default;
452
+
453
+$--input-disabled-fill: $--disabled-fill-base !default;
454
+$--input-disabled-border: $--disabled-border-base !default;
455
+$--input-disabled-color: $--disabled-color-base !default;
456
+$--input-disabled-placeholder-color: $--color-text-placeholder !default;
457
+
458
+/// fontSize||Font|1
459
+$--input-medium-font-size: 14px !default;
460
+/// height||Other|4
461
+$--input-medium-height: 36px !default;
462
+/// fontSize||Font|1
463
+$--input-small-font-size: 13px !default;
464
+/// height||Other|4
465
+$--input-small-height: 32px !default;
466
+/// fontSize||Font|1
467
+$--input-mini-font-size: 12px !default;
468
+/// height||Other|4
469
+$--input-mini-height: 28px !default;
470
+
471
+/* Cascader
472
+-------------------------- */
473
+/// color||Color|0
474
+$--cascader-menu-font-color: $--color-text-regular !default;
475
+/// color||Color|0
476
+$--cascader-menu-selected-font-color: $--color-primary !default;
477
+$--cascader-menu-fill: $--fill-base !default;
478
+$--cascader-menu-font-size: $--font-size-base !default;
479
+$--cascader-menu-radius: $--border-radius-base !default;
480
+$--cascader-menu-border: solid 1px $--border-color-light !default;
481
+$--cascader-menu-shadow: $--box-shadow-light !default;
482
+$--cascader-node-background-hover: $--background-color-base !default;
483
+$--cascader-node-color-disabled:$--color-text-placeholder !default;
484
+$--cascader-color-empty:$--color-text-placeholder !default;
485
+$--cascader-tag-background: #f0f2f5;
486
+
487
+/* Group
488
+-------------------------- */
489
+$--group-option-flex: 0 0 (1/5) * 100% !default;
490
+$--group-option-offset-bottom: 12px !default;
491
+$--group-option-fill-hover: rgba($--color-black, 0.06) !default;
492
+$--group-title-color: $--color-black !default;
493
+$--group-title-font-size: $--font-size-base !default;
494
+$--group-title-width: 66px !default;
495
+
496
+/* Tab
497
+-------------------------- */
498
+$--tab-font-size: $--font-size-base !default;
499
+$--tab-border-line: 1px solid #e4e4e4 !default;
500
+$--tab-header-color-active: $--color-text-secondary !default;
501
+$--tab-header-color-hover: $--color-text-regular !default;
502
+$--tab-header-color: $--color-text-regular !default;
503
+$--tab-header-fill-active: rgba($--color-black, 0.06) !default;
504
+$--tab-header-fill-hover: rgba($--color-black, 0.06) !default;
505
+$--tab-vertical-header-width: 90px !default;
506
+$--tab-vertical-header-count-color: $--color-white !default;
507
+$--tab-vertical-header-count-fill: $--color-text-secondary !default;
508
+
509
+/* Button
510
+-------------------------- */
511
+/// fontSize||Font|1
512
+$--button-font-size: $--font-size-base !default;
513
+/// fontWeight||Font|1
514
+$--button-font-weight: $--font-weight-primary !default;
515
+/// borderRadius||Border|2
516
+$--button-border-radius: $--border-radius-base !default;
517
+/// padding||Spacing|3
518
+$--button-padding-vertical: 12px !default;
519
+/// padding||Spacing|3
520
+$--button-padding-horizontal: 20px !default;
521
+
522
+/// fontSize||Font|1
523
+$--button-medium-font-size: $--font-size-base !default;
524
+/// borderRadius||Border|2
525
+$--button-medium-border-radius: $--border-radius-base !default;
526
+/// padding||Spacing|3
527
+$--button-medium-padding-vertical: 10px !default;
528
+/// padding||Spacing|3
529
+$--button-medium-padding-horizontal: 20px !default;
530
+
531
+/// fontSize||Font|1
532
+$--button-small-font-size: 12px !default;
533
+$--button-small-border-radius: #{$--border-radius-base - 1} !default;
534
+/// padding||Spacing|3
535
+$--button-small-padding-vertical: 9px !default;
536
+/// padding||Spacing|3
537
+$--button-small-padding-horizontal: 15px !default;
538
+/// fontSize||Font|1
539
+$--button-mini-font-size: 12px !default;
540
+$--button-mini-border-radius: #{$--border-radius-base - 1} !default;
541
+/// padding||Spacing|3
542
+$--button-mini-padding-vertical: 7px !default;
543
+/// padding||Spacing|3
544
+$--button-mini-padding-horizontal: 15px !default;
545
+
546
+/// color||Color|0
547
+$--button-default-font-color: $--color-text-regular !default;
548
+/// color||Color|0
549
+$--button-default-background-color: $--color-white !default;
550
+/// color||Color|0
551
+$--button-default-border-color: $--border-color-base !default;
552
+
553
+/// color||Color|0
554
+$--button-disabled-font-color: $--color-text-placeholder !default;
555
+/// color||Color|0
556
+$--button-disabled-background-color: $--color-white !default;
557
+/// color||Color|0
558
+$--button-disabled-border-color: $--border-color-lighter !default;
559
+
560
+/// color||Color|0
561
+$--button-primary-border-color: $--color-primary !default;
562
+/// color||Color|0
563
+$--button-primary-font-color: $--color-white !default;
564
+/// color||Color|0
565
+$--button-primary-background-color: $--color-primary !default;
566
+/// color||Color|0
567
+$--button-success-border-color: $--color-success !default;
568
+/// color||Color|0
569
+$--button-success-font-color: $--color-white !default;
570
+/// color||Color|0
571
+$--button-success-background-color: $--color-success !default;
572
+/// color||Color|0
573
+$--button-warning-border-color: $--color-warning !default;
574
+/// color||Color|0
575
+$--button-warning-font-color: $--color-white !default;
576
+/// color||Color|0
577
+$--button-warning-background-color: $--color-warning !default;
578
+/// color||Color|0
579
+$--button-danger-border-color: $--color-danger !default;
580
+/// color||Color|0
581
+$--button-danger-font-color: $--color-white !default;
582
+/// color||Color|0
583
+$--button-danger-background-color: $--color-danger !default;
584
+/// color||Color|0
585
+$--button-info-border-color: $--color-info !default;
586
+/// color||Color|0
587
+$--button-info-font-color: $--color-white !default;
588
+/// color||Color|0
589
+$--button-info-background-color: $--color-info !default;
590
+
591
+$--button-hover-tint-percent: 20% !default;
592
+$--button-active-shade-percent: 10% !default;
593
+
594
+
595
+/* cascader
596
+-------------------------- */
597
+$--cascader-height: 200px !default;
598
+
599
+/* Switch
600
+-------------------------- */
601
+/// color||Color|0
602
+$--switch-on-color: $--color-primary !default;
603
+/// color||Color|0
604
+$--switch-off-color: $--border-color-base !default;
605
+/// fontSize||Font|1
606
+$--switch-font-size: $--font-size-base !default;
607
+$--switch-core-border-radius: 10px !default;
608
+// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义
609
+$--switch-width: 40px !default;
610
+// height||Other|4
611
+$--switch-height: 20px !default;
612
+// height||Other|4
613
+$--switch-button-size: 16px !default;
614
+
615
+/* Dialog
616
+-------------------------- */
617
+$--dialog-background-color: $--color-white !default;
618
+$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default;
619
+/// fontSize||Font|1
620
+$--dialog-title-font-size: $--font-size-large !default;
621
+/// fontSize||Font|1
622
+$--dialog-content-font-size: 14px !default;
623
+/// fontLineHeight||LineHeight|2
624
+$--dialog-font-line-height: $--font-line-height-primary !default;
625
+/// padding||Spacing|3
626
+$--dialog-padding-primary: 20px !default;
627
+
628
+/* Table
629
+-------------------------- */
630
+/// color||Color|0
631
+$--table-border-color: $--border-color-lighter !default;
632
+$--table-border: 1px solid $--table-border-color !default;
633
+/// color||Color|0
634
+$--table-font-color: $--color-text-regular !default;
635
+/// color||Color|0
636
+$--table-header-font-color: $--color-text-secondary !default;
637
+/// color||Color|0
638
+$--table-row-hover-background-color: $--background-color-base !default;
639
+$--table-current-row-background-color: $--color-primary-light-9 !default;
640
+/// color||Color|0
641
+$--table-header-background-color: $--color-white !default;
642
+$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default;
643
+
644
+/* Pagination
645
+-------------------------- */
646
+/// fontSize||Font|1
647
+$--pagination-font-size: 13px !default;
648
+/// color||Color|0
649
+$--pagination-background-color: $--color-white !default;
650
+/// color||Color|0
651
+$--pagination-font-color: $--color-text-primary !default;
652
+$--pagination-border-radius: 3px !default;
653
+/// color||Color|0
654
+$--pagination-button-color: $--color-text-primary !default;
655
+/// height||Other|4
656
+$--pagination-button-width: 35.5px !default;
657
+/// height||Other|4
658
+$--pagination-button-height: 28px !default;
659
+/// color||Color|0
660
+$--pagination-button-disabled-color: $--color-text-placeholder !default;
661
+/// color||Color|0
662
+$--pagination-button-disabled-background-color: $--color-white !default;
663
+/// color||Color|0
664
+$--pagination-hover-color: $--color-primary !default;
665
+
666
+/* Popup
667
+-------------------------- */
668
+/// color||Color|0
669
+$--popup-modal-background-color: $--color-black !default;
670
+/// opacity||Other|1
671
+$--popup-modal-opacity: 0.5 !default;
672
+
673
+/* Popover
674
+-------------------------- */
675
+/// color||Color|0
676
+$--popover-background-color: $--color-white !default;
677
+/// fontSize||Font|1
678
+$--popover-font-size: $--font-size-base !default;
679
+/// color||Color|0
680
+$--popover-border-color: $--border-color-lighter !default;
681
+$--popover-arrow-size: 6px !default;
682
+/// padding||Spacing|3
683
+$--popover-padding: 12px !default;
684
+$--popover-padding-large: 18px 20px !default;
685
+/// fontSize||Font|1
686
+$--popover-title-font-size: 16px !default;
687
+/// color||Color|0
688
+$--popover-title-font-color: $--color-text-primary !default;
689
+
690
+/* Tooltip
691
+-------------------------- */
692
+/// color|1|Color|0
693
+$--tooltip-fill: $--color-text-primary !default;
694
+/// color|1|Color|0
695
+$--tooltip-color: $--color-white !default;
696
+/// fontSize||Font|1
697
+$--tooltip-font-size: 12px !default;
698
+/// color||Color|0
699
+$--tooltip-border-color: $--color-text-primary !default;
700
+$--tooltip-arrow-size: 6px !default;
701
+/// padding||Spacing|3
702
+$--tooltip-padding: 10px !default;
703
+
704
+/* Tag
705
+-------------------------- */
706
+/// color||Color|0
707
+$--tag-info-color: $--color-info !default;
708
+/// color||Color|0
709
+$--tag-primary-color: $--color-primary !default;
710
+/// color||Color|0
711
+$--tag-success-color: $--color-success !default;
712
+/// color||Color|0
713
+$--tag-warning-color: $--color-warning !default;
714
+/// color||Color|0
715
+$--tag-danger-color: $--color-danger !default;
716
+/// fontSize||Font|1
717
+$--tag-font-size: 12px !default;
718
+$--tag-border-radius: 4px !default;
719
+$--tag-padding: 0 10px !default;
720
+
721
+/* Tree
722
+-------------------------- */
723
+/// color||Color|0
724
+$--tree-node-hover-background-color: $--background-color-base !default;
725
+/// color||Color|0
726
+$--tree-font-color: $--color-text-regular !default;
727
+/// color||Color|0
728
+$--tree-expand-icon-color: $--color-text-placeholder !default;
729
+
730
+/* Dropdown
731
+-------------------------- */
732
+$--dropdown-menu-box-shadow: $--box-shadow-light !default;
733
+$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default;
734
+$--dropdown-menuItem-hover-color: $--link-color !default;
735
+
736
+/* Badge
737
+-------------------------- */
738
+/// color||Color|0
739
+$--badge-background-color: $--color-danger !default;
740
+$--badge-radius: 10px !default;
741
+/// fontSize||Font|1
742
+$--badge-font-size: 12px !default;
743
+/// padding||Spacing|3
744
+$--badge-padding: 6px !default;
745
+/// height||Other|4
746
+$--badge-size: 18px !default;
747
+
748
+/* Card
749
+--------------------------*/
750
+/// color||Color|0
751
+$--card-border-color: $--border-color-lighter !default;
752
+$--card-border-radius: 4px !default;
753
+/// padding||Spacing|3
754
+$--card-padding: 20px !default;
755
+
756
+/* Slider
757
+--------------------------*/
758
+/// color||Color|0
759
+$--slider-main-background-color: $--color-primary !default;
760
+/// color||Color|0
761
+$--slider-runway-background-color: $--border-color-light !default;
762
+$--slider-button-hover-color: mix($--color-primary, black, 97%) !default;
763
+$--slider-stop-background-color: $--color-white !default;
764
+$--slider-disable-color: $--color-text-placeholder !default;
765
+$--slider-margin: 16px 0 !default;
766
+$--slider-border-radius: 3px !default;
767
+/// height|1|Other|4
768
+$--slider-height: 6px !default;
769
+/// height||Other|4
770
+$--slider-button-size: 16px !default;
771
+$--slider-button-wrapper-size: 36px !default;
772
+$--slider-button-wrapper-offset: -15px !default;
773
+
774
+/* Steps
775
+--------------------------*/
776
+$--steps-border-color: $--disabled-border-base !default;
777
+$--steps-border-radius: 4px !default;
778
+$--steps-padding: 20px !default;
779
+
780
+/* Menu
781
+--------------------------*/
782
+/// fontSize||Font|1
783
+$--menu-item-font-size: $--font-size-base !default;
784
+/// color||Color|0
785
+$--menu-item-font-color: $--color-text-primary !default;
786
+/// color||Color|0
787
+$--menu-background-color: $--color-white !default;
788
+$--menu-item-hover-fill: $--color-primary-light-9 !default;
789
+
790
+/* Rate
791
+--------------------------*/
792
+$--rate-height: 20px !default;
793
+/// fontSize||Font|1
794
+$--rate-font-size: $--font-size-base !default;
795
+/// height||Other|3
796
+$--rate-icon-size: 18px !default;
797
+/// margin||Spacing|2
798
+$--rate-icon-margin: 6px !default;
799
+$--rate-icon-color: $--color-text-placeholder !default;
800
+
801
+/* DatePicker
802
+--------------------------*/
803
+$--datepicker-font-color: $--color-text-regular !default;
804
+/// color|1|Color|0
805
+$--datepicker-off-font-color: $--color-text-placeholder !default;
806
+/// color||Color|0
807
+$--datepicker-header-font-color: $--color-text-regular !default;
808
+$--datepicker-icon-color: $--color-text-primary !default;
809
+$--datepicker-border-color: $--disabled-border-base !default;
810
+$--datepicker-inner-border-color: #e4e4e4 !default;
811
+/// color||Color|0
812
+$--datepicker-inrange-background-color: $--border-color-extra-light !default;
813
+/// color||Color|0
814
+$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default;
815
+/// color||Color|0
816
+$--datepicker-active-color: $--color-primary !default;
817
+/// color||Color|0
818
+$--datepicker-hover-font-color: $--color-primary !default;
819
+$--datepicker-cell-hover-color: #fff !default;
820
+
821
+/* Loading
822
+--------------------------*/
823
+/// height||Other|4
824
+$--loading-spinner-size: 42px !default;
825
+/// height||Other|4
826
+$--loading-fullscreen-spinner-size: 50px !default;
827
+
828
+/* Scrollbar
829
+--------------------------*/
830
+$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default;
831
+$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default;
832
+
833
+/* Carousel
834
+--------------------------*/
835
+/// fontSize||Font|1
836
+$--carousel-arrow-font-size: 12px !default;
837
+$--carousel-arrow-size: 36px !default;
838
+$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default;
839
+$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default;
840
+/// width||Other|4
841
+$--carousel-indicator-width: 30px !default;
842
+/// height||Other|4
843
+$--carousel-indicator-height: 2px !default;
844
+$--carousel-indicator-padding-horizontal: 4px !default;
845
+$--carousel-indicator-padding-vertical: 12px !default;
846
+$--carousel-indicator-out-color: $--border-color-hover !default;
847
+
848
+/* Collapse
849
+--------------------------*/
850
+/// color||Color|0
851
+$--collapse-border-color: $--border-color-lighter !default;
852
+/// height||Other|4
853
+$--collapse-header-height: 48px !default;
854
+/// color||Color|0
855
+$--collapse-header-background-color: $--color-white !default;
856
+/// color||Color|0
857
+$--collapse-header-font-color: $--color-text-primary !default;
858
+/// fontSize||Font|1
859
+$--collapse-header-font-size: 13px !default;
860
+/// color||Color|0
861
+$--collapse-content-background-color: $--color-white !default;
862
+/// fontSize||Font|1
863
+$--collapse-content-font-size: 13px !default;
864
+/// color||Color|0
865
+$--collapse-content-font-color: $--color-text-primary !default;
866
+
867
+/* Transfer
868
+--------------------------*/
869
+$--transfer-border-color: $--border-color-lighter !default;
870
+$--transfer-border-radius: $--border-radius-base !default;
871
+/// height||Other|4
872
+$--transfer-panel-width: 200px !default;
873
+/// height||Other|4
874
+$--transfer-panel-header-height: 40px !default;
875
+/// color||Color|0
876
+$--transfer-panel-header-background-color: $--background-color-base !default;
877
+/// height||Other|4
878
+$--transfer-panel-footer-height: 40px !default;
879
+/// height||Other|4
880
+$--transfer-panel-body-height: 246px !default;
881
+/// height||Other|4
882
+$--transfer-item-height: 30px !default;
883
+/// height||Other|4
884
+$--transfer-filter-height: 32px !default;
885
+
886
+/* Header
887
+  --------------------------*/
888
+$--header-padding: 0 20px !default;
889
+
890
+/* Footer
891
+--------------------------*/
892
+$--footer-padding: 0 20px !default;
893
+
894
+/* Main
895
+--------------------------*/
896
+$--main-padding: 20px !default;
897
+
898
+/* Timeline
899
+--------------------------*/
900
+$--timeline-node-size-normal: 12px !default;
901
+$--timeline-node-size-large: 14px !default;
902
+$--timeline-node-color: $--border-color-light !default;
903
+
904
+/* Backtop
905
+--------------------------*/
906
+/// color||Color|0
907
+$--backtop-background-color: $--color-white !default;
908
+/// color||Color|0
909
+$--backtop-font-color: $--color-primary !default;
910
+/// color||Color|0
911
+$--backtop-hover-background-color: $--border-color-extra-light !default;
912
+
913
+/* Link
914
+--------------------------*/
915
+/// fontSize||Font|1
916
+$--link-font-size: $--font-size-base !default;
917
+/// fontWeight||Font|1
918
+$--link-font-weight: $--font-weight-primary !default;
919
+/// color||Color|0
920
+$--link-default-font-color: $--color-text-regular !default;
921
+/// color||Color|0
922
+$--link-default-active-color: $--color-primary !default;
923
+/// color||Color|0
924
+$--link-disabled-font-color: $--color-text-placeholder !default;
925
+/// color||Color|0
926
+$--link-primary-font-color: $--color-primary !default;
927
+/// color||Color|0
928
+$--link-success-font-color: $--color-success !default;
929
+/// color||Color|0
930
+$--link-warning-font-color: $--color-warning !default;
931
+/// color||Color|0
932
+$--link-danger-font-color: $--color-danger !default;
933
+/// color||Color|0
934
+$--link-info-font-color: $--color-info !default;
935
+/* Calendar
936
+--------------------------*/
937
+/// border||Other|4
938
+$--calendar-border: $--table-border !default;
939
+/// color||Other|4
940
+$--calendar-selected-background-color: #F2F8FE !default;
941
+$--calendar-cell-width: 85px !default;
942
+
943
+/* Form
944
+-------------------------- */
945
+/// fontSize||Font|1
946
+$--form-label-font-size: $--font-size-base !default;
947
+
948
+/* Avatar
949
+--------------------------*/
950
+/// color||Color|0
951
+$--avatar-font-color: #fff !default;
952
+/// color||Color|0
953
+$--avatar-background-color: #C0C4CC !default;
954
+/// fontSize||Font Size|1
955
+$--avatar-text-font-size: 14px !default;
956
+/// fontSize||Font Size|1
957
+$--avatar-icon-font-size: 18px !default;
958
+/// borderRadius||Border|2
959
+$--avatar-border-radius: $--border-radius-base !default;
960
+/// size|1|Avatar Size|3
961
+$--avatar-large-size: 40px !default;
962
+/// size|1|Avatar Size|3
963
+$--avatar-medium-size: 36px !default;
964
+/// size|1|Avatar Size|3
965
+$--avatar-small-size: 28px !default;
966
+
967
+/* Break-point
968
+--------------------------*/
969
+$--sm: 768px !default;
970
+$--md: 992px !default;
971
+$--lg: 1200px !default;
972
+$--xl: 1920px !default;
973
+
974
+$--breakpoints: (
975
+  'xs' : (max-width: $--sm - 1),
976
+  'sm' : (min-width: $--sm),
977
+  'md' : (min-width: $--md),
978
+  'lg' : (min-width: $--lg),
979
+  'xl' : (min-width: $--xl)
980
+);
981
+
982
+$--breakpoints-spec: (
983
+  'xs-only' : (max-width: $--sm - 1),
984
+  'sm-and-up' : (min-width: $--sm),
985
+  'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})",
986
+  'sm-and-down': (max-width: $--md - 1),
987
+  'md-and-up' : (min-width: $--md),
988
+  'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})",
989
+  'md-and-down': (max-width: $--lg - 1),
990
+  'lg-and-up' : (min-width: $--lg),
991
+  'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})",
992
+  'lg-and-down': (max-width: $--xl - 1),
993
+  'xl-only' : (min-width: $--xl),
994
+);

File diff suppressed because it is too large
+ 1 - 0
src/element-ui/theme/alert.css


+ 0 - 0
src/element-ui/theme/aside.css


Some files were not shown because too many files changed in this diff