diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.browserslistrc b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.browserslistrc new file mode 100644 index 00000000..d6471a38 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.browserslistrc @@ -0,0 +1,2 @@ +> 1% +last 2 versions diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.editorconfig b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.editorconfig new file mode 100644 index 00000000..7053c49a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.eslintrc.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.eslintrc.js new file mode 100644 index 00000000..f62621ce --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.eslintrc.js @@ -0,0 +1,40 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/essential', + '@vue/standard' + ], + parserOptions: { + parser: 'babel-eslint' + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'semi': ['off', 'always'], + 'prefer-promise-reject-errors': ['error', { 'allowEmptyReject': true }], + 'no-trailing-spaces': ['error', { 'skipBlankLines': true }], + 'prefer-const': ['off'], + 'quote-props': ['off'], + 'object-curly-spacing': ['off'], + 'dot-notation': ['off'], + 'lines-between-class-members': ['off'], + // 'no-undef': ['off', 'always'], + // 'no-unused-vars': ['off', 'always'], + 'no-new-func': ['off', 'always'], + 'no-console': ['off'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + } + ] +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.gitignore b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.gitignore new file mode 100644 index 00000000..a0dddc6f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/README.md b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/README.md new file mode 100644 index 00000000..fe1441d6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/README.md @@ -0,0 +1,17 @@ +## 橙单代码生成器 +### 构建命令 +``` bash +# install dependencies +npm install + +# serve with hot reload at localhost:8080 +npm run dev + +# build for production with minification +npm run build + +# run all tests +npm test +``` + +### 官方文档:[http://101.200.178.51/](http://101.200.178.51/) \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/babel.config.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/babel.config.js new file mode 100644 index 00000000..e9558405 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/jest.config.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/jest.config.js new file mode 100644 index 00000000..0f957914 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest' +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/package.json b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/package.json new file mode 100644 index 00000000..1fcb6289 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/package.json @@ -0,0 +1,61 @@ +{ + "name": "orange-single-page-project", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "dev": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "axios": "^0.18.0", + "echarts": "^4.2.1", + "element-ui": "^2.13.0", + "jquery": "^3.3.1", + "jsencrypt": "^3.0.0-rc.1", + "json-bigint": "^0.3.0", + "layui-layer": "^1.0.9", + "lodash": "^4.17.5", + "core-js": "^3.6.4", + "register-service-worker": "^1.6.2", + "sortablejs": "^1.7.0", + "v-charts": "^1.19.0", + "vue": "^2.6.11", + "vue-router": "^3.1.5", + "vuex": "^3.1.2", + "wangeditor": "^3.1.1" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.2.0", + "@vue/cli-plugin-eslint": "~4.2.0", + "@vue/cli-plugin-pwa": "~4.2.0", + "@vue/cli-plugin-router": "~4.2.0", + "@vue/cli-plugin-unit-jest": "~4.2.0", + "@vue/cli-plugin-vuex": "~4.2.0", + "@vue/cli-service": "~4.2.0", + "@vue/eslint-config-standard": "^5.1.0", + "@vue/test-utils": "1.0.0-beta.31", + "babel-eslint": "^10.0.3", + "eslint": "^6.7.2", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^6.1.2", + "lint-staged": "^9.5.0", + "node-sass": "^4.13.1", + "sass-loader": "^7.3.1", + "vue-template-compiler": "^2.6.11" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.{js,jsx,vue}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/favicon.ico b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/favicon.ico differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-192x192.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-192x192.png new file mode 100644 index 00000000..b02aa64d Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-192x192.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-512x512.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-512x512.png new file mode 100644 index 00000000..06088b01 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-512x512.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-maskable-192x192.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-maskable-192x192.png new file mode 100644 index 00000000..791e9c8c Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-maskable-192x192.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-maskable-512x512.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-maskable-512x512.png new file mode 100644 index 00000000..5f2098ed Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/android-chrome-maskable-512x512.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-120x120.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-120x120.png new file mode 100644 index 00000000..1427cf62 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-120x120.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-152x152.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-152x152.png new file mode 100644 index 00000000..f24d454a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-152x152.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-180x180.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-180x180.png new file mode 100644 index 00000000..404e192a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-180x180.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-60x60.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-60x60.png new file mode 100644 index 00000000..cf10a560 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-60x60.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-76x76.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-76x76.png new file mode 100644 index 00000000..c500769e Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon-76x76.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon.png new file mode 100644 index 00000000..03c0c5d5 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/apple-touch-icon.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/favicon-16x16.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/favicon-16x16.png new file mode 100644 index 00000000..42af0096 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/favicon-16x16.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/favicon-32x32.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/favicon-32x32.png new file mode 100644 index 00000000..46ca04de Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/favicon-32x32.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/msapplication-icon-144x144.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/msapplication-icon-144x144.png new file mode 100644 index 00000000..7808237a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/msapplication-icon-144x144.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/mstile-150x150.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/mstile-150x150.png new file mode 100644 index 00000000..3b37a43a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/mstile-150x150.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/safari-pinned-tab.svg b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/safari-pinned-tab.svg new file mode 100644 index 00000000..732afd8e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/img/icons/safari-pinned-tab.svg @@ -0,0 +1,149 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/index.html b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/index.html new file mode 100644 index 00000000..8d49ea34 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + UAA应用管理项目 + + + +
+ + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/robots.txt b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/App.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/App.vue new file mode 100644 index 00000000..857c190e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/App.vue @@ -0,0 +1,19 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/AuthClientDetailsController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/AuthClientDetailsController.js new file mode 100644 index 00000000..20d9306a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/AuthClientDetailsController.js @@ -0,0 +1,25 @@ +export default class AuthClientDetailsController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/authClientDetails/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/authClientDetails/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/uaaadmin/authClientDetails/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/authClientDetails/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/authClientDetails/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/authClientDetails/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/DictionaryController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/DictionaryController.js new file mode 100644 index 00000000..f414b366 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/DictionaryController.js @@ -0,0 +1,14 @@ +import * as staticDict from '@/staticDict' + +export default class DictionaryController { + static dictUserStatus () { + return new Promise((resolve) => { + resolve(staticDict.UserStatus); + }); + } + static dictUserType () { + return new Promise((resolve) => { + resolve(staticDict.UserType); + }); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SysUaaOperatorController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SysUaaOperatorController.js new file mode 100644 index 00000000..dced9a06 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SysUaaOperatorController.js @@ -0,0 +1,29 @@ +export default class SysUaaOperatorController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaOperator/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaOperator/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/uaaadmin/sysUaaOperator/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaOperator/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaOperator/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaOperator/delete', 'post', params, axiosOption, httpOption); + } + + static resetPassword (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaOperator/resetPassword', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SysUaaUserController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SysUaaUserController.js new file mode 100644 index 00000000..8017b23d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SysUaaUserController.js @@ -0,0 +1,29 @@ +export default class SysUaaUserController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaUser/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaUser/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/uaaadmin/sysUaaUser/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaUser/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaUser/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaUser/delete', 'post', params, axiosOption, httpOption); + } + + static resetPassword (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/uaaadmin/sysUaaUser/resetPassword', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SystemController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SystemController.js new file mode 100644 index 00000000..a0bc5ca2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/Controller/SystemController.js @@ -0,0 +1,13 @@ +export default class SystemController { + static login (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/doLogin', 'post', params, axiosOption, httpOption); + } + + static logout (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/doLogout', 'post', params, axiosOption, httpOption); + } + + static changePassword (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/changePassword', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/index.js new file mode 100644 index 00000000..7b93b0ba --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/api/index.js @@ -0,0 +1,13 @@ +import SystemController from './Controller/SystemController' +import DictionaryController from './Controller/DictionaryController' +import AuthClientDetailsController from './Controller/AuthClientDetailsController.js' +import SysUaaUserController from './Controller/SysUaaUserController.js' +import SysUaaOperatorController from './Controller/SysUaaOperatorController.js' + +export { + SystemController, + DictionaryController, + AuthClientDetailsController, + SysUaaUserController, + SysUaaOperatorController +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/default-header.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/default-header.jpg new file mode 100644 index 00000000..222d18da Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/default-header.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/login_bg.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/login_bg.jpg new file mode 100644 index 00000000..74474f84 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/login_bg.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/logo.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/logo.jpg new file mode 100644 index 00000000..a88fc0d0 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/logo.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/orange-group1.png b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/orange-group1.png new file mode 100644 index 00000000..efd59f26 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/img/orange-group1.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/base.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/base.scss new file mode 100644 index 00000000..2ceda7be --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/base.scss @@ -0,0 +1,593 @@ +@import "element-color.scss"; +@import "transition.scss"; + +html, body { + padding: 0; + margin: 0; + font-size: 14px; + font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; + background-color: rgb(228,240,255); +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +$header-height: 60px; + +// 过滤组件长度 +$filter-item-width: 250px; +// 范围选择过滤组件长度 +$filter-item-range-width: 400px; +// 左侧过滤树组件每一项高度 +$tree-node-height: 40px; +// 高级管理表单标题高度 +$advanced-title-height: 50px; +$border-color: rgb(216, 220, 229); +$menuHover: rgba(255,255,255,0.3); +$menu-background-color: transparent; +$tabs-header-margin-bottom: 25px; +$tab-header-background-color: #EBEEF5; +$image-item-width: 65px; +$box-padding-size: 25px; + +/** + * 弹窗样式,封装的layer的弹窗 + **/ +body .layer-dialog .layui-layer-title{ + border-radius: 4px 4px 0px 0px; + border:1px solid #01000000; +} + +body .layer-dialog .layui-layer-setwin {color: #ffffff} + +body .layer-dialog { + border-radius: 4px; + border:1px solid #01000000; +} + +body .layer-dialog .layui-layer-content { + padding: $box-padding-size; +} + + +.demo-project { + .el-main { + padding: 0px; + } + .flex-box { + flex-wrap: wrap; + } + .scrollbar_dropdown__wrap { + overflow-x: hidden; + } + + .icon-btn.el-button { + font-size: 18px; + padding: 5px 0px; + } + + .default-padding-box { + padding: $box-padding-size; + } + + .padding-no-top { + padding: 0px $box-padding-size $box-padding-size $box-padding-size; + } + + .default-border { + border: 1px solid $border-color1; + } + + .default-border-left { + border-left: 1px solid $border-color1; + } + + .default-border-right { + border-right: 1px solid $border-color1; + } + + .default-border-top { + border-top: 1px solid $border-color1; + } + + .default-border-bottom { + border-bottom: 1px solid $border-color1; + } + + .page-close-box { + position: absolute; + background: #13ce66; + transform: rotate(45deg); + height: 60px; + width: 60px; + right: -30px; + top:-30px; + text-align: center; + + .el-button { + transform: rotate(-45deg); + color: white; + margin-top: 30px; + } + } + + /** + * 过滤组件样式 + **/ + .mask-box { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); + top: 0; + z-index: 10; + } + + .filter-box { + position: relative; + background-color: white; + padding: $box-padding-size $box-padding-size 0px $box-padding-size; + z-index: 20; + } + + .advance-filter-box { + padding-bottom: 25px; + } + + .filter-item { + width: $filter-item-width; + } + + .cascader-item { + width: 160px!important; + } + + .is-range, .is-search { + width: $filter-item-range-width; + } + + .table-operation-box { + align-self: flex-end; + margin-bottom: 10px; + overflow: hidden; + } + + /** + * 左侧树状组件的样式,用户高级管理表单以及用户管理表单 + **/ + .advanced-left-box { + border-right: 1px solid $border-color; + .el-tree-node__content { + height: $tree-node-height; + } + + .tree-node-item { + height: $tree-node-height; + line-height: $tree-node-height; + width: 100%; + + .tree-node-menu { + display: none; + float: right; + padding-right: 10px; + color: red!important; + } + + &:hover .tree-node-menu { + display: block; + } + } + + .el-tree-node .el-button+.el-button { + margin-left: 5px; + } + } + /** + * form表单输入组件宽度 + **/ + .full-width-input { + .el-select { + width: 100%; + } + + .el-input { + width: 100%; + } + + .el-cascader { + width: 100%; + } + + .el-date-editor { + width: 100%; + } + + .el-input-number { + width: 100%; + } + } + /** + * 左侧菜单样式 + **/ + .sidebar-bg { + background: linear-gradient(#FC8051, #EB6265); + } + + .sidebar-title { + height: 160px; + overflow: hidden; + } + + .sidebar-title-text { + width: 100%; + font-size: 18px; + color: #fff; + text-align: center; + margin: 0px; + } + .el-menu { + background-color: $menu-background-color; + border-right-width: 0px; + } + + .menu-wrapper { + .el-menu { + background: linear-gradient(#FC8051, #EB6265); + } + + .el-menu-item { + color: white; + i { + color: white; + } + &:hover { + background-color: rgba(255,255,255,0.3)!important; + } + } + + .el-submenu { + .el-menu { + background: none; + } + } + } + + .el-submenu__title i { + color: white; + } + + .el-menu--collapse { + .el-submenu__icon-arrow { + display: none; + } + } + + .nest-menu .el-submenu>.el-submenu__title, .el-submenu .el-menu-item { + min-width: 180px!important; + background: $menu-background-color; + } + + .el-menu-item.is-active { + border-left: 3px solid #47ba5a; + background-color: rgba(255,255,255,0.3)!important; + } + + .el-submenu__title { + background-color: $menu-background-color!important; + } + + .el-menu { + border-right-width: 0px; + } + + .menu-collapse-btn { + padding: 0px; + width: 15px; + border-radius: 2px; + border: none; + height: 100px; + background-color: $--color-primary-light-5; + position: fixed; + top: 20%; + z-index: -1; + color: white; + + &:hover { + background-color: $--color-primary-light-7; + } + .chart-border { + border: 1px solid #EBEEF5; + } + } + + /** + * 多tab页表单,tab样式 + **/ + .el-tabs__header { + margin: 0 0 20px; + } + /** + * 表格表头背景色 + **/ + .table-header-gray, .has-gutter .gutter { + background-color: $tab-header-background-color; + } + + /** + * 图片上传以及显示样式 + **/ + .upload-image-item { + font-size: 28px; + color: #8c939d; + width: $image-item-width; + height: $image-item-width; + text-align: center; + display: block; + + .el-upload i { + line-height: $image-item-width; + } + } + + .upload-image-multi { + display: inline; + } + + .upload-image-item .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + } + .upload-image-item .el-upload:hover { + border-color: #409eff; + } + + .upload-image-show { + width: $image-item-width; + height: $image-item-width; + display: inline; + } + + .table-cell-image { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + text-align: center; + font-size: $image-item-width; + color: #606266; + margin: 0px 5px; + } + + .upload-image-list .el-upload-list__item { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + } + + .upload-image-item .el-upload-list--picture-card .el-upload-list__item { + width: $image-item-width; + height: $image-item-width; + } + + .upload-image-item .el-upload.el-upload--text { + width: $image-item-width; + height: $image-item-width; + } + + .upload-image-item .el-upload--picture-card { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + } + /** + * + **/ + $header-menu-height: 32px; + + .sidebar { + height: 100%; + background-color: #304156; + overflow: hidden; + } + + .header { + display: flex; + height: $header-height; + background-color: white; + } + + .header .menu-column { + margin-right: 20px; + .el-menu-item.is-active { + border-left: 0px solid #47ba5a; + } + } + + .header-menu { + float: right; + height: $header-menu-height; + line-height: $header-menu-height; + margin-top: ($header-height - $header-menu-height) / 2; + } + + .header-img { + width: $header-menu-height; + height: $header-menu-height; + border-radius: 50%; + margin-left: 10px; + float: right; + } + + .user-dropdown { + color: $sub-text-color; + cursor: pointer; + font-size: 12px; + } + .user-dropdown-item { + font-size: 12px; + color: $main-text-color; + } + + .hamburger-container { + line-height: 70px; + height: $header-height; + float: left; + padding: 0 10px; + } + + .el-submenu__title { + background: #00000000; + } + + ::-webkit-scrollbar { + width: 7px; + height: 7px; + background: none; + } + + ::-webkit-scrollbar-thumb { + background: #DDDEE0; + border-radius: 7px; + } + + ::-webkit-scrollbar-thumb:hover { + background: #A8A8A8; + } + .tree-select { + .el-tree-node__content { + height: 34px; + line-height: 34px; + padding-right: 10px; + } + } + + .tree-select.single-select-tree { + .el-tree-node.is-current > .el-tree-node__content > .el-tree-node__label { + color: $--color-primary; + font-weight: 700; + } + } + + .cell { + .operation-cell { + color: #006CDC; + cursor: pointer; + text-decoration: underline; + } + } + + .single-select-tree { + min-width: 200px!important; + } + + .base-card-header { + display: flex; + align-items: center; + height: 50px; + line-height: 50px; + } + + .base-card-operation { + flex-grow: 1; + display: flex; + justify-content: flex-end; + } + + .el-card__header { + padding: 0px 15px; + } + .el-card__body { + padding: 15px; + } + + .custom-cascader { + width: 200px!important; + } + + .no-scroll { + overflow: hidden; + } + + .custom-scroll .el-scrollbar__view { + overflow-x: hidden!important; + } + + .upload-img-del { + position: absolute; + height: 20px; + width: 20px; + line-height: 20px; + font-size: 16px; + top: 2px; + right: 2px; + color: #C0C4CC; + } + + .upload-img-del:hover { + color: #EF5E1C; + } + + .input-label { + display: inline-block; + height: 29px; + line-height: 28px; + } + + .input-progress { + height: 29px; + display: flex; + align-items: center; + } + + .input-item { + width: 100%!important; + } + + .table-header-gray { + background: rgba(237,237,237,1); + } + + .card-header { + display: flex; + justify-content: space-between; + padding: 10px 0px; + line-height: 28px; + } +} + +.ml20 { + margin-left: 20px; +} + +.mr20 { + margin-right: 20px; +} + +.mt20 { + margin-top: 20px; +} + +.mb20 { + margin-bottom: 20px; +} + +.pl20 { + padding-left: 20px; +} + +.pr20 { + padding-right: 20px; +} + +.pt20 { + padding-top: 20px; +} + +.pb20 { + padding-bottom: 20px; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/element-color.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/element-color.scss new file mode 100644 index 00000000..7487d64c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/element-color.scss @@ -0,0 +1,25 @@ +$main-text-color: #303133; +$normal-text-color: #606266; +$sub-text-color: #909399; +$placeholder-text-color: #C0C4CC; + +$border-color1: #DCDFE6; +$border-color2: #E4E7ED; +$border-color3: #EBEEF5; +$border-color4: #F2F6FC; + +$success-color: #67C23A; +$warning-color: #E6A23C; +$danger-color: #F56C6C; +$info-color: #909399; +$--color-white: white; +$--color-primary: #EF5E1C !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/form-style.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/form-style.scss new file mode 100644 index 00000000..f13e0e01 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/form-style.scss @@ -0,0 +1,112 @@ +.form-advanced-manager { + .advance-filter-box { + position: absolute; + top: 100%; + left: 0px; + background-color: white; + width: 100%; + padding: 10px $box-padding-size 15px $box-padding-size; + } + + .title-box { + border-bottom: 1px solid $border-color; + padding: 0px 20px; + z-index: 20; + background-color: white; + height: $advanced-title-height; + + .title { + line-height: $advanced-title-height; + color: #606266; + } + + .menu-box { + position: absolute; + top: 0px; + right: 10px; + height: $advanced-title-height; + + .el-row { + margin: 10px 0px; + height: $advanced-title-height - 20; + } + } + } + + .advanced-right-box { + padding: 0px; + .gutter-box { + margin: (($advanced-title-height - 16)/2) 0px; + height: 16px; + width: 3px; + background-color: $--color-primary; + float: left + } + } +} + +.form-dict-manager { + .dict-title { + height: 50px; + line-height: 50px; + color: $main-text-color; + border-bottom: 1px solid $border-color1; + font-size: 14px; + + span { + margin-left: 20px; + } + } + + .dict-item { + width: 100%; + height: 40px; + line-height: 40px; + color: #606266; + cursor: pointer; + padding-left: 20px; + + &:hover { + background-color: $--color-primary-light-9; + } + } + + .active-dict-item { + border-left: 3px solid $--color-primary; + color: $--color-primary; + background-color: $--color-primary-light-9 !important; + } + + .el-scrollbar__bar.is-horizontal { + display: none!important; + } +} + + +.form-table-manager { + .advance-filter-box { + position: absolute; + padding: 20px; + top: 100%; + left: 0px; + background-color: white; + width: 100%; + padding: 10px $box-padding-size 15px $box-padding-size; + } +} + +.form-table-multi-select { + // +} + +.form-config { + padding: $box-padding-size; +} + +.form-multi-fragment { + // +} + +.form-single-fragment { + // +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/index.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/index.scss new file mode 100644 index 00000000..a88aa046 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/index.scss @@ -0,0 +1,3 @@ +@import "../theme/index.css"; +@import "base.scss"; +@import "form-style.scss"; \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/transition.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/transition.scss new file mode 100644 index 00000000..49d81925 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/style/transition.scss @@ -0,0 +1,31 @@ +/*fade*/ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/*fade*/ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/fonts/element-icons.ttf b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/fonts/element-icons.ttf new file mode 100644 index 00000000..91b74de3 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/fonts/element-icons.ttf differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/fonts/element-icons.woff b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/fonts/element-icons.woff new file mode 100644 index 00000000..02b9a253 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/fonts/element-icons.woff differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/index.css b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/index.css new file mode 100644 index 00000000..862181da --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/assets/theme/index.css @@ -0,0 +1 @@ +@charset "UTF-8";.el-pagination--small .arrow.disabled,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*,.el-table--hidden{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:""}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#FDA833}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#FDA833}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#FDA833}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#FDA833;color:#FFF}.el-dialog,.el-pager li{background:#FFF;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#FDA833}.el-pager li.active{color:#FDA833;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#FDA833}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:rgb(255, 246, 235);color:rgb(253, 185, 92)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:""}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #FDA833;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #FDA833;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #E4E7ED;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:rgb(255, 246, 235)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#FDA833}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:rgb(255, 246, 235)}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:rgb(255, 246, 235)}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#FDA833}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#FDA833}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#FDA833;border-color:#FDA833;-webkit-box-shadow:-1px 0 0 0 #FDA833;box-shadow:-1px 0 0 0 #FDA833}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #FDA833;box-shadow:0 0 2px 2px #FDA833}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#FDA833}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#DCDFE6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#FDA833;background-color:#FDA833}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#FDA833;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#FDA833;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#FDA833}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-select .el-input.is-focus .el-input__inner{border-color:#FDA833}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;right:-7px;top:0;color:#FFF}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#F5F7FA}.el-table th,.el-table tr{background-color:#FFF}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table--border td:first-child .cell,.el-table--border th:first-child .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#FDA833}.el-table th.required>div::before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#FDA833}.el-table .descending .sort-caret.descending{border-top-color:#FDA833}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:rgb(255, 246, 235)}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#F5F7FA}.el-table__body tr.current-row>td{background-color:rgb(255, 246, 235)}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:rgb(255, 246, 235);color:rgb(253, 185, 92)}.el-table-filter__list-item.is-active{background-color:#FDA833;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#FDA833}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#FDA833;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#FDA833}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#FDA833}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#FDA833}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#FDA833;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#FDA833;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#FDA833}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#FDA833}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#FDA833}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#FDA833;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#FDA833}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#FDA833}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#FDA833;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input:-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#FDA833}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#FDA833}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#FDA833}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#FDA833}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#FDA833}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#FDA833}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#FDA833}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#FDA833;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#FDA833;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#FDA833}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #FDA833 inset;box-shadow:0 0 2px 2px #FDA833 inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#FDA833}.el-tabs__item:hover{color:#FDA833;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#FDA833;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#FDA833}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#FDA833}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#FDA833;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#F5F7FA}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#FDA833}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#FDA833}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-upload-cover::after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#FDA833;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #FDA833;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#FDA833}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#FDA833;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#FDA833;stroke-linecap:round}.el-loading-spinner i{color:#FDA833}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#FDA833;color:#FDA833}.el-upload:focus .el-upload-dragger{border-color:#FDA833}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#FDA833;font-style:normal}.el-upload-dragger:hover{border-color:#FDA833}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #FDA833}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#FDA833}.el-upload-list__item:hover{background-color:#F5F7FA}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#FDA833;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#FDA833}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#FDA833;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner::after{height:100%}.el-progress-bar__innerText{color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#F56C6C;border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#FDA833}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border:1px solid #EBEEF5;background-color:#FFF;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#FDA833;border-color:#FDA833}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#FDA833}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#FDA833}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#FDA833}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:rgb(255, 246, 235);border-color:rgb(255, 238, 214);display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#FDA833;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#FDA833}.el-tag .el-tag__close{color:#FDA833}.el-tag .el-tag__close:hover{color:#FFF;background-color:#FDA833}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#FDA833;border-color:#FDA833;color:#fff}.el-tag--dark.is-hit{border-color:#FDA833}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:rgb(253, 185, 92)}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:rgb(254, 220, 173);color:#FDA833}.el-tag--plain.is-hit{border-color:#FDA833}.el-tag--plain .el-tag__close{color:#FDA833}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#FDA833}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#FDA833}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#FDA833;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#C0C4CC}.el-cascader__search-input:-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #FDA833;box-shadow:0 0 3px 2px #FDA833}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#FDA833;border-color:#FDA833}.el-color-dropdown__link-btn{cursor:pointer;color:#FDA833;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(primary,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;background-image:none;border:1px solid #DCDFE6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#FDA833}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;background-image:none;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#C0C4CC;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#FDA833;outline:0}.el-input__suffix{right:5px;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#FDA833;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#FDA833}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#FDA833}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #FDA833}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#FDA833}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#FDA833}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#FDA833}.el-link.el-link--primary:hover{color:rgb(253, 185, 92)}.el-link.el-link--primary.is-disabled{color:rgb(254, 212, 153)}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#C0C4CC;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.el-button,.el-checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#FDA833;border-color:rgb(254, 229, 194);background-color:rgb(255, 246, 235)}.el-button:active{color:rgb(228, 151, 46);border-color:rgb(228, 151, 46);outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#FDA833;color:#FDA833}.el-button.is-active,.el-button.is-plain:active{color:rgb(228, 151, 46);border-color:rgb(228, 151, 46)}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#FDA833;border-color:#FDA833}.el-button--primary:focus,.el-button--primary:hover{background:rgb(253, 185, 92);border-color:rgb(253, 185, 92);color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:rgb(228, 151, 46);border-color:rgb(228, 151, 46);color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:rgb(254, 212, 153);border-color:rgb(254, 212, 153)}.el-button--primary.is-plain{color:#FDA833;background:rgb(255, 246, 235);border-color:rgb(254, 220, 173)}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#FDA833;border-color:#FDA833;color:#FFF}.el-button--primary.is-plain:active{background:rgb(228, 151, 46);border-color:rgb(228, 151, 46);color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:rgb(254, 203, 133);background-color:rgb(255, 246, 235);border-color:rgb(255, 238, 214)}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#FDA833;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:rgb(253, 185, 92);border-color:transparent;background-color:transparent}.el-button--text:active{color:rgb(228, 151, 46);background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#FDA833}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox-button__inner,.el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#FDA833}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#FDA833;border-color:#FDA833}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#FDA833}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#FDA833}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#FDA833}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#FDA833}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#FDA833;border-color:#FDA833;-webkit-box-shadow:-1px 0 0 0 rgb(254, 203, 133);box-shadow:-1px 0 0 0 rgb(254, 203, 133)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#FDA833}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#FDA833}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#FDA833}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#FDA833;background:#FDA833}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#FDA833}.el-radio__input.is-focus .el-radio__inner{border-color:#FDA833}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#FDA833}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #FDA833;box-shadow:0 0 2px 2px #FDA833}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#FDA833;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-webkit-box;display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/DateRange/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/DateRange/index.vue new file mode 100644 index 00000000..f4dd2c0b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/DateRange/index.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Dialog/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Dialog/index.js new file mode 100644 index 00000000..0e5c545f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Dialog/index.js @@ -0,0 +1,77 @@ +import $ from 'jquery'; +import Vue from 'vue'; +import router from '@/router'; +import store from '@/store'; + +window.jQuery = $; +const layer = require('layui-layer'); + +class Dialog { + /** + * 关闭弹窗 + * @param {*} index 要关闭的弹窗的index + */ + static close (index) { + layer.close(index); + } + /** + * 关闭所有弹窗 + */ + static closeAll () { + layer.closeAll(); + } + /** + * 打开弹窗 + * @param {*} title 弹窗标题 + * @param {*} component 弹窗内容的组件 + * @param {*} options 弹窗设置(详情请见layui官网) + * @param {*} params 弹窗组件参数 + */ + static show (title, component, options, params) { + return new Promise((resolve, reject) => { + let layerOptions = { + title: title, + type: 1, + skin: 'layer-dialog', + resize: false, + offset: 'auto', + zIndex: 1000, + index: 0, + contentDom: null + }; + + layerOptions = {...layerOptions, ...options}; + layerOptions.end = () => { + if (layerOptions.contentDom) document.body.removeChild(layerOptions.contentDom); + } + + let observer = { + cancel: function (isSuccess = false) { + layer.close(this.index); + if (isSuccess) { + resolve(); + } else { + reject(); + } + }, + index: -1 + } + layerOptions.cancel = () => { + reject(); + } + let dom = document.createElement('div'); + document.body.appendChild(dom); + let Content = Vue.extend(component); + let vueObj = new Content({router: router, store: store, propsData: params}); + vueObj.observer = observer; + vueObj.$mount(dom); + layerOptions.contentDom = vueObj.$el; + layerOptions.content = $(layerOptions.contentDom); + observer.index = layer.open(layerOptions); + }); + } +} + +Vue.prototype.$dialog = Dialog; + +export default Dialog; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/FilterBox/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/FilterBox/index.vue new file mode 100644 index 00000000..d7350358 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/FilterBox/index.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Hamburger/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Hamburger/index.vue new file mode 100644 index 00000000..6df80299 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/IconSelect/icon.json b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/IconSelect/icon.json new file mode 100644 index 00000000..13f2f58b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/IconSelect/icon.json @@ -0,0 +1,280 @@ +[ + "el-icon-delete-solid", + "el-icon-delete", + "el-icon-s-tools", + "el-icon-setting", + "el-icon-user-solid", + "el-icon-user", + "el-icon-phone", + "el-icon-phone-outline", + "el-icon-more", + "el-icon-more-outline", + "el-icon-star-on", + "el-icon-star-off", + "el-icon-s-goods", + "el-icon-goods", + "el-icon-warning", + "el-icon-warning-outline", + "el-icon-question", + "el-icon-info", + "el-icon-remove", + "el-icon-circle-plus", + "el-icon-success", + "el-icon-error", + "el-icon-zoom-in", + "el-icon-zoom-out", + "el-icon-remove-outline", + "el-icon-circle-plus-outline", + "el-icon-circle-check", + "el-icon-circle-close", + "el-icon-s-help", + "el-icon-help", + "el-icon-minus", + "el-icon-plus", + "el-icon-check", + "el-icon-close", + "el-icon-picture", + "el-icon-picture-outline", + "el-icon-picture-outline-round", + "el-icon-upload", + "el-icon-upload2", + "el-icon-download", + "el-icon-camera-solid", + "el-icon-camera", + "el-icon-video-camera-solid", + "el-icon-video-camera", + "el-icon-message-solid", + "el-icon-bell", + "el-icon-s-cooperation", + "el-icon-s-order", + "el-icon-s-platform", + "el-icon-s-fold", + "el-icon-s-unfold", + "el-icon-s-operation", + "el-icon-s-promotion", + "el-icon-s-home", + "el-icon-s-release", + "el-icon-s-ticket", + "el-icon-s-management", + "el-icon-s-open", + "el-icon-s-shop", + "el-icon-s-marketing", + "el-icon-s-flag", + "el-icon-s-comment", + "el-icon-s-finance", + "el-icon-s-claim", + "el-icon-s-custom", + "el-icon-s-opportunity", + "el-icon-s-data", + "el-icon-s-check", + "el-icon-s-grid", + "el-icon-menu", + "el-icon-share", + "el-icon-d-caret", + "el-icon-caret-left", + "el-icon-caret-right", + "el-icon-caret-bottom", + "el-icon-caret-top", + "el-icon-bottom-left", + "el-icon-bottom-right", + "el-icon-back", + "el-icon-right", + "el-icon-bottom", + "el-icon-top", + "el-icon-top-left", + "el-icon-top-right", + "el-icon-arrow-left", + "el-icon-arrow-right", + "el-icon-arrow-down", + "el-icon-arrow-up", + "el-icon-d-arrow-left", + "el-icon-d-arrow-right", + "el-icon-video-pause", + "el-icon-video-play", + "el-icon-refresh", + "el-icon-refresh-right", + "el-icon-refresh-left", + "el-icon-finished", + "el-icon-sort", + "el-icon-sort-up", + "el-icon-sort-down", + "el-icon-rank", + "el-icon-loading", + "el-icon-view", + "el-icon-c-scale-to-original", + "el-icon-date", + "el-icon-edit", + "el-icon-edit-outline", + "el-icon-folder", + "el-icon-folder-opened", + "el-icon-folder-add", + "el-icon-folder-remove", + "el-icon-folder-delete", + "el-icon-folder-checked", + "el-icon-tickets", + "el-icon-document-remove", + "el-icon-document-delete", + "el-icon-document-copy", + "el-icon-document-checked", + "el-icon-document", + "el-icon-document-add", + "el-icon-printer", + "el-icon-paperclip", + "el-icon-takeaway-box", + "el-icon-search", + "el-icon-monitor", + "el-icon-attract", + "el-icon-mobile", + "el-icon-scissors", + "el-icon-umbrella", + "el-icon-headset", + "el-icon-brush", + "el-icon-mouse", + "el-icon-coordinate", + "el-icon-magic-stick", + "el-icon-reading", + "el-icon-data-line", + "el-icon-data-board", + "el-icon-pie-chart", + "el-icon-data-analysis", + "el-icon-collection-tag", + "el-icon-film", + "el-icon-suitcase", + "el-icon-suitcase-1", + "el-icon-receiving", + "el-icon-collection", + "el-icon-files", + "el-icon-notebook-1", + "el-icon-notebook-2", + "el-icon-toilet-paper", + "el-icon-office-building", + "el-icon-school", + "el-icon-table-lamp", + "el-icon-house", + "el-icon-no-smoking", + "el-icon-smoking", + "el-icon-shopping-cart-full", + "el-icon-shopping-cart-1", + "el-icon-shopping-cart-2", + "el-icon-shopping-bag-1", + "el-icon-shopping-bag-2", + "el-icon-sold-out", + "el-icon-sell", + "el-icon-present", + "el-icon-box", + "el-icon-bank-card", + "el-icon-money", + "el-icon-coin", + "el-icon-wallet", + "el-icon-discount", + "el-icon-price-tag", + "el-icon-news", + "el-icon-guide", + "el-icon-male", + "el-icon-female", + "el-icon-thumb", + "el-icon-cpu", + "el-icon-link", + "el-icon-connection", + "el-icon-open", + "el-icon-turn-off", + "el-icon-set-up", + "el-icon-chat-round", + "el-icon-chat-line-round", + "el-icon-chat-square", + "el-icon-chat-dot-round", + "el-icon-chat-dot-square", + "el-icon-chat-line-square", + "el-icon-message", + "el-icon-postcard", + "el-icon-position", + "el-icon-turn-off-microphone", + "el-icon-microphone", + "el-icon-close-notification", + "el-icon-bangzhu", + "el-icon-time", + "el-icon-odometer", + "el-icon-crop", + "el-icon-aim", + "el-icon-switch-button", + "el-icon-full-screen", + "el-icon-copy-document", + "el-icon-mic", + "el-icon-stopwatch", + "el-icon-medal-1", + "el-icon-medal", + "el-icon-trophy", + "el-icon-trophy-1", + "el-icon-first-aid-kit", + "el-icon-discover", + "el-icon-place", + "el-icon-location", + "el-icon-location-outline", + "el-icon-location-information", + "el-icon-add-location", + "el-icon-delete-location", + "el-icon-map-location", + "el-icon-alarm-clock", + "el-icon-timer", + "el-icon-watch-1", + "el-icon-watch", + "el-icon-lock", + "el-icon-unlock", + "el-icon-key", + "el-icon-service", + "el-icon-mobile-phone", + "el-icon-bicycle", + "el-icon-truck", + "el-icon-ship", + "el-icon-basketball", + "el-icon-football", + "el-icon-soccer", + "el-icon-baseball", + "el-icon-wind-power", + "el-icon-light-rain", + "el-icon-lightning", + "el-icon-heavy-rain", + "el-icon-sunrise", + "el-icon-sunrise-1", + "el-icon-sunset", + "el-icon-sunny", + "el-icon-cloudy", + "el-icon-partly-cloudy", + "el-icon-cloudy-and-sunny", + "el-icon-moon", + "el-icon-moon-night", + "el-icon-dish", + "el-icon-dish-1", + "el-icon-food", + "el-icon-chicken", + "el-icon-fork-spoon", + "el-icon-knife-fork", + "el-icon-burger", + "el-icon-tableware", + "el-icon-sugar", + "el-icon-dessert", + "el-icon-ice-cream", + "el-icon-hot-water", + "el-icon-water-cup", + "el-icon-coffee-cup", + "el-icon-cold-drink", + "el-icon-goblet", + "el-icon-goblet-full", + "el-icon-goblet-square", + "el-icon-goblet-square-full", + "el-icon-refrigerator", + "el-icon-grape", + "el-icon-watermelon", + "el-icon-cherry", + "el-icon-apple", + "el-icon-pear", + "el-icon-orange", + "el-icon-coffee", + "el-icon-ice-tea", + "el-icon-ice-drink", + "el-icon-milk-tea", + "el-icon-potato-strips", + "el-icon-lollipop", + "el-icon-ice-cream-square", + "el-icon-ice-cream-round" +] \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/IconSelect/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/IconSelect/index.vue new file mode 100644 index 00000000..06be852b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/IconSelect/index.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/InputNumberRange/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/InputNumberRange/index.vue new file mode 100644 index 00000000..94f59ba4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/InputNumberRange/index.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Progress/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Progress/index.vue new file mode 100644 index 00000000..2225e489 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/Progress/index.vue @@ -0,0 +1,44 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/RichEditor/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/RichEditor/index.vue new file mode 100644 index 00000000..d839a475 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/RichEditor/index.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/TableProgressColumn/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/TableProgressColumn/index.vue new file mode 100644 index 00000000..7e82a4eb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/TableProgressColumn/index.vue @@ -0,0 +1,119 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/TreeSelect/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/TreeSelect/index.vue new file mode 100644 index 00000000..9099558f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/components/TreeSelect/index.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/development.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/development.js new file mode 100644 index 00000000..bbc6d3f5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/development.js @@ -0,0 +1,4 @@ +module.exports = { + baseUrl: 'http://localhost:9998/', + projectName: 'UAA应用管理项目' +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/index.js new file mode 100644 index 00000000..be8f130e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/index.js @@ -0,0 +1,12 @@ +const projectConfig = require('../config/' + process.env.NODE_ENV); + +export const globalConfig = { + httpOption: { + showMask: true, + showError: true + }, + axiosOption: { + } +}; + +export default projectConfig; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/production.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/production.js new file mode 100644 index 00000000..bbc6d3f5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/config/production.js @@ -0,0 +1,4 @@ +module.exports = { + baseUrl: 'http://localhost:9998/', + projectName: 'UAA应用管理项目' +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/directive/sortable.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/directive/sortable.js new file mode 100644 index 00000000..410de2d9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/directive/sortable.js @@ -0,0 +1,14 @@ +import Vue from 'vue' +import { SortableData } from './sortableData'; + +/** + * 拖拽排序指令 + */ +Vue.directive('sortable', { + inserted: function (el, binding, vnode) { + let sortableData = binding.value; + if (sortableData == null || !(sortableData instanceof SortableData)) return; + + sortableData.init(vnode.elm); + } +}); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/directive/sortableData.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/directive/sortableData.js new file mode 100644 index 00000000..4993e08a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/directive/sortableData.js @@ -0,0 +1,60 @@ +import sortable from 'sortablejs' +/** + * 拖拽排序对象 + * expample + * + */ +export class SortableData { + constructor (data, group) { + this.list = data; + this.group = group; + this.ghostClass = 'sortable-ghost'; + this.sortable = null; + this.disabled = false; + }; + + setData (list) { + this.list = list; + } + + getElement (el) { + return el; + }; + + onEnd (oldIndex, newIndex) { + if (oldIndex === newIndex || this.list == null) return; + let targetRow = this.list.splice(oldIndex, 1)[0] + this.list.splice(newIndex, 0, targetRow); + }; + + init (el) { + var _this = this; + + var _option = {}; + if (this.ghostClass != null) _option.ghostClass = this.ghostClass; + if (this.group != null) _option.group = this.group; + if (this.disabled != null) _option.disabled = this.disabled; + // 列表中能拖动的dom的选择器(例如:.drag-item) + if (this.draggable != null) _option.draggable = this.draggable; + // 列表中拖动项,拖动把柄的选择器,只有点击这个选择出来的dom才可以开始拖动(例如:.drag-handle) + if (this.handle != null) _option.handle = this.handle; + _option.setData = function (dataTransfer) { + dataTransfer.setData('Text', ''); + }; + _option.onEnd = function (evt) { + _this.onEnd(evt.oldIndex, evt.newIndex); + }; + + this.sortable = sortable.create(_this.getElement(el), _option); + }; + + release () { + if (this.sortable != null) this.sortable.destroy(); + this.sortable = null; + } +}; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/index.js new file mode 100644 index 00000000..ed4b2be0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/index.js @@ -0,0 +1,185 @@ +import Vue from 'vue'; +import { Loading, Message } from 'element-ui'; +import request from './request'; +import requestUrl from './requestUrl'; +import merge from 'lodash/merge'; +import { globalConfig } from '@/core/config'; + +/** + * 遮罩管理,多次调用支持引用计数 + */ +class LoadingManager { + constructor (options) { + this.options = options; + this.refCount = 0; + this.loading = undefined; + } + + showMask () { + this.loading = Loading.service(this.options); + this.refCount++; + } + + hideMask () { + if (this.refCount <= 1 && this.loading != null) { + this.loading.close(); + this.loading = null; + } + this.refCount--; + this.refCount = Math.max(0, this.refCount); + } +} + +const loadingManager = new LoadingManager({ + fullscreen: true, + background: 'rgba(0, 0, 0, 0.1)' +}); + +/** + * post请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {Object} options axios设置项 + * @returns {Promise} + */ +const fetchPost = function (url, params, options) { + if (options == null) return {}; + let tempOptions = { + ...options, + method: 'post', + url: requestUrl(url), + data: params + }; + + return request(tempOptions); +}; +/** + * get请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {Object} options axios设置项 + * @returns {Promise} + */ +const fetchGet = function (url, params, options) { + if (options == null) return {}; + let tempOptions = { + ...options, + method: 'get', + url: requestUrl(url), + params + }; + return request(tempOptions); +}; +/** + * 下载请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {String} fileName 下载后保存的文件名 + * @returns {Promise} + */ +const fetchDownload = function (url, params, fileName) { + return new Promise((resolve, reject) => { + request({ + url: requestUrl(url), + method: 'post', + data: params, + responseType: 'blob', + transformResponse: function (data) { + return (data instanceof Blob && data.size > 0) ? data : undefined; + } + }).then(res => { + if (res.data == null) { + reject(new Error('下载文件失败')); + } else { + let blobData = new Blob([res.data], { type: 'application/octet-stream' }); + let blobUrl = window.URL.createObjectURL(blobData); + let linkDom = document.createElement('a'); + linkDom.style.display = 'none'; + linkDom.href = blobUrl; + linkDom.setAttribute('download', fileName); + if (typeof linkDom.download === 'undefined') { + linkDom.setAttribute('target', '_blank'); + } + document.body.appendChild(linkDom); + linkDom.click(); + document.body.removeChild(linkDom); + window.URL.revokeObjectURL(blobData); + resolve(); + } + }).catch(e => { + if (e instanceof Blob) { + let reader = new FileReader(); + reader.onload = function () { + let jsonObj = JSON.parse(reader.result); + reject((jsonObj || {}).errorMessage || '下载文件失败'); + } + reader.readAsText(e); + } else { + reject(e); + } + }); + }); +} +/** + * 数据请求 + * @param {String} url 请求的url + * @param {String} type 请求类型(get,post) + * @param {Object} params 请求参数 + * @param {Object} axiosOption axios设置 + * @param {Object} options 显示设置 + */ +const doUrl = function (url, type, params, axiosOption, options) { + options = merge(globalConfig.httpOption, options); + axiosOption = merge(globalConfig.axiosOption, axiosOption); + if (type == null || type === '') type = 'post'; + + return new Promise((resolve, reject) => { + if (options.showMask) loadingManager.showMask(); + let ajaxCall = null; + if (type.toLowerCase() === 'get') { + ajaxCall = fetchGet(url, params, axiosOption); + } else if (type.toLowerCase() === 'post') { + ajaxCall = fetchPost(url, params, axiosOption); + } + + if (ajaxCall != null) { + ajaxCall.then(res => { + if (options.showMask) loadingManager.hideMask(); + if (res.data && res.data.success) { + resolve(res.data); + } else { + if (options.showError) { + Message.error({ + showClose: true, + message: res.data.errorMessage ? res.data.errorMessage : '数据请求失败' + }); + } + reject(res.data); + } + }).catch(e => { + if (options.showMask) loadingManager.hideMask(); + if (options.showError) { + Message.error({ + showClose: true, + message: e.errorMessage ? e.errorMessage : '网络请求错误' + }); + } + reject(e); + }); + } else { + if (options.showMask) loadingManager.hideMask(); + reject(new Error('错误的请求类型 - ' + type)); + } + }); +}; + +Vue.prototype.download = fetchDownload; +Vue.prototype.doUrl = doUrl; +Vue.prototype.loadingManager = loadingManager; + +export default { + doUrl, + fetchPost, + fetchGet, + fetchDownload +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/request.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/request.js new file mode 100644 index 00000000..939ed4ce --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/request.js @@ -0,0 +1,73 @@ +import axios from 'axios'; +import router from '@/router'; +import dialog from '@/components/Dialog'; +import JSONbig from 'json-bigint'; + +// 创建axios实例 +const service = axios.create({ + timeout: 1000 * 30, + withCredentials: true, + headers: { + // 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' + 'Content-Type': 'application/json; charset=utf-8' + }, + transformResponse: [ + function (data) { + if (typeof data === 'string') { + const JSONbigString = new JSONbig({storeAsString: true}); + return JSONbigString.parse(data); + } else { + return data; + } + } + ] +}) + +// request拦截器 +service.interceptors.request.use( + config => { + let token = window.sessionStorage.getItem('token'); + let menuIdJsonStr = window.sessionStorage.getItem('currentMenuId'); + let currentMenuId; + if (menuIdJsonStr != null) { + currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data; + } + if (token != null) config.headers['Authorization'] = token; + if (currentMenuId != null) config.headers['MenuId'] = currentMenuId; + return config + }, error => { + return Promise.reject(error) + } +); + +// response拦截器 +service.interceptors.response.use( + response => { + if (response.data && response.data.errorCode === 'UNAUTHORIZED_LOGIN') { // 401, token失效 + dialog.closeAll(); + router.push({ name: 'login' }) + } else { + if (response.headers['refreshedtoken'] != null) { + window.sessionStorage.setItem('token', response.headers['refreshedtoken']); + } + } + return response + }, error => { + let response = error.response; + + if (response && response.data) { + if (response.data.errorCode === 'UNAUTHORIZED_LOGIN') { + dialog.closeAll(); + router.push({ name: 'login' }); + } + + return Promise.reject(response.data); + } else { + return Promise.reject(new Error({ + errorMessage: '数据获取失败,请稍后再试' + })); + } + } +); + +export default service diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/requestUrl.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/requestUrl.js new file mode 100644 index 00000000..96a921e1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/http/requestUrl.js @@ -0,0 +1,27 @@ +import projectConfig from '@/core/config'; +import { objectToQueryString } from '@/utils'; +console.log(process.env.NODE_ENV, projectConfig); + +/** + * 请求地址统一处理/组装 + * @param actionName action方法名称 + */ +export default function (actionName) { + if (actionName != null && actionName !== '') { + if (actionName.substr(0, 1) === '/') actionName = actionName.substr(1); + } + return projectConfig.baseUrl + actionName; +} + +export function buildGetUrl (actionName, params) { + let queryString = objectToQueryString(params); + if (actionName != null && actionName !== '') { + if (actionName.substr(0, 1) === '/') actionName = actionName.substr(1); + } + + return projectConfig.baseUrl + actionName + (queryString == null ? '' : ('?' + queryString)); +} + +export { + projectConfig +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/mixins/global.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/mixins/global.js new file mode 100644 index 00000000..eb756b40 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/mixins/global.js @@ -0,0 +1,117 @@ +import Vue from 'vue'; +import Request from '@/core/http/request.js'; +import { mapMutations, mapGetters } from 'vuex'; + +// 全局mixin对象 +const globalMixin = { + data () { + return { + isHttpLoading: false + } + }, + methods: { + /** + * 是否显示遮罩 + * @param {Boolean} isShow 是否显示 + */ + showMask (isShow) { + isShow ? this.loadingManager.showMask() : this.loadingManager.hideMask(); + }, + /** + * 判读用户是否有权限 + * @param {String} permCode 权限字 + */ + checkPermCodeExist (permCode) { + if (this.getUserInfo.permCodeSet != null) { + return this.getUserInfo.permCodeSet.has(permCode); + } else { + return this.getUserInfo.isAdmin; + } + }, + /** + * 将输入的值转换成指定的类型 + * @param {Any} value + * @param {String} type 要转换的类型(integer、float、boolean、string) + */ + parseParams (value, type = 'string') { + if (value == null) return value; + switch (type) { + case 'integer': return Number.parseInt(value); + case 'float': return Number.parseFloat(value); + case 'boolean': return (value === 'true' || value); + default: return String(value); + } + }, + /** + * 将输入值转换为执行的类型数组 + * @param {Array} value 输入数组 + * @param {String} type 要转换的类型(integer、float、boolean、string) + */ + parseArrayParams (value, type = 'string') { + if (Array.isArray(value)) { + return value.map((item) => { + switch (type) { + case 'integer': return Number.parseInt(item); + case 'float': return Number.parseFloat(item); + case 'boolean': return (item === 'true' || item); + default: return String(item); + } + }); + } else { + return []; + } + }, + /** + * 下载上传的文件 + * @param {*} url 下载文件的url + * @param {*} fileName 下载文件名 + */ + downloadFile (url, fileName) { + console.log(fileName); + Request({ + url: url, + method: 'get', + responseType: 'blob', + transformResponse: function (data) { + console.log(data); + return data; + } + }).then(res => { + console.log(res); + let data = res.data; + if (res.status === 200 && data instanceof Blob) { + let url = window.URL.createObjectURL(data); + let link = document.createElement('a'); + link.style.display = 'none'; + link.href = url; + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + this.$message.error('下载文件失败'); + } + }).catch(e => { + let reader = new FileReader(); + reader.onload = () => { + let jsonObj = JSON.parse(reader.result); + this.$message.error((jsonObj || {}).errorMessage || '下载文件失败'); + } + reader.readAsText(e); + }); + }, + ...mapMutations(['setLoadingStatus']) + }, + computed: { + ...mapGetters(['getUserInfo']) + }, + watch: { + 'loadingManager.loading': { + handler: function (newValue) { + this.isHttpLoading = (newValue != null); + } + } + } +} + +Vue.mixin(globalMixin); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/mixins/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/mixins/index.js new file mode 100644 index 00000000..8a18b8b2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/core/mixins/index.js @@ -0,0 +1,293 @@ +import projectConfig from '@/core/config'; +import { buildGetUrl } from '@/core/http/requestUrl.js'; +import { formatDate, parseDate } from 'element-ui/src/utils/date-util'; +import { mapMutations } from 'vuex'; +/** + * 上传文件组件相关方法 + */ +const uploadMixin = { + methods: { + /** + * 解析返回的上传文件数据 + * @param {String} jsonData 上传文件数据,[{name, downloadUri, filename}] + * @param {Object} params 上传文件的参数 + * @returns {Array} 上传文件信息,[{name, downloadUri, filename, url}] + */ + parseUploadData (jsonData, params) { + let pathList = []; + if (jsonData != null) { + try { + pathList = JSON.parse(jsonData); + } catch (e) { + console.error(e); + } + } + + return pathList.map((item) => { + let downloadParams = {...params}; + downloadParams.filename = item.filename; + return { + ...item, + url: this.getUploadFileUrl(item, downloadParams) + } + }); + }, + /** + * 获得上传文件url列表 + * @param {*} jsonData 上传文件数据,[{name, downloadUri, filename}] + * @param {*} params 上传文件的参数 + * @returns {Array} 文件url列表 + */ + getPictureList (jsonData, params) { + let tempList = this.parseUploadData(jsonData, params); + if (Array.isArray(tempList)) { + return tempList.map(item => item.url); + } else { + return []; + } + }, + /** + * 将选中文件信息格式化成json信息 + * @param {Array} fileList 上传文件列表,[{name, fileUrl, data}] + */ + fileListToJson (fileList) { + if (Array.isArray(fileList)) { + return JSON.stringify(fileList.map((item) => { + return { + name: item.name, + downloadUri: item.downloadUri || item.response.data.downloadUri, + filename: item.filename || item.response.data.filename + } + })); + } else { + return undefined; + } + }, + /** + * 获得上传文件url + * @param {*} item 上传文件 + * @param {*} params 上传文件的参数 + */ + getUploadFileUrl (item, params) { + if (item == null || item.downloadUri == null) { + return null; + } else { + let menuIdJsonStr = window.sessionStorage.getItem('currentMenuId'); + let currentMenuId; + if (menuIdJsonStr != null) { + currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data; + } + params.Authorization = window.sessionStorage.getItem('token'); + params.MenuId = currentMenuId; + return buildGetUrl(item.downloadUri, params); + } + }, + /** + * 获得上传接口 + * @param {*} url 上传路径 + */ + getUploadActionUrl (url) { + if (url != null && url[0] === '/') { + url = url.substr(1); + } + return projectConfig.baseUrl + url; + }, + /** + * 上传文件是否图片文件 + * @param {*} file 上传文件 + */ + pictureFile (file) { + if (['image/jpeg', 'image/jpg', 'image/png'].indexOf(file.type) !== -1) { + return true; + } else { + this.$message.error('图片文件格式不正确,请重新选择'); + return false; + } + } + }, + computed: { + getUploadHeaders () { + let token = window.sessionStorage.getItem('token'); + return { + Authorization: token + } + } + } +}; + +const allowStatsType = [ + 'time', + 'datetime', + 'day', + 'month', + 'year' +]; +/** + * 日期相关方法 + */ +const statsDateRangeMixin = { + methods: { + /** + * 根据输入的日期获得日期范围(例如:输入2019-12-12,输出['2019-12-12 00:00:00', '2019-12-12 23:59:59']) + * @param {Date|String} date 要转换的日期 + * @param {String} statsType 转换类型(day, month, year) + * @param {String} format 输出格式 + */ + getDateRangeFilter (date, statsType = 'day', format = 'yyyy-MM-dd HH:mm:ss') { + if (date == null) return []; + + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + date = date.substr(0, date.indexOf(' ')); + let tempList = date.split('-'); + let year = Number.parseInt(tempList[0]); + let month = Number.parseInt(tempList[1]); + let day = Number.parseInt(tempList[2]); + if (isNaN(year) || isNaN(month) || isNaN(day)) { + return []; + } + let tempDate = new Date(year, month - 1, day); + // 判断是否正确的日期 + if (isNaN(tempDate.getTime())) return []; + + tempDate.setHours(0, 0, 0, 0); + let retDate; + switch (statsType) { + case 'day': + retDate = [ + new Date(tempDate), + new Date(tempDate.setDate(tempDate.getDate() + 1)) + ]; + break; + case 'month': + tempDate.setDate(1); + retDate = [ + new Date(tempDate), + new Date(tempDate.setMonth(tempDate.getMonth() + 1)) + ]; + break; + case 'year': + tempDate.setDate(1); + tempDate.setMonth(0); + retDate = [ + new Date(tempDate), + new Date(tempDate.setFullYear(tempDate.getFullYear() + 1)) + ] + } + + retDate[1] = new Date(retDate[1].getTime() - 1); + + return [ + formatDate(retDate[0], format), + formatDate(retDate[1], format) + ]; + }, + /** + * 格式化日期 + * @param {Date|String} date 要格式化的日期 + * @param {String} statsType 输出日期类型 + * @param {String} format 输入日期的格式 + */ + formatDateByStatsType (date, statsType = 'day', format = 'yyyy-MM-dd') { + if (date == null) return undefined; + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + if (statsType === 'datetime') format = 'yyyy-MM-dd HH:mm:ss'; + + let tempDate = ((date instanceof Date) ? date : parseDate(date, format)); + if (!tempDate) return undefined; + switch (statsType) { + case 'time': + return formatDate(tempDate, 'HH:mm:ss'); + case 'datetime': + return formatDate(tempDate, 'yyyy-MM-dd HH:mm:ss'); + case 'day': + return formatDate(tempDate, 'yyyy-MM-dd'); + case 'month': + return formatDate(tempDate, 'yyyy-MM'); + case 'year': + return formatDate(tempDate, 'yyyy'); + default: + return formatDate(tempDate, 'yyyy-MM-dd'); + } + }, + /** + * 获得统计类型中文名称 + * @param {String} statsType 统计类型(day, month, year) + */ + getStatsTypeShowName (statsType) { + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + switch (statsType) { + case 'day': return '日统计'; + case 'month': return '月统计'; + case 'year': return '年统计'; + } + }, + /** + * 获取统计类型字典列表 + * @param {Array} statsTypeList 统计类型列表 + */ + getAllowStatsTypeList (statsTypeList) { + if (Array.isArray(statsTypeList) && statsTypeList.length > 0) { + return statsTypeList.map((item) => { + return { + id: item, + name: this.getStatsTypeShowName(item) + } + }); + } else { + return []; + } + } + } +} +/** + * 页面缓存相关方法 + */ +const cachePageMixin = { + methods: { + /** + * 移除缓存页面 + * @param {*} name 缓存组件的名称 + */ + removeCachePage (name) { + this.removeCachePage(name); + }, + /** + * 从跳转页面返回并且刷新当前页面时调用 + */ + onResume () { + }, + ...mapMutations(['addCachePage', 'removeCachePage']) + }, + created () { + this.addCachePage(this.$options.name); + }, + activated () { + if (this.$route && this.$route.meta && this.$route.meta.refresh) { + this.onResume(); + this.$route.meta.refresh = false; + } + } +} +/** + * 缓存页面跳转页面相关方法 + */ +const cachedPageChildMixin = { + data () { + return { + // 是否刷新父页面 + refreshParentCachedPage: false + } + }, + beforeRouteLeave (to, from, next) { + if (to.meta == null) to.meta = {}; + to.meta.refresh = this.refreshParentCachedPage; + next(); + } +} + +export { + uploadMixin, + statsDateRangeMixin, + cachePageMixin, + cachedPageChildMixin +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/main.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/main.js new file mode 100644 index 00000000..fcdd3963 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/main.js @@ -0,0 +1,36 @@ +import '@/core/http'; +import '@/components/Dialog'; +import Vue from 'vue'; +import ElementUI from 'element-ui'; +// import 'element-ui/lib/theme-chalk/index.css' +import '@/assets/style/index.scss'; +import '@/core/mixins/global.js'; +import App from './App'; +import router from './router'; +import store from './store'; +import TreeSelect from '@/components/TreeSelect'; +import RichEditor from '@/components/RichEditor'; +import InputNumberRange from '@/components/InputNumberRange'; +import DateRange from '@/components/DateRange'; +import FilterBox from '@/components/FilterBox'; +import TableProgressColumn from '@/components/TableProgressColumn'; +import VCharts from 'v-charts'; + +Vue.component('tree-select', TreeSelect); +Vue.component('rich-editor', RichEditor); +Vue.component('input-number-range', InputNumberRange); +Vue.component('date-range', DateRange); +Vue.component('filter-box', FilterBox); +Vue.component('table-progress-column', TableProgressColumn); + +Vue.use(ElementUI); +Vue.use(VCharts); + +Vue.config.productionTip = false; + +/* eslint-disable no-new */ +new Vue({ + router, + store, + render: h => h(App) +}).$mount('#app'); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/registerServiceWorker.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/registerServiceWorker.js new file mode 100644 index 00000000..76cede07 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/registerServiceWorker.js @@ -0,0 +1,32 @@ +/* eslint-disable no-console */ + +import { register } from 'register-service-worker' + +if (process.env.NODE_ENV === 'production') { + register(`${process.env.BASE_URL}service-worker.js`, { + ready () { + console.log( + 'App is being served from cache by a service worker.\n' + + 'For more details, visit https://goo.gl/AFskqB' + ) + }, + registered () { + console.log('Service worker has been registered.') + }, + cached () { + console.log('Content has been cached for offline use.') + }, + updatefound () { + console.log('New content is downloading.') + }, + updated () { + console.log('New content is available; please refresh.') + }, + offline () { + console.log('No internet connection found. App is running in offline mode.') + }, + error (error) { + console.error('Error during service worker registration:', error) + } + }) +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/import-development.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/import-development.js new file mode 100644 index 00000000..b29a72d9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/import-development.js @@ -0,0 +1 @@ +module.exports = file => require('../views/' + file + '.vue').default diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/import-production.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/import-production.js new file mode 100644 index 00000000..10d919de --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/import-production.js @@ -0,0 +1 @@ +module.exports = file => () => import('../views/' + file + '.vue') diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/index.js new file mode 100644 index 00000000..77356d50 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/index.js @@ -0,0 +1,30 @@ +import Vue from 'vue'; +import Router from 'vue-router'; +import routers from './systemRouters.js'; +import dialog from '@/components/Dialog'; + +Vue.use(Router) + +const router = new Router({ + mode: 'hash', + routes: routers +}); + +/** + * 路由跳转的时候判断token是否存在 + */ +router.beforeResolve((to, from, next) => { + if (to.name === 'login') { + next(); + } else { + let token = sessionStorage.getItem('token'); + if (!token || !/\S/.test(token)) { + dialog.closeAll(); + next({ name: 'login' }) + } else { + next(); + } + } +}); + +export default router; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/systemRouters.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/systemRouters.js new file mode 100644 index 00000000..80a3620f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/router/systemRouters.js @@ -0,0 +1,32 @@ +// 开发环境不使用懒加载, 因为懒加载页面太多的话会造成webpack热更新太慢, 所以只有开发环境使用懒加载 +const _import = require('./import-' + process.env.NODE_ENV) + +function getProps (route) { + return route.query; +} + +// 系统生成路由 +const routers = [ + { path: '/login', component: _import('login/index'), name: 'login', props: getProps, desc: '登录' }, + { + path: '/', + component: _import('layout/index'), + name: 'main', + props: getProps, + redirect: { + name: 'welcome' + }, + meta: { + title: '主页', + showOnly: true + }, + children: [ + {path: 'welcome', component: _import('welcome/index'), name: 'welcome', meta: {title: '欢迎'}}, + {path: 'formUaaUser', component: _import('generated/formUaaUser/index'), name: 'formUaaUser', props: getProps, meta: {title: '用户管理'}}, + {path: 'formAuthClient', component: _import('generated/formAuthClient/index'), name: 'formAuthClient', props: getProps, meta: {title: '应用管理'}}, + {path: 'formUaaOperator', component: _import('generated/formUaaOperator/index'), name: 'formUaaOperator', props: getProps, meta: {title: '操作员管理'}} + ] + } +]; + +export default routers; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/staticDict/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/staticDict/index.js new file mode 100644 index 00000000..32431eb1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/staticDict/index.js @@ -0,0 +1,81 @@ +/** + * 常量字典数据 + */ +import Vue from 'vue'; + +class DictionaryBase extends Map { + constructor (dataList, keyId = 'id', symbolId = 'symbol') { + super(); + this.setList(dataList, keyId, symbolId); + } + + setList (dataList, keyId = 'id', symbolId = 'symbol') { + this.clear(); + if (Array.isArray(dataList)) { + dataList.forEach((item) => { + this.set(item[keyId], item); + if (item[symbolId] != null) { + Object.defineProperty(this, item[symbolId], { + get: function () { + return item[keyId]; + } + }); + } + }); + } + } + + getList (valueId = 'name', parentIdKey = 'parentId', filter) { + let temp = []; + this.forEach((value, key) => { + let obj = { + id: key, + name: (typeof value === 'string') ? value : value[valueId], + parentId: value[parentIdKey] + }; + if (typeof filter !== 'function' || filter(obj)) { + temp.push(obj); + } + }); + + return temp; + } + + getValue (id, valueId = 'name') { + return (this.get(id) || {})[valueId]; + } +} + +const UserStatus = new DictionaryBase([ + { + id: 0, + name: '正常', + symbol: 'USED' + }, + { + id: 1, + name: '锁定', + symbol: 'LOCKED' + } +]); +Vue.prototype.UserStatus = UserStatus; + +const UserType = new DictionaryBase([ + { + id: 0, + name: '管理员', + symbol: 'ADMIN' + }, + { + id: 1, + name: '普通操作员', + symbol: 'NORMAL' + } +]); +Vue.prototype.UserType = UserType; + +export { + DictionaryBase, + UserStatus, + UserType +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/actions.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/actions.js new file mode 100644 index 00000000..b1c6ea43 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/actions.js @@ -0,0 +1 @@ +export default {} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/getters.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/getters.js new file mode 100644 index 00000000..7aa8daaf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/getters.js @@ -0,0 +1,45 @@ +import { findMenuItem } from './utils'; + +export default { + getCollapse: (state) => { + return state.isCollapse; + }, + getClientHeight: (state) => { + return state.documentClientHeight; + }, + getUserInfo: (state) => { + return state.userInfo; + }, + getCachePages: (state) => { + return state.cachePages; + }, + getTagList: (state) => { + return state.tagList; + }, + getMenuList: (state) => { + return state.menuList; + }, + getCurrentMenuId: (state) => { + return state.currentMenuId; + }, + getMenuItem: (state) => { + if (Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + let temp = findMenuItem(state.menuList[i], state.currentMenuId); + if (temp != null) return temp; + } + } + return null; + }, + getCurrentMenuPath: (state) => { + let menuPath = []; + if (Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + let temp = findMenuItem(state.menuList[i], state.currentMenuId, menuPath); + if (temp != null) break; + } + } + + return menuPath; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/index.js new file mode 100644 index 00000000..5fc44198 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import state from './state.js'; +import getters from './getters.js'; +import mutations from './mutations.js'; +import actions from './actions.js'; + +Vue.use(Vuex); +export default new Vuex.Store({ + state, + getters, + mutations, + actions, + strict: process.env.NODE_ENV !== 'production' +}); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/mutations.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/mutations.js new file mode 100644 index 00000000..44fecde4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/mutations.js @@ -0,0 +1,139 @@ +import { initUserInfo, findMenuItem } from './utils'; +import { setObjectToSessionStorage, findItemFromList, treeDataTranslate } from '@/utils'; + +export default { + setCollapse: (state, isCollapse) => { + state.isCollapse = isCollapse; + }, + setClientHeight: (state, height) => { + state.documentClientHeight = height; + }, + setUserInfo: (state, info) => { + setObjectToSessionStorage('userInfo', info); + state.userInfo = initUserInfo(info); + }, + addCachePage (state, name) { + if (state.cachePages.indexOf(name) === -1) { + let temp = [...state.cachePages]; + temp.push(name); + setObjectToSessionStorage('cachePages', temp); + state.cachePages = temp; + } + }, + removeCachePage (state, name) { + let pos = state.cachePages.indexOf(name); + if (pos !== -1) { + let temp = [...state.cachePages]; + temp.splice(pos, 1); + setObjectToSessionStorage('cachePages', temp); + state.cachePages = temp; + } + }, + clearCachePage (state) { + setObjectToSessionStorage('cachePages', []); + state.cachePages = []; + }, + addTag (state, id) { + if (id == null || id === '') return; + // 新增的标签是否存在 + let tagList = state.tagList; + let tagItem = null; + if (Array.isArray(tagList)) { + tagItem = findItemFromList(tagList, id, 'menuId'); + } + if (tagItem != null) return; + // 添加新增标签以及更新页面缓存 + let menuList = state.menuList; + let menuObject = null; + if (Array.isArray(menuList)) { + for (let i = 0; i < menuList.length; i++) { + menuObject = findMenuItem(menuList[i], id); + if (menuObject != null) break; + } + } + if (menuObject != null) { + state.tagList = [...state.tagList, menuObject]; + if (Array.isArray(state.cachePages) && state.cachePages.indexOf(menuObject.formRouterName) === -1) { + state.cachePages = [...state.cachePages, menuObject.formRouterName]; + } + } + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + }, + removeTag (state, id) { + if (id == null || id === '') return; + // 移除标签 + let nextPos = -1; + let tagItem = null; + for (let i = 0; i < state.tagList.length; i++) { + if (state.tagList[i].menuId === id) { + tagItem = state.tagList[i]; + state.tagList.splice(i, 1); + nextPos = Math.min(i, state.tagList.length - 1); + } + } + // let tagItem = findItemFromList(state.tagList, id, 'menuId', true); + if (tagItem == null) return; + // 移除页面缓存 + findItemFromList(state.cachePages, tagItem.formRouterName, undefined, true); + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + // 如果移除的是当前显示页面,重新选择显示页面 + let showTag = null; + if (state.currentMenuId === id) { + showTag = state.tagList[nextPos]; + let tempId = (showTag || {}).menuId; + if (setObjectToSessionStorage('currentMenuId', tempId)) state.currentMenuId = tempId; + } + }, + closeOtherTags (state, id) { + if (id == null || id === '') return; + // 移除其他所有标签 + if (Array.isArray(state.tagList)) { + state.tagList = state.tagList.filter((item) => { + return item.menuId === id; + }); + } + + let menuObject = state.tagList[0]; + if (menuObject && menuObject.formRouterName && menuObject.formRouterName !== '') { + state.cachePages = [menuObject.formRouterName]; + if (setObjectToSessionStorage('currentMenuId', menuObject.menuId)) state.currentMenuId = menuObject.menuId; + } + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + }, + clearAllTags (state) { + if (setObjectToSessionStorage('currentMenuId', undefined)) state.currentMenuId = undefined; + if (setObjectToSessionStorage('cachePages', [])) state.cachePages = []; + if (setObjectToSessionStorage('tagList', [])) state.tagList = []; + }, + setMenuList: (state, list) => { + if (Array.isArray(list)) { + if (setObjectToSessionStorage('menuList', list)) state.menuList = treeDataTranslate(list, 'menuId', 'parentId'); + } + }, + setCurrentMenuId: (state, menuId) => { + let menuItem = null; + if (setObjectToSessionStorage('currentMenuId', menuId)) state.currentMenuId = menuId; + if (Array.isArray(state.tagList) && Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + menuItem = findMenuItem(state.menuList[i], menuId, 'menuId'); + if (menuItem != null) { + // 添加新的tag + let tagItem = findItemFromList(state.tagList, menuId, 'menuId'); + if (tagItem == null) { + state.tagList = [...state.tagList, menuItem]; + setObjectToSessionStorage('tagList', state.tagList); + } + // 添加新缓存 + if (Array.isArray(state.cachePages) && state.cachePages.indexOf(menuItem.formRouterName) === -1) { + state.cachePages = [...state.cachePages, menuItem.formRouterName]; + setObjectToSessionStorage('cachePages', state.cachePages); + } + break; + } + } + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/state.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/state.js new file mode 100644 index 00000000..9a254ed1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/state.js @@ -0,0 +1,19 @@ +import { initUserInfo } from './utils'; +import { getObjectFromSessionStorage, treeDataTranslate } from '@/utils'; + +export default { + // 是否左侧菜单折叠 + isCollapse: false, + // 浏览器客户区高度 + documentClientHeight: 100, + // 用户登录信息 + userInfo: initUserInfo(), + // 缓存页面 + cachePages: getObjectFromSessionStorage('cachePages', []), + // 当前标签 + tagList: getObjectFromSessionStorage('tagList', []), + // 菜单列表 + menuList: treeDataTranslate(getObjectFromSessionStorage('menuList', []), 'menuId', 'parentId'), + // 当前菜单 + currentMenuId: getObjectFromSessionStorage('currentMenuId', undefined) +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/utils/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/utils/index.js new file mode 100644 index 00000000..ec129435 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/store/utils/index.js @@ -0,0 +1,36 @@ +import { getObjectFromSessionStorage } from '@/utils'; + +function findMenuItem (menuItem, menuId, path) { + if (Array.isArray(path)) path.push(menuItem); + if ((menuItem.menuId + '') === (menuId + '')) return menuItem; + + let bFind = false; + let findItem = null; + if (Array.isArray(menuItem.children)) { + for (let i = 0; i < menuItem.children.length; i++) { + findItem = findMenuItem(menuItem.children[i], menuId, path); + if (findItem != null) { + bFind = true; + break; + } + } + } + + if (!bFind && Array.isArray(path)) path.pop(); + return bFind ? findItem : null; +} + +function initUserInfo (userInfo) { + if (userInfo == null) userInfo = getObjectFromSessionStorage('userInfo'); + + if (userInfo != null && userInfo.permCodeList != null && Array.isArray(userInfo.permCodeList)) { + userInfo.permCodeSet = new Set(userInfo.permCodeList); + } + + return userInfo; +} + +export { + findMenuItem, + initUserInfo +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/chartOption.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/chartOption.js new file mode 100644 index 00000000..76b12e02 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/chartOption.js @@ -0,0 +1,56 @@ +const defaultLineChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + xAxis: { + axisLabel: { + interval: 0, + showMaxLabel: true + } + }, + legend: { + top: '3%' + } +} + +const defaultBarChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + xAxis: { + axisLabel: { + interval: 0, + showMaxLabel: true + } + }, + legend: { + top: '3%' + } +} + +const defaultPieChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + legend: { + top: '3%' + }, + series: { + center: ['50%', '60%'] + } +} + +export { + defaultLineChartOption, + defaultBarChartOption, + defaultPieChartOption +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/index.js new file mode 100644 index 00000000..7c48d739 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/index.js @@ -0,0 +1,222 @@ +import JSEncrypt from 'jsencrypt'; + +/** + * 列表数据转换树形数据 + * @param {Array} data 要转换的列表 + * @param {String} id 主键字段字段名 + * @param {String} pid 父字段字段名 + * @returns {Array} 转换后的树数据 + */ +export function treeDataTranslate (data, id = 'id', pid = 'parentId') { + var res = [] + var temp = {} + for (var i = 0; i < data.length; i++) { + temp[data[i][id]] = data[i] + } + for (var k = 0; k < data.length; k++) { + if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) { + if (!temp[data[k][pid]]['children']) { + temp[data[k][pid]]['children'] = [] + } + if (!temp[data[k][pid]]['_level']) { + temp[data[k][pid]]['_level'] = 1 + } + data[k]['_level'] = temp[data[k][pid]]._level + 1 + data[k]['_parent'] = data[k][pid] + temp[data[k][pid]]['children'].push(data[k]) + } else { + res.push(data[k]) + } + } + + return res +} +/** + * 获取字符串字节长度(中文算2个字符) + * @param {String} str 要获取长度的字符串 + */ +export function getStringLength (str) { + return str.replace(/[\u4e00-\u9fa5\uff00-\uffff]/g, '**').length +} +/** + * 获取uuid + */ +export function getUUID () { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { + return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) + }); +} +/** + * 大小驼峰变换函数 + * @param name 要转换的字符串 + * @param type 转换的类型0:转换成小驼峰,1:转换成大驼峰 + */ +export function nameTranslate (name, type) { + name = name.toLowerCase(); + let nameArray = name.split('_'); + nameArray.forEach((item, index) => { + if (index === 0) { + name = type === 1 ? item.slice(0, 1).toUpperCase() + item.slice(1) : item; + } else { + name = name + item.slice(0, 1).toUpperCase() + item.slice(1); + } + }); + + nameArray = name.split('-'); + nameArray.forEach((item, index) => { + if (index === 0) { + name = type === 1 ? item.slice(0, 1).toUpperCase() + item.slice(1) : item; + } else { + name = name + item.slice(0, 1).toUpperCase() + item.slice(1); + } + }); + return name; +} +/** + * 通过id从树中获取指定的节点 + * @param {Object} node 根节点 + * @param {String|Nubmer} id 键值 + * @param {Array} list 保存查询路径 + * @param {String} idKey 主键字段名 + * @param {String} childKey 子节点字段名 + */ +function findNode (node, id, list, idKey = 'id', childKey = 'children') { + if (Array.isArray(list)) list.push(node[idKey]); + if (node[idKey] === id) { + return node; + } + + if (node[childKey] != null && Array.isArray(node[childKey])) { + for (let i = 0; i < node[childKey].length; i++) { + let tempNode = findNode(node[childKey][i], id, list, idKey, childKey); + if (tempNode) return tempNode; + } + } + + if (Array.isArray(list)) list.pop(); +} +/** + * 通过id返回从根节点到指定节点的路径 + * @param {Array} treeRoot 树根节点数组 + * @param {*} id 要查询的节点的id + * @param {*} idKey 主键字段名 + * @param {*} childKey 子节点字段名 + */ +export function findTreeNodePath (treeRoot, id, idKey = 'id', childKey = 'children') { + let tempList = []; + for (let i = 0; i < treeRoot.length; i++) { + if (findNode(treeRoot[i], id, tempList, idKey, childKey)) { + return tempList; + } + } + + return []; +} +/** + * 通过id从树中查找节点 + * @param {Array} treeRoot 根节点数组 + * @param {*} id 要查找的节点的id + * @param {*} idKey 主键字段名 + * @param {*} childKey 子节点字段名 + */ +export function findTreeNode (treeRoot, id, idKey = 'id', childKey = 'children') { + for (let i = 0; i < treeRoot.length; i++) { + let tempNode = findNode(treeRoot[i], id, undefined, idKey, childKey); + if (tempNode) return tempNode; + } +} +/** + * 把Object转换成query字符串 + * @param {Object} params 要转换的Object + */ +export function objectToQueryString (params) { + if (params == null) { + return null; + } else { + return Object.keys(params).map((key) => { + return `${key}=${params[key]}`; + }).join('&'); + } +} +/** + * 从数组中查找某一项 + * @param {Array} list 要查找的数组 + * @param {String} id 要查找的节点id + * @param {String} idKey 主键字段名(如果为null则直接比较) + * @param {Boolean} removeItem 是否从数组中移除查找到的节点 + * @returns {Object} 找到返回节点,没找到返回undefined + */ +export function findItemFromList (list, id, idKey, removeItem = false) { + if (Array.isArray(list) && list.length > 0 && id != null) { + for (let i = 0; i < list.length; i++) { + let item = list[i]; + if (((idKey == null || idKey === '') && item === id) || (idKey != null && item[idKey] === id)) { + if (removeItem) list.splice(i, 1); + return item; + } + } + } + return null; +} +/** + * 将数据保存到sessionStorage + * @param {*} key sessionStorage的键值 + * @param {*} value 要保存的数据 + */ +export function setObjectToSessionStorage (key, value) { + if (key == null || key === '') return false; + if (value == null) { + window.sessionStorage.removeItem(key); + return true; + } else { + let jsonObj = { + data: value + } + window.sessionStorage.setItem(key, JSON.stringify(jsonObj)); + return true; + } +} +/** + * 从sessionStorage里面获取数据 + * @param {String} key 键值 + * @param {*} defaultValue 默认值 + */ +export function getObjectFromSessionStorage (key, defaultValue) { + let jsonObj = null; + try { + jsonObj = JSON.parse(window.sessionStorage.getItem(key)); + jsonObj = (jsonObj || {}).data; + } catch (e) { + jsonObj = defaultValue; + }; + return (jsonObj != null) ? jsonObj : defaultValue; +} +/** + * 判读字符串是否一个数字 + * @param {String} str 要判断的字符串 + */ +export function isNumber (str) { + let num = Number.parseFloat(str); + if (Number.isNaN(num)) return false; + return num.toString() === str; +} +/** + * 生成随机数 + * @param {Integer} min 随机数最小值 + * @param {Integer} max 随机数最大值 + */ +export function random (min, max) { + let base = Math.random(); + return min + base * (max - min); +} +/** + * 加密 + * @param {*} value 要加密的字符串 + */ +const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpC4QMnbTrQOFriJJCCFFWhlruBJThAEBfRk7pRx1jsAhyNVL3CqJb0tRvpnbCnJhrRAEPdgFHXv5A0RrvFp+5Cw7QoFH6O9rKB8+0H7+aVQeKITMUHf/XMXioymw6Iq4QfWd8RhdtM1KM6eGTy8aU7SO2s69Mc1LXefg/x3yw6wIDAQAB'; +export function encrypt (value) { + if (value == null || value === '') return null; + let encrypt = new JSEncrypt(); + encrypt.setPublicKey(publicKey); + return encodeURIComponent(encrypt.encrypt(value)); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/validate.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/validate.js new file mode 100644 index 00000000..5b148e39 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/validate.js @@ -0,0 +1,33 @@ +const pattern = { + mobie: /^((\+?86)|(\(\+86\)))?(13[012356789][0-9]{8}|15[012356789][0-9]{8}|18[02356789][0-9]{8}|147[0-9]{8}|1349[0-9]{7})$/, + english: /^[a-zA-Z]+$/, + englishAndNumber: /^[a-zA-Z0-9]+$/ +} + +/** + * 邮箱 + * @param str + */ +export function isEmail (str) { + return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(str) +} + +/** + * 手机号码 + * @param str + */ +export function isMobile (str) { + return pattern.mobie.test(str) +} + +/** + * 电话号码 + * @param str + */ +export function isPhone (str) { + return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(str) +} + +export default { + pattern +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/widget.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/widget.js new file mode 100644 index 00000000..db2cfa81 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/utils/widget.js @@ -0,0 +1,297 @@ +import { Message } from 'element-ui'; +import { treeDataTranslate } from '@/utils'; + +const DEFAULT_PAGE_SIZE = 10; + +export class DropdownWidget { + /** + * 下拉组件(Select、Cascade、TreeSelect等) + * @param {function () : Promise} loadDropdownData 下拉数据获取函数 + * @param {Boolean} isTree 是否是树数据 + * @param {String} idKey 键字段字段名 + * @param {String} parentIdKey 父字段字段名 + */ + constructor (loadDropdownData, isTree = false, idKey = 'id', parentIdKey = 'parentId') { + this.loading = false; + this.dirty = true; + this.dropdownList = []; + this.isTree = isTree; + this.idKey = idKey; + this.parentIdKey = parentIdKey; + this.loadDropdownData = loadDropdownData; + this.setDropdownList = this.setDropdownList.bind(this); + this.onVisibleChange = this.onVisibleChange.bind(this); + } + /** + * 重新获取下拉数据 + */ + reloadDropdownData () { + return new Promise((resolve, reject) => { + if (!this.loading) { + if (typeof this.loadDropdownData === 'function') { + this.loading = true; + this.loadDropdownData().then(dataList => { + this.setDropdownList(dataList); + this.loading = false; + this.dirty = false; + resolve(this.dropdownList); + }).catch(e => { + this.setDropdownList([]); + this.loading = false; + reject(this.dropdownList); + }); + } else { + reject(new Error('获取下拉数据失败')); + } + } else { + resolve(this.dropdownList); + } + }); + } + /** + * 下拉框显示或隐藏时调用 + * @param {Boolean} isShow 正在显示或者隐藏 + */ + onVisibleChange (isShow) { + return new Promise((resolve, reject) => { + if (isShow && this.dirty && !this.loading) { + this.reloadDropdownData().then(res => { + resolve(res); + }).catch(e => { + reject(e); + }); + } else { + resolve(this.dropdownList); + } + }); + } + /** + * 设置下拉数据 + * @param {Array} dataList 要显示的下拉数据 + */ + setDropdownList (dataList) { + if (Array.isArray(dataList)) { + this.dropdownList = this.isTree ? treeDataTranslate(dataList, this.idKey, this.parentIdKey) : dataList; + } + } +} + +export class TableWidget { + /** + * 表格组件 + * @param {function (params: Object) : Promise} loadTableData 表数据获取函数 + * @param {function () : Boolean} verifyTableParameter 表数据获取检验函数 + * @param {Boolean} paged 是否支持分页 + * @param {String} orderFieldName 默认排序字段 + * @param {Boolean} ascending 默认排序方式(true为正序,false为倒序) + * @param {String} dateAggregateBy 默认排序字段的日期统计类型 + */ + constructor (loadTableData, verifyTableParameter, paged, orderFieldName, ascending, dateAggregateBy) { + this.oldPage = 0; + this.currentPage = 1; + this.oldPageSize = DEFAULT_PAGE_SIZE; + this.pageSize = DEFAULT_PAGE_SIZE; + this.totalCount = 0; + this.dataList = []; + this.orderInfo = { + fieldName: orderFieldName, + asc: ascending, + dateAggregateBy: dateAggregateBy + }; + this.paged = paged; + this.searchVerify = verifyTableParameter || function () { return true; }; + this.loadTableData = loadTableData || function () { return Promise.resolve(); }; + this.onCurrentPageChange = this.onCurrentPageChange.bind(this); + this.onPageSizeChange = this.onPageSizeChange.bind(this); + this.onSortChange = this.onSortChange.bind(this); + this.getTableIndex = this.getTableIndex.bind(this); + } + /** + * 表格分页变化 + * @param {Integer} newCurrentPage 变化后的显示页面 + */ + onCurrentPageChange (newCurrentPage) { + this.loadTableDataImpl(newCurrentPage, this.pageSize).then(() => { + this.oldPage = this.currentPage = newCurrentPage; + }).catch(() => { + this.currentPage = this.oldPage; + }); + } + /** + * 表格分页每页显示数量变化 + * @param {Integer} newPageSize 变化后的每页显示数量 + */ + onPageSizeChange (newPageSize) { + this.loadTableDataImpl(1, newPageSize).then(() => { + this.oldPage = this.currentPage = 1; + this.oldPageSize = this.pageSize = newPageSize; + }).catch(e => { + this.currentPage = this.oldPage; + this.pageSize = this.oldPageSize; + }); + } + /** + * 表格排序字段变化 + * @param {String} prop 排序字段的字段名 + * @param {String} order 正序还是倒序 + */ + onSortChange ({ prop, order }) { + this.orderInfo.fieldName = prop; + this.orderInfo.asc = (order === 'ascending'); + this.refreshTable(); + } + /** + * 获取每一行的index信息 + * @param {Integer} index 表格在本页位置 + */ + getTableIndex (index) { + return this.paged ? ((this.currentPage - 1) * this.pageSize + (index + 1)) : (index + 1); + } + /** + * 获取表格数据 + * @param {Integer} pageNum 当前分页 + * @param {Integer} pageSize 每页数量 + * @param {Boolean} reload 是否重新获取数据 + */ + loadTableDataImpl (pageNum, pageSize, reload = false) { + return new Promise((resolve, reject) => { + if (typeof this.loadTableData !== 'function') { + reject(); + } else { + // 如果pageSize和pageNum没有变化,并且不强制刷新 + if (this.paged && !reload && this.oldPage === pageNum && this.oldPageSize === pageSize) { + resolve(); + } else { + let params = {}; + if (this.orderInfo.fieldName != null) params.orderParam = [this.orderInfo]; + if (this.paged) { + params.pageParam = { + pageNum, + pageSize + } + } + this.loadTableData(params).then(tableData => { + this.dataList = tableData.dataList; + this.totalCount = tableData.totalCount; + resolve(); + }).catch(e => { + reject(e); + }); + } + } + }); + } + /** + * 刷新表格数据 + * @param {Boolean} research 是否按照新的查询条件重新查询(调用verify函数) + * @param {Integer} pageNum 当前页面 + */ + refreshTable (research = false, pageNum = undefined, showMsg = false) { + let reload = false; + if (research) { + if (typeof this.searchVerify === 'function' && !this.searchVerify()) return; + reload = true; + } + + if (Number.isInteger(pageNum) && pageNum !== this.currentPage) { + this.loadTableDataImpl(pageNum, this.pageSize, reload).then(res => { + this.oldPage = this.currentPage = pageNum; + if (research && showMsg) Message.success('查询成功'); + }).catch(e => { + this.currentPage = this.oldPage; + }); + } else { + this.loadTableDataImpl(this.currentPage, this.pageSize, true).catch(e => {}); + } + } +} + +export class UploadWidget { + /** + * 上传组件 + * @param {Integer} maxCount 最大上传数量 + */ + constructor (maxCount = 1) { + this.maxCount = maxCount; + this.fileList = []; + this.onFileChange = this.onFileChange.bind(this); + } + /** + * 上传文件列表改变 + * @param {Object} file 改变的文件 + * @param {Array} fileList 改变后的文件列表 + */ + onFileChange (file, fileList) { + if (Array.isArray(fileList) && fileList.length > 0) { + if (this.maxCount === 1) { + this.fileList = [fileList[fileList.length - 1]]; + } else { + this.fileList = fileList; + } + } else { + this.fileList = []; + } + return this.fileList; + } +} + +export class ChartWidget { + /** + * 图表组件 + * @param {function (params) : Promise} loadTableData chart数据获取函数 + * @param {function () : Boolean} verifyTableParameter 数据参数检验函数 + * @param {Array} columns 数据列 + */ + constructor (loadTableData, verifyTableParameter, columns) { + this.columns = columns; + this.loading = false; + this.dataEmpty = false; + this.chartData = undefined; + this.chartObject = undefined; + this.dimensionMaps = new Map(); + this.chartSetting = undefined; + this.searchVerify = verifyTableParameter || function () { return true; }; + this.loadTableData = loadTableData || function () { return Promise.resolve(); }; + } + /** + * 获取图表数据 + * @param {Boolean} reload 是否重新获取数据 + */ + loadChartDataImpl (reload = false) { + return new Promise((resolve, reject) => { + if (typeof this.loadTableData !== 'function') { + reject(); + } else { + if (!reload) { + resolve(); + } else { + this.loading = true; + this.loadTableData().then(tableData => { + this.chartData = { + columns: this.columns, + rows: tableData.dataList + } + this.loading = false; + if (this.chartObject) this.chartObject.resize(); + resolve(); + }).catch(e => { + console.error(e); + this.loading = false; + reject(e); + }); + } + } + }); + } + /** + * 刷新图表数据 + * @param {Boolean} research 是否按照新的查询条件重新查询(调用verify函数) + */ + refreshChart (research = false) { + if (research) { + if (typeof this.searchVerify === 'function' && !this.searchVerify()) return; + } + + this.loadChartDataImpl(true).catch(e => {}); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formAuthClient/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formAuthClient/index.vue new file mode 100644 index 00000000..4ebbe735 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formAuthClient/index.vue @@ -0,0 +1,184 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateAuthClient/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateAuthClient/index.vue new file mode 100644 index 00000000..811a8b38 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateAuthClient/index.vue @@ -0,0 +1,179 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateUaaOperator/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateUaaOperator/index.vue new file mode 100644 index 00000000..872a7388 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateUaaOperator/index.vue @@ -0,0 +1,240 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateUaaUser/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateUaaUser/index.vue new file mode 100644 index 00000000..cb04c3aa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formCreateUaaUser/index.vue @@ -0,0 +1,217 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formUaaOperator/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formUaaOperator/index.vue new file mode 100644 index 00000000..bdf91784 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formUaaOperator/index.vue @@ -0,0 +1,242 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formUaaUser/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formUaaUser/index.vue new file mode 100644 index 00000000..c4cecae8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/generated/formUaaUser/index.vue @@ -0,0 +1,231 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/breadcrumb/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/breadcrumb/index.vue new file mode 100644 index 00000000..de4573a8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/breadcrumb/index.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/formModifyPassword/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/formModifyPassword/index.vue new file mode 100644 index 00000000..2c20fd99 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/formModifyPassword/index.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/sidebar/menu-item.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/sidebar/menu-item.vue new file mode 100644 index 00000000..3a28543f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/sidebar/menu-item.vue @@ -0,0 +1,59 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/sidebar/sidebar.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/sidebar/sidebar.vue new file mode 100644 index 00000000..066f75ad --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/components/sidebar/sidebar.vue @@ -0,0 +1,70 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/index.vue new file mode 100644 index 00000000..03a3be4c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/layout/index.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/login/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/login/index.vue new file mode 100644 index 00000000..21984fd7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/login/index.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/welcome/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/welcome/index.vue new file mode 100644 index 00000000..a01f7455 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/src/views/welcome/index.vue @@ -0,0 +1,156 @@ + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/static/.gitkeep b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/static/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/vue.config.js b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/vue.config.js new file mode 100644 index 00000000..41f99a21 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-admin-web/vue.config.js @@ -0,0 +1,5 @@ +module.exports = { + devServer: { + port: 8085 + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/.browserslistrc b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.browserslistrc new file mode 100644 index 00000000..d6471a38 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.browserslistrc @@ -0,0 +1,2 @@ +> 1% +last 2 versions diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/.editorconfig b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.editorconfig new file mode 100644 index 00000000..7053c49a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/.eslintignore b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.eslintignore new file mode 100644 index 00000000..9c420b5a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.eslintignore @@ -0,0 +1 @@ +/src/views/workflow/package/* \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/.eslintrc.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.eslintrc.js new file mode 100644 index 00000000..81d92950 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/essential', + '@vue/standard' + ], + parserOptions: { + parser: 'babel-eslint' + }, + rules: { + 'no-console': 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'semi': ['off', 'always'], + 'prefer-promise-reject-errors': ['error', { 'allowEmptyReject': true }], + 'no-trailing-spaces': ['error', { 'skipBlankLines': true }], + 'prefer-const': ['off'], + 'quote-props': ['off'], + 'object-curly-spacing': ['off'], + 'dot-notation': ['off'], + 'lines-between-class-members': ['off'], + // 'no-undef': ['off', 'always'], + // 'no-unused-vars': ['off', 'always'], + 'no-new-func': ['off', 'always'] + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + } + ] +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/.gitignore b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.gitignore new file mode 100644 index 00000000..a0dddc6f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/README.md b/orange-demo-uaa/orange-demo-multi-service-uaa-web/README.md new file mode 100644 index 00000000..3b5fbf8e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/README.md @@ -0,0 +1,15 @@ +## 橙单代码生成器 +### 构建命令 +``` bash +# install dependencies +npm install + +# serve with hot reload at localhost:8080 +npm run dev + +# build for production with minification +npm run build + +# run all tests +npm test +``` diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/babel.config.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/babel.config.js new file mode 100644 index 00000000..e9558405 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/jest.config.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/jest.config.js new file mode 100644 index 00000000..0f957914 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest' +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/package.json b/orange-demo-uaa/orange-demo-multi-service-uaa-web/package.json new file mode 100644 index 00000000..db304a7c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/package.json @@ -0,0 +1,71 @@ +{ + "name": "orange-project", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "dev": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "axios": "^0.18.0", + "echarts": "^4.2.1", + "element-ui": "^2.13.0", + "jquery": "^3.3.1", + "js-cookie": "^2.2.1", + "jsencrypt": "^3.0.0-rc.1", + "json-bigint": "^0.3.0", + "layui-layer": "^1.0.9", + "lodash": "^4.17.5", + "core-js": "^3.6.4", + "register-service-worker": "^1.6.2", + "sortablejs": "^1.7.0", + "v-charts": "^1.19.0", + "vue": "^2.6.11", + "vue-router": "^3.1.5", + "vuex": "^3.1.2", + "wangeditor": "^3.1.1", + "vue-json-viewer": "^2.2.18", + "min-dash": "^3.5.2", + "vuedraggable": "^2.24.3", + "xml-js": "^1.6.11", + "highlight.js": "^10.5.0", + "bpmn-js-token-simulation": "^0.10.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.2.0", + "@vue/cli-plugin-eslint": "~4.2.0", + "@vue/cli-plugin-pwa": "~4.2.0", + "@vue/cli-plugin-router": "~4.2.0", + "@vue/cli-plugin-unit-jest": "~4.2.0", + "@vue/cli-plugin-vuex": "~4.2.0", + "@vue/cli-service": "~4.2.0", + "@vue/eslint-config-standard": "^5.1.0", + "@vue/test-utils": "1.0.0-beta.31", + "babel-eslint": "^10.0.3", + "bpmn-js": "^7.4.0", + "bpmn-js-properties-panel": "^0.37.2", + "camunda-bpmn-moddle": "^4.4.1", + "eslint": "^6.7.2", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^6.1.2", + "lint-staged": "^9.5.0", + "node-sass": "^4.13.1", + "sass-loader": "^7.3.1", + "vue-template-compiler": "^2.6.11" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.{js,jsx,vue}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/favicon.ico b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/favicon.ico differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-192x192.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-192x192.png new file mode 100644 index 00000000..b02aa64d Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-192x192.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-512x512.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-512x512.png new file mode 100644 index 00000000..06088b01 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-512x512.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-maskable-192x192.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-maskable-192x192.png new file mode 100644 index 00000000..791e9c8c Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-maskable-192x192.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-maskable-512x512.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-maskable-512x512.png new file mode 100644 index 00000000..5f2098ed Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/android-chrome-maskable-512x512.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-120x120.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-120x120.png new file mode 100644 index 00000000..1427cf62 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-120x120.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-152x152.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-152x152.png new file mode 100644 index 00000000..f24d454a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-152x152.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-180x180.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-180x180.png new file mode 100644 index 00000000..404e192a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-180x180.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-60x60.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-60x60.png new file mode 100644 index 00000000..cf10a560 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-60x60.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-76x76.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-76x76.png new file mode 100644 index 00000000..c500769e Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon-76x76.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon.png new file mode 100644 index 00000000..03c0c5d5 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/apple-touch-icon.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/favicon-16x16.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/favicon-16x16.png new file mode 100644 index 00000000..42af0096 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/favicon-16x16.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/favicon-32x32.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/favicon-32x32.png new file mode 100644 index 00000000..46ca04de Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/favicon-32x32.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/msapplication-icon-144x144.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/msapplication-icon-144x144.png new file mode 100644 index 00000000..7808237a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/msapplication-icon-144x144.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/mstile-150x150.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/mstile-150x150.png new file mode 100644 index 00000000..3b37a43a Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/mstile-150x150.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/safari-pinned-tab.svg b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/safari-pinned-tab.svg new file mode 100644 index 00000000..732afd8e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/img/icons/safari-pinned-tab.svg @@ -0,0 +1,149 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/index.html b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/index.html new file mode 100644 index 00000000..011aade2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/index.html @@ -0,0 +1,16 @@ + + + + + + + 橙单代码生成平台 + + + +
+ + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/robots.txt b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/App.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/App.vue new file mode 100644 index 00000000..7e16a155 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/App.vue @@ -0,0 +1,21 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/CourseController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/CourseController.js new file mode 100644 index 00000000..6f4b6ce3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/CourseController.js @@ -0,0 +1,25 @@ +export default class CourseController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/course/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/course/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/CourseClass/course/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/course/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/course/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/course/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/CourseTransStatsController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/CourseTransStatsController.js new file mode 100644 index 00000000..0680b7ea --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/CourseTransStatsController.js @@ -0,0 +1,17 @@ +export default class CourseTransStatsController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/courseTransStats/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/courseTransStats/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/stats/courseTransStats/export', params, fileName); + } + + static listWithGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/courseTransStats/listWithGroup', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/DictionaryController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/DictionaryController.js new file mode 100644 index 00000000..de28d92a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/DictionaryController.js @@ -0,0 +1,194 @@ +import * as staticDict from '@/staticDict' + +export default class DictionaryController { + static dictSysRole (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/upms/sysRole/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('角色字典'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictSysUserStatus () { + return new Promise((resolve) => { + resolve(staticDict.SysUserStatus); + }); + } + static dictSysUserType () { + return new Promise((resolve) => { + resolve(staticDict.SysUserType); + }); + } + static dictClassStatus () { + return new Promise((resolve) => { + resolve(staticDict.ClassStatus); + }); + } + static dictClassLevel () { + return new Promise((resolve) => { + resolve(staticDict.ClassLevel); + }); + } + static dictCourseDifficult () { + return new Promise((resolve) => { + resolve(staticDict.CourseDifficult); + }); + } + static dictSubject () { + return new Promise((resolve) => { + resolve(staticDict.Subject); + }); + } + static dictStudentActionType () { + return new Promise((resolve) => { + resolve(staticDict.StudentActionType); + }); + } + static dictDeviceType () { + return new Promise((resolve) => { + resolve(staticDict.DeviceType); + }); + } + static dictGender () { + return new Promise((resolve) => { + resolve(staticDict.Gender); + }); + } + static dictExpLevel () { + return new Promise((resolve) => { + resolve(staticDict.ExpLevel); + }); + } + static dictStudentStatus () { + return new Promise((resolve) => { + resolve(staticDict.StudentStatus); + }); + } + static dictAreaCode (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/CourseClass/areaCode/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('行政区划'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictAreaCodeAll (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/CourseClass/areaCode/listAll', 'get', params, axiosOption, httpOption).then(res => { + resolve(res.data); + }).catch(err => { + reject(err); + }); + }); + } + static dictAreaCodeByParentId (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/CourseClass/areaCode/listDictByParentId', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('行政区划'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictAddAreaCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/areaCode/add', 'post', params, axiosOption, httpOption); + } + static dictDeleteAreaCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/areaCode/delete', 'post', params, axiosOption, httpOption); + } + static dictUpdateAreaCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/areaCode/update', 'post', params, axiosOption, httpOption); + } + static dictReloadAreaCodeCachedData (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/areaCode/reloadCachedData', 'get', params, axiosOption, httpOption); + } + static dictCourse (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/CourseClass/course/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('课程'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictGrade (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/CourseClass/grade/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('年级'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictGradeAll (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/CourseClass/grade/listAll', 'get', params, axiosOption, httpOption).then(res => { + resolve(res.data); + }).catch(err => { + reject(err); + }); + }); + } + static dictAddGrade (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/grade/add', 'post', params, axiosOption, httpOption); + } + static dictDeleteGrade (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/grade/delete', 'post', params, axiosOption, httpOption); + } + static dictUpdateGrade (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/grade/update', 'post', params, axiosOption, httpOption); + } + static dictReloadGradeCachedData (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/grade/reloadCachedData', 'get', params, axiosOption, httpOption); + } + static dictStudent (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/CourseClass/student/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('学生'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictSysDept (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/upms/sysDept/listDict', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('部门字典'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictSysDeptByParentId (sender, params, axiosOption, httpOption) { + return new Promise((resolve, reject) => { + sender.doUrl('/admin/upms/sysDept/listDictByParentId', 'get', params, axiosOption, httpOption).then(res => { + let dictData = new staticDict.DictionaryBase('部门字典'); + dictData.setList(res.data); + resolve(dictData); + }).catch(err => { + reject(err); + }); + }); + } + static dictSysDataPermType () { + return new Promise((resolve) => { + resolve(staticDict.SysDataPermType); + }); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentActionStatsController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentActionStatsController.js new file mode 100644 index 00000000..92de8dd7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentActionStatsController.js @@ -0,0 +1,17 @@ +export default class StudentActionStatsController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionStats/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionStats/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/stats/studentActionStats/export', params, fileName); + } + + static listWithGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionStats/listWithGroup', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentActionTransController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentActionTransController.js new file mode 100644 index 00000000..90556d35 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentActionTransController.js @@ -0,0 +1,25 @@ +export default class StudentActionTransController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionTrans/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionTrans/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/stats/studentActionTrans/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionTrans/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionTrans/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/stats/studentActionTrans/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentClassController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentClassController.js new file mode 100644 index 00000000..86a65378 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentClassController.js @@ -0,0 +1,65 @@ +export default class StudentClassController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/CourseClass/studentClass/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/delete', 'post', params, axiosOption, httpOption); + } + + static listClassCourse (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/listClassCourse', 'post', params, axiosOption, httpOption); + } + + static listNotInClassCourse (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/listNotInClassCourse', 'post', params, axiosOption, httpOption); + } + + static addClassCourse (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/addClassCourse', 'post', params, axiosOption, httpOption); + } + + static deleteClassCourse (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/deleteClassCourse', 'post', params, axiosOption, httpOption); + } + + static updateClassCourse (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/updateClassCourse', 'post', params, axiosOption, httpOption); + } + + static viewClassCourse (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/viewClassCourse', 'get', params, axiosOption, httpOption); + } + + static listClassStudent (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/listClassStudent', 'post', params, axiosOption, httpOption); + } + + static listNotInClassStudent (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/listNotInClassStudent', 'post', params, axiosOption, httpOption); + } + + static addClassStudent (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/addClassStudent', 'post', params, axiosOption, httpOption); + } + + static deleteClassStudent (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/studentClass/deleteClassStudent', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentController.js new file mode 100644 index 00000000..f3900bab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/StudentController.js @@ -0,0 +1,25 @@ +export default class StudentController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/student/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/student/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('/admin/CourseClass/student/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/student/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/student/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/CourseClass/student/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysDataPermController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysDataPermController.js new file mode 100644 index 00000000..15fd5ccc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysDataPermController.js @@ -0,0 +1,61 @@ +export default class SysDataPermController { + /** + * @param params {dataPermId, dataPermName, deptIdListString} + */ + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/add', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, dataPermName, deptIdListString} + */ + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/update', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId} + */ + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/delete', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermName} + */ + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/list', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId} + */ + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/view', 'get', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, searchString} + */ + static listDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/listDataPermUser', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, userIdListString} + */ + static addDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/addDataPermUser', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {dataPermId, userId} + */ + static deleteDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/deleteDataPermUser', 'post', params, axiosOption, httpOption); + } + + static listNotInDataPermUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDataPerm/listNotInDataPermUser', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysDeptController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysDeptController.js new file mode 100644 index 00000000..ff96ce55 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysDeptController.js @@ -0,0 +1,25 @@ +export default class SysDeptController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('admin/upms/sysDept/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysUserController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysUserController.js new file mode 100644 index 00000000..92d627d3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SysUserController.js @@ -0,0 +1,25 @@ +export default class SysUserController { + static list (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/list', 'post', params, axiosOption, httpOption); + } + + static view (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/view', 'get', params, axiosOption, httpOption); + } + + static export (sender, params, fileName) { + return sender.download('admin/upms/sysUser/export', params, fileName); + } + + static add (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/add', 'post', params, axiosOption, httpOption); + } + + static update (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/update', 'post', params, axiosOption, httpOption); + } + + static delete (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SystemController.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SystemController.js new file mode 100644 index 00000000..e4ff2346 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/Controller/SystemController.js @@ -0,0 +1,268 @@ +export default class SystemController { + static login (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/doLogin', 'post', params, axiosOption, httpOption); + } + + static logout (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/doLogout', 'post', params, axiosOption, httpOption); + } + + static changePassword (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/changePassword', 'post', params, axiosOption, httpOption); + } + + static getLoginInfo (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/getLoginInfo', 'get', params, axiosOption, httpOption); + } + + static doLoginByUaa (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/doLoginByUaa', 'post', params, axiosOption, httpOption); + } + + static getUaaLoginUrl (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/getUaaLoginUrl', 'get', params, axiosOption, httpOption); + } + + static getUaaLogoutUrl (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/getUaaLogoutUrl', 'get', params, axiosOption, httpOption); + } + + static changePasswordByUaa (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/login/changePasswordByUaa', 'post', params, axiosOption, httpOption); + } + + static getDictList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDict/list', 'post', params, axiosOption, httpOption); + } + + static getRoleList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/list', 'post', params, axiosOption, httpOption); + } + + static getRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/view', 'get', params, axiosOption, httpOption); + } + + static deleteRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/delete', 'post', params, axiosOption, httpOption); + } + + static addRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/add', 'post', params, axiosOption, httpOption); + } + + static updateRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/update', 'post', params, axiosOption, httpOption); + } + + static getUserList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/list', 'post', params, axiosOption, httpOption); + } + + static getUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/view', 'get', params, axiosOption, httpOption); + } + + static deleteUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/delete', 'post', params, axiosOption, httpOption); + } + + static addUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/add', 'post', params, axiosOption, httpOption); + } + + static updateUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/update', 'post', params, axiosOption, httpOption); + } + + static addDepartment (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/add', 'post', params, axiosOption, httpOption); + } + + static deleteDepartment (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/delete', 'post', params, axiosOption, httpOption); + } + + static updateDepartment (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/update', 'post', params, axiosOption, httpOption); + } + + static getDepartmentList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysDept/list', 'post', params, axiosOption, httpOption); + } + + // 菜单接口 + static getMenuPermList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/list', 'post', params, axiosOption, httpOption); + } + static addMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/add', 'post', params, axiosOption, httpOption); + } + + static updateMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/update', 'post', params, axiosOption, httpOption); + } + static deleteMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/delete', 'post', params, axiosOption, httpOption); + } + + static viewMenu (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/view', 'get', params, axiosOption, httpOption); + } + // 权限字接口 + static getPermCodeList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/list', 'post', params, axiosOption, httpOption); + } + + static addPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/add', 'post', params, axiosOption, httpOption); + } + + static updatePermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/update', 'post', params, axiosOption, httpOption); + } + + static deletePermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/delete', 'post', params, axiosOption, httpOption); + } + + static viewPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/view', 'get', params, axiosOption, httpOption); + } + + // 权限资源接口 + static getAllPermList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/listAll', 'post', params, axiosOption, httpOption); + } + + static getPermGroupList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/list', 'post', params, axiosOption, httpOption); + } + + static addPermGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/add', 'post', params, axiosOption, httpOption); + } + + static updatePermGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/update', 'post', params, axiosOption, httpOption); + } + + static deletePermGroup (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermModule/delete', 'post', params, axiosOption, httpOption); + } + + static getPermList (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/list', 'post', params, axiosOption, httpOption); + } + + static viewPerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/view', 'get', params, axiosOption, httpOption); + } + + static addPerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/add', 'post', params, axiosOption, httpOption); + } + + static updatePerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/update', 'post', params, axiosOption, httpOption); + } + + static deletePerm (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/delete', 'post', params, axiosOption, httpOption); + } + /** + * @param params {roleId, searchString} + */ + static listRoleUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listUserRole', 'post', params, axiosOption, httpOption); + } + + static listNotInUserRole (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listNotInUserRole', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {roleId, userIdListString} + */ + static addRoleUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/addUserRole', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {roleId, userId} + */ + static deleteRoleUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/deleteUserRole', 'post', params, axiosOption, httpOption); + } + + /** + * @param params {} + */ + static queryRoleByPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listAllRolesByPermCode', 'post', params, axiosOption, httpOption); + } + // 权限查询 + static listSysPermWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/listSysPermWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysPermCodeWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/listSysPermCodeWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysMenuWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysUser/listSysMenuWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysPermByRoleIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listSysPermWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysPermCodeByRoleIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysRole/listSysPermCodeWithDetail', 'get', params, axiosOption, httpOption); + } + + static listMenuPermCode (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/listMenuPerm', 'get', params, axiosOption, httpOption); + } + + static listSysPermByMenuIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/listSysPermWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysUserByMenuIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysMenu/listSysUserWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysUserByPermCodeIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/listSysUserWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysRoleByPermCodeIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPermCode/listSysRoleWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysUserByPermIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/listSysUserWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysRoleByPermIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/listSysRoleWithDetail', 'get', params, axiosOption, httpOption); + } + + static listSysMenuByPermIdWithDetail (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysPerm/listSysMenuWithDetail', 'get', params, axiosOption, httpOption); + } + // 操作日志 + static listSysOperationLog (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/sysOperationLog/list', 'post', params, axiosOption, httpOption); + } + // 在线用户 + static listSysLoginUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/loginUser/list', 'post', params, axiosOption, httpOption); + } + + static deleteSysLoginUser (sender, params, axiosOption, httpOption) { + return sender.doUrl('admin/upms/loginUser/delete', 'post', params, axiosOption, httpOption); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/index.js new file mode 100644 index 00000000..0d5b1a16 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/api/index.js @@ -0,0 +1,25 @@ +import SystemController from './Controller/SystemController' +import SysDataPermController from './Controller/SysDataPermController' +import DictionaryController from './Controller/DictionaryController' +import CourseController from './Controller/CourseController.js'; +import StudentController from './Controller/StudentController.js'; +import SysDeptController from './Controller/SysDeptController.js'; +import SysUserController from './Controller/SysUserController.js'; +import StudentClassController from './Controller/StudentClassController.js'; +import CourseTransStatsController from './Controller/CourseTransStatsController.js'; +import StudentActionStatsController from './Controller/StudentActionStatsController.js'; +import StudentActionTransController from './Controller/StudentActionTransController.js'; + +export { + SystemController, + SysDataPermController, + DictionaryController, + CourseController, + StudentController, + SysDeptController, + SysUserController, + StudentClassController, + CourseTransStatsController, + StudentActionStatsController, + StudentActionTransController +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-blue.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-blue.scss new file mode 100644 index 00000000..5e4966bb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-blue.scss @@ -0,0 +1,1014 @@ +/* Element Chalk Variables */ + +@mixin linear-gradient ($from, $to, $direction) { + @if variable-exists(to) { + @if variable-exists(direction) { + background: linear-gradient($direction, $from, $to); + } @else { + background: linear-gradient($from, $to); + } + } @else { + background: $from; + } +} + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #0092FF !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: $--color-primary; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: rgba(255, 255, 255, 0.01); +$--color-menu-item-active-background-to: rgba(255, 255, 255, 0.3); + +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: rgba(255, 255, 255, .12) !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-menu-background !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-menu-item-active-background !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-dark.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-dark.scss new file mode 100644 index 00000000..ed98457d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-dark.scss @@ -0,0 +1,1000 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #409EFF !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: #272C34; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: $--color-primary; +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: $--color-primary-light-9 !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-menu-item-active-background !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-primary !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-green.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-green.scss new file mode 100644 index 00000000..e51e10f9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-green.scss @@ -0,0 +1,1000 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #00988B !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: #272C34; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: $--color-primary; +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: $--color-primary-light-9 !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-menu-item-active-background !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-primary !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-light.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-light.scss new file mode 100644 index 00000000..2c6cdad8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-light.scss @@ -0,0 +1,998 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +// color for left sidebar title +$--color-sidebar-title-text: #381524; +// color for left sidebar background +$--color-menu-background: #FFFFFF; +/// color|1|Brand Color|0 +$--color-primary: #409EFF !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #67C23A !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: $--color-primary-light-9 !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default; +$--dropdown-menuItem-hover-color: $--link-color !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-text-primary !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-primary-light-9 !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-orange.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-orange.scss new file mode 100644 index 00000000..26da27c0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/element-variables-orange.scss @@ -0,0 +1,1001 @@ +/* Element Chalk Variables */ + +// Special comment for theme configurator +// type|skipAutoTranslation|Category|Order +// skipAutoTranslation 1 + +/* Transition +-------------------------- */ +$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default; +$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--fade-linear-transition: opacity 200ms linear !default; +$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default; +$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default; +$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default; + +/* Color +-------------------------- */ +/// color|1|Brand Color|0 +$--color-primary: #FCA834 !default; +/// color|1|Background Color|4 +$--color-white: #FFFFFF !default; +/// color|1|Background Color|4 +$--color-black: #000000 !default; +$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */ +$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */ +$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */ +$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */ +$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */ +$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */ +$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */ +$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */ +$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */ +/// color|1|Functional Color|1 +$--color-success: #6DC741 !default; +/// color|1|Functional Color|1 +$--color-warning: #E6A23C !default; +/// color|1|Functional Color|1 +$--color-danger: #F56C6C !default; +/// color|1|Functional Color|1 +$--color-info: #909399 !default; + +$--color-success-light: mix($--color-white, $--color-success, 80%) !default; +$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default; +$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default; +$--color-info-light: mix($--color-white, $--color-info, 80%) !default; + +$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default; +$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default; +$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default; +$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default; +/// color|1|Font Color|2 +$--color-text-primary: #303133 !default; +/// color|1|Font Color|2 +$--color-text-regular: #606266 !default; +/// color|1|Font Color|2 +$--color-text-secondary: #909399 !default; +/// color|1|Font Color|2 +$--color-text-placeholder: #C0C4CC !default; +/// color|1|Border Color|3 +$--border-color-base: #DCDFE6 !default; +/// color|1|Border Color|3 +$--border-color-light: #E4E7ED !default; +/// color|1|Border Color|3 +$--border-color-lighter: #EBEEF5 !default; +/// color|1|Border Color|3 +$--border-color-extra-light: #F2F6FC !default; + +// Background +/// color|1|Background Color|4 +$--background-color-base: #F5F7FA !default; + +// color for left sidebar title +$--color-sidebar-title-text: #FFFFFF; +// color for left sidebar background +$--color-menu-background: #042345; +$--color-menu-item-active-text-color: #FFFFFF; +$--color-menu-item-active-background: $--color-primary; +$--color-submenu-background: #021F3B; +/* Link +-------------------------- */ +$--link-color: $--color-primary-light-2 !default; +$--link-hover-color: $--color-primary !default; + +/* Border +-------------------------- */ +$--border-width-base: 1px !default; +$--border-style-base: solid !default; +$--border-color-hover: $--color-text-placeholder !default; +$--border-base: $--border-width-base $--border-style-base $--border-color-base !default; +/// borderRadius|1|Radius|0 +$--border-radius-base: 4px !default; +/// borderRadius|1|Radius|0 +$--border-radius-small: 2px !default; +/// borderRadius|1|Radius|0 +$--border-radius-circle: 100% !default; +/// borderRadius|1|Radius|0 +$--border-radius-zero: 0 !default; + +// Box-shadow +/// boxShadow|1|Shadow|1 +$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default; +// boxShadow|1|Shadow|1 +$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default; +/// boxShadow|1|Shadow|1 +$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default; + +/* Fill +-------------------------- */ +$--fill-base: $--color-white !default; + +/* Typography +-------------------------- */ +$--font-path: 'fonts' !default; +$--font-display: 'auto' !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-large: 20px !default; +/// fontSize|1|Font Size|0 +$--font-size-large: 18px !default; +/// fontSize|1|Font Size|0 +$--font-size-medium: 16px !default; +/// fontSize|1|Font Size|0 +$--font-size-base: 14px !default; +/// fontSize|1|Font Size|0 +$--font-size-small: 13px !default; +/// fontSize|1|Font Size|0 +$--font-size-extra-small: 12px !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-primary: 500 !default; +/// fontWeight|1|Font Weight|1 +$--font-weight-secondary: 100 !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-primary: 24px !default; +/// fontLineHeight|1|Line Height|2 +$--font-line-height-secondary: 16px !default; +$--font-color-disabled-base: #bbb !default; +/* Size +-------------------------- */ +$--size-base: 14px !default; + +/* z-index +-------------------------- */ +$--index-normal: 1 !default; +$--index-top: 1000 !default; +$--index-popper: 2000 !default; + +/* Disable base +-------------------------- */ +$--disabled-fill-base: $--background-color-base !default; +$--disabled-color-base: $--color-text-placeholder !default; +$--disabled-border-base: $--border-color-light !default; + +/* Icon +-------------------------- */ +$--icon-color: #666 !default; +$--icon-color-base: $--color-info !default; + +/* Checkbox +-------------------------- */ +/// fontSize||Font|1 +$--checkbox-font-size: 14px !default; +/// fontWeight||Font|1 +$--checkbox-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--checkbox-font-color: $--color-text-regular !default; +$--checkbox-input-height: 14px !default; +$--checkbox-input-width: 14px !default; +/// borderRadius||Border|2 +$--checkbox-border-radius: $--border-radius-small !default; +/// color||Color|0 +$--checkbox-background-color: $--color-white !default; +$--checkbox-input-border: $--border-base !default; + +/// color||Color|0 +$--checkbox-disabled-border-color: $--border-color-base !default; +$--checkbox-disabled-input-fill: #edf2fc !default; +$--checkbox-disabled-icon-color: $--color-text-placeholder !default; + +$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default; +$--checkbox-disabled-checked-input-border-color: $--border-color-base !default; +$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--checkbox-checked-font-color: $--color-primary !default; +$--checkbox-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-checked-background-color: $--color-primary !default; +$--checkbox-checked-icon-color: $--fill-base !default; + +$--checkbox-input-border-color-hover: $--color-primary !default; +/// height||Other|4 +$--checkbox-bordered-height: 40px !default; +/// padding||Spacing|3 +$--checkbox-bordered-padding: 9px 20px 9px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default; +/// padding||Spacing|3 +$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default; +$--checkbox-bordered-medium-input-height: 14px !default; +$--checkbox-bordered-medium-input-width: 14px !default; +/// height||Other|4 +$--checkbox-bordered-medium-height: 36px !default; +$--checkbox-bordered-small-input-height: 12px !default; +$--checkbox-bordered-small-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-small-height: 32px !default; +$--checkbox-bordered-mini-input-height: 12px !default; +$--checkbox-bordered-mini-input-width: 12px !default; +/// height||Other|4 +$--checkbox-bordered-mini-height: 28px !default; + +/// color||Color|0 +$--checkbox-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--checkbox-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--checkbox-button-checked-border-color: $--color-primary !default; + + + +/* Radio +-------------------------- */ +/// fontSize||Font|1 +$--radio-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--radio-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--radio-font-color: $--color-text-regular !default; +$--radio-input-height: 14px !default; +$--radio-input-width: 14px !default; +/// borderRadius||Border|2 +$--radio-input-border-radius: $--border-radius-circle !default; +/// color||Color|0 +$--radio-input-background-color: $--color-white !default; +$--radio-input-border: $--border-base !default; +/// color||Color|0 +$--radio-input-border-color: $--border-color-base !default; +/// color||Color|0 +$--radio-icon-color: $--color-white !default; + +$--radio-disabled-input-border-color: $--disabled-border-base !default; +$--radio-disabled-input-fill: $--disabled-fill-base !default; +$--radio-disabled-icon-color: $--disabled-fill-base !default; + +$--radio-disabled-checked-input-border-color: $--disabled-border-base !default; +$--radio-disabled-checked-input-fill: $--disabled-fill-base !default; +$--radio-disabled-checked-icon-color: $--color-text-placeholder !default; + +/// color||Color|0 +$--radio-checked-font-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-border-color: $--color-primary !default; +/// color||Color|0 +$--radio-checked-input-background-color: $--color-white !default; +/// color||Color|0 +$--radio-checked-icon-color: $--color-primary !default; + +$--radio-input-border-color-hover: $--color-primary !default; + +$--radio-bordered-height: 40px !default; +$--radio-bordered-padding: 12px 20px 0 10px !default; +$--radio-bordered-medium-padding: 10px 20px 0 10px !default; +$--radio-bordered-small-padding: 8px 15px 0 10px !default; +$--radio-bordered-mini-padding: 6px 15px 0 10px !default; +$--radio-bordered-medium-input-height: 14px !default; +$--radio-bordered-medium-input-width: 14px !default; +$--radio-bordered-medium-height: 36px !default; +$--radio-bordered-small-input-height: 12px !default; +$--radio-bordered-small-input-width: 12px !default; +$--radio-bordered-small-height: 32px !default; +$--radio-bordered-mini-input-height: 12px !default; +$--radio-bordered-mini-input-width: 12px !default; +$--radio-bordered-mini-height: 28px !default; + +/// fontSize||Font|1 +$--radio-button-font-size: $--font-size-base !default; +/// color||Color|0 +$--radio-button-checked-background-color: $--color-primary !default; +/// color||Color|0 +$--radio-button-checked-font-color: $--color-white !default; +/// color||Color|0 +$--radio-button-checked-border-color: $--color-primary !default; +$--radio-button-disabled-checked-fill: $--border-color-extra-light !default; + +/* Select +-------------------------- */ +$--select-border-color-hover: $--border-color-hover !default; +$--select-disabled-border: $--disabled-border-base !default; +/// fontSize||Font|1 +$--select-font-size: $--font-size-base !default; +$--select-close-hover-color: $--color-text-secondary !default; + +$--select-input-color: $--color-text-placeholder !default; +$--select-multiple-input-color: #666 !default; +/// color||Color|0 +$--select-input-focus-border-color: $--color-primary !default; +/// fontSize||Font|1 +$--select-input-font-size: 14px !default; + +$--select-option-color: $--color-text-regular !default; +$--select-option-disabled-color: $--color-text-placeholder !default; +$--select-option-disabled-background: $--color-white !default; +/// height||Other|4 +$--select-option-height: 34px !default; +$--select-option-hover-background: $--background-color-base !default; +/// color||Color|0 +$--select-option-selected-font-color: $--color-primary !default; +$--select-option-selected-hover: $--background-color-base !default; + +$--select-group-color: $--color-info !default; +$--select-group-height: 30px !default; +$--select-group-font-size: 12px !default; + +$--select-dropdown-background: $--color-white !default; +$--select-dropdown-shadow: $--box-shadow-light !default; +$--select-dropdown-empty-color: #999 !default; +/// height||Other|4 +$--select-dropdown-max-height: 274px !default; +$--select-dropdown-padding: 6px 0 !default; +$--select-dropdown-empty-padding: 10px 0 !default; +$--select-dropdown-border: solid 1px $--border-color-light !default; + +/* Alert +-------------------------- */ +$--alert-padding: 8px 16px !default; +/// borderRadius||Border|2 +$--alert-border-radius: $--border-radius-base !default; +/// fontSize||Font|1 +$--alert-title-font-size: 13px !default; +/// fontSize||Font|1 +$--alert-description-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-font-size: 12px !default; +/// fontSize||Font|1 +$--alert-close-customed-font-size: 13px !default; + +$--alert-success-color: $--color-success-lighter !default; +$--alert-info-color: $--color-info-lighter !default; +$--alert-warning-color: $--color-warning-lighter !default; +$--alert-danger-color: $--color-danger-lighter !default; + +/// height||Other|4 +$--alert-icon-size: 16px !default; +/// height||Other|4 +$--alert-icon-large-size: 28px !default; + +/* MessageBox +-------------------------- */ +/// color||Color|0 +$--messagebox-title-color: $--color-text-primary !default; +$--msgbox-width: 420px !default; +$--msgbox-border-radius: 4px !default; +/// fontSize||Font|1 +$--messagebox-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--messagebox-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--messagebox-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--messagebox-error-font-size: 12px !default; +$--msgbox-padding-primary: 15px !default; +/// color||Color|0 +$--messagebox-success-color: $--color-success !default; +/// color||Color|0 +$--messagebox-info-color: $--color-info !default; +/// color||Color|0 +$--messagebox-warning-color: $--color-warning !default; +/// color||Color|0 +$--messagebox-danger-color: $--color-danger !default; + +/* Message +-------------------------- */ +$--message-shadow: $--box-shadow-base !default; +$--message-min-width: 380px !default; +$--message-background-color: #edf2fc !default; +$--message-padding: 15px 15px 15px 20px !default; +/// color||Color|0 +$--message-close-icon-color: $--color-text-placeholder !default; +/// height||Other|4 +$--message-close-size: 16px !default; +/// color||Color|0 +$--message-close-hover-color: $--color-text-secondary !default; + +/// color||Color|0 +$--message-success-font-color: $--color-success !default; +/// color||Color|0 +$--message-info-font-color: $--color-info !default; +/// color||Color|0 +$--message-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--message-danger-font-color: $--color-danger !default; + +/* Notification +-------------------------- */ +$--notification-width: 330px !default; +/// padding||Spacing|3 +$--notification-padding: 14px 26px 14px 13px !default; +$--notification-radius: 8px !default; +$--notification-shadow: $--box-shadow-light !default; +/// color||Color|0 +$--notification-border-color: $--border-color-lighter !default; +$--notification-icon-size: 24px !default; +$--notification-close-font-size: $--message-close-size !default; +$--notification-group-margin-left: 13px !default; +$--notification-group-margin-right: 8px !default; +/// fontSize||Font|1 +$--notification-content-font-size: $--font-size-base !default; +/// color||Color|0 +$--notification-content-color: $--color-text-regular !default; +/// fontSize||Font|1 +$--notification-title-font-size: 16px !default; +/// color||Color|0 +$--notification-title-color: $--color-text-primary !default; + +/// color||Color|0 +$--notification-close-color: $--color-text-secondary !default; +/// color||Color|0 +$--notification-close-hover-color: $--color-text-regular !default; + +/// color||Color|0 +$--notification-success-icon-color: $--color-success !default; +/// color||Color|0 +$--notification-info-icon-color: $--color-info !default; +/// color||Color|0 +$--notification-warning-icon-color: $--color-warning !default; +/// color||Color|0 +$--notification-danger-icon-color: $--color-danger !default; + +/* Input +-------------------------- */ +$--input-font-size: $--font-size-base !default; +/// color||Color|0 +$--input-font-color: $--color-text-regular !default; +/// height||Other|4 +$--input-width: 140px !default; +/// height||Other|4 +$--input-height: 40px !default; +$--input-border: $--border-base !default; +$--input-border-color: $--border-color-base !default; +/// borderRadius||Border|2 +$--input-border-radius: $--border-radius-base !default; +$--input-border-color-hover: $--border-color-hover !default; +/// color||Color|0 +$--input-background-color: $--color-white !default; +$--input-fill-disabled: $--disabled-fill-base !default; +$--input-color-disabled: $--font-color-disabled-base !default; +/// color||Color|0 +$--input-icon-color: $--color-text-placeholder !default; +/// color||Color|0 +$--input-placeholder-color: $--color-text-placeholder !default; +$--input-max-width: 314px !default; + +$--input-hover-border: $--border-color-hover !default; +$--input-clear-hover-color: $--color-text-secondary !default; + +$--input-focus-border: $--color-primary !default; +$--input-focus-fill: $--color-white !default; + +$--input-disabled-fill: $--disabled-fill-base !default; +$--input-disabled-border: $--disabled-border-base !default; +$--input-disabled-color: $--disabled-color-base !default; +$--input-disabled-placeholder-color: $--color-text-placeholder !default; + +/// fontSize||Font|1 +$--input-medium-font-size: 14px !default; +/// height||Other|4 +$--input-medium-height: 36px !default; +/// fontSize||Font|1 +$--input-small-font-size: 13px !default; +/// height||Other|4 +$--input-small-height: 32px !default; +/// fontSize||Font|1 +$--input-mini-font-size: 12px !default; +/// height||Other|4 +$--input-mini-height: 28px !default; + +/* Cascader +-------------------------- */ +/// color||Color|0 +$--cascader-menu-font-color: $--color-text-regular !default; +/// color||Color|0 +$--cascader-menu-selected-font-color: $--color-primary !default; +$--cascader-menu-fill: $--fill-base !default; +$--cascader-menu-font-size: $--font-size-base !default; +$--cascader-menu-radius: $--border-radius-base !default; +$--cascader-menu-border: solid 1px $--border-color-light !default; +$--cascader-menu-shadow: $--box-shadow-light !default; +$--cascader-node-background-hover: $--background-color-base !default; +$--cascader-node-color-disabled:$--color-text-placeholder !default; +$--cascader-color-empty:$--color-text-placeholder !default; +$--cascader-tag-background: #f0f2f5; + +/* Group +-------------------------- */ +$--group-option-flex: 0 0 (1/5) * 100% !default; +$--group-option-offset-bottom: 12px !default; +$--group-option-fill-hover: rgba($--color-black, 0.06) !default; +$--group-title-color: $--color-black !default; +$--group-title-font-size: $--font-size-base !default; +$--group-title-width: 66px !default; + +/* Tab +-------------------------- */ +$--tab-font-size: $--font-size-base !default; +$--tab-border-line: 1px solid #e4e4e4 !default; +$--tab-header-color-active: $--color-text-secondary !default; +$--tab-header-color-hover: $--color-text-regular !default; +$--tab-header-color: $--color-text-regular !default; +$--tab-header-fill-active: rgba($--color-black, 0.06) !default; +$--tab-header-fill-hover: rgba($--color-black, 0.06) !default; +$--tab-vertical-header-width: 90px !default; +$--tab-vertical-header-count-color: $--color-white !default; +$--tab-vertical-header-count-fill: $--color-text-secondary !default; + +/* Button +-------------------------- */ +/// fontSize||Font|1 +$--button-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--button-font-weight: $--font-weight-primary !default; +/// borderRadius||Border|2 +$--button-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-padding-vertical: 12px !default; +/// padding||Spacing|3 +$--button-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-medium-font-size: $--font-size-base !default; +/// borderRadius||Border|2 +$--button-medium-border-radius: $--border-radius-base !default; +/// padding||Spacing|3 +$--button-medium-padding-vertical: 10px !default; +/// padding||Spacing|3 +$--button-medium-padding-horizontal: 20px !default; + +/// fontSize||Font|1 +$--button-small-font-size: 12px !default; +$--button-small-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-small-padding-vertical: 9px !default; +/// padding||Spacing|3 +$--button-small-padding-horizontal: 15px !default; +/// fontSize||Font|1 +$--button-mini-font-size: 12px !default; +$--button-mini-border-radius: #{$--border-radius-base - 1} !default; +/// padding||Spacing|3 +$--button-mini-padding-vertical: 7px !default; +/// padding||Spacing|3 +$--button-mini-padding-horizontal: 15px !default; + +/// color||Color|0 +$--button-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--button-default-background-color: $--color-white !default; +/// color||Color|0 +$--button-default-border-color: $--border-color-base !default; + +/// color||Color|0 +$--button-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--button-disabled-border-color: $--border-color-lighter !default; + +/// color||Color|0 +$--button-primary-border-color: $--color-primary !default; +/// color||Color|0 +$--button-primary-font-color: $--color-white !default; +/// color||Color|0 +$--button-primary-background-color: $--color-primary !default; +/// color||Color|0 +$--button-success-border-color: $--color-success !default; +/// color||Color|0 +$--button-success-font-color: $--color-white !default; +/// color||Color|0 +$--button-success-background-color: $--color-success !default; +/// color||Color|0 +$--button-warning-border-color: $--color-warning !default; +/// color||Color|0 +$--button-warning-font-color: $--color-white !default; +/// color||Color|0 +$--button-warning-background-color: $--color-warning !default; +/// color||Color|0 +$--button-danger-border-color: $--color-danger !default; +/// color||Color|0 +$--button-danger-font-color: $--color-white !default; +/// color||Color|0 +$--button-danger-background-color: $--color-danger !default; +/// color||Color|0 +$--button-info-border-color: $--color-info !default; +/// color||Color|0 +$--button-info-font-color: $--color-white !default; +/// color||Color|0 +$--button-info-background-color: $--color-info !default; + +$--button-hover-tint-percent: 20% !default; +$--button-active-shade-percent: 10% !default; + + +/* cascader +-------------------------- */ +$--cascader-height: 200px !default; + +/* Switch +-------------------------- */ +/// color||Color|0 +$--switch-on-color: $--color-primary !default; +/// color||Color|0 +$--switch-off-color: $--border-color-base !default; +/// fontSize||Font|1 +$--switch-font-size: $--font-size-base !default; +$--switch-core-border-radius: 10px !default; +// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义 +$--switch-width: 40px !default; +// height||Other|4 +$--switch-height: 20px !default; +// height||Other|4 +$--switch-button-size: 16px !default; + +/* Dialog +-------------------------- */ +$--dialog-background-color: $--color-white !default; +$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default; +/// fontSize||Font|1 +$--dialog-title-font-size: $--font-size-large !default; +/// fontSize||Font|1 +$--dialog-content-font-size: 14px !default; +/// fontLineHeight||LineHeight|2 +$--dialog-font-line-height: $--font-line-height-primary !default; +/// padding||Spacing|3 +$--dialog-padding-primary: 20px !default; + +/* Table +-------------------------- */ +/// color||Color|0 +$--table-border-color: $--border-color-lighter !default; +$--table-border: 1px solid $--table-border-color !default; +/// color||Color|0 +$--table-font-color: $--color-text-regular !default; +/// color||Color|0 +$--table-header-font-color: $--color-text-secondary !default; +/// color||Color|0 +$--table-row-hover-background-color: $--background-color-base !default; +$--table-current-row-background-color: rgba(255, 255, 255, .12) !default; +/// color||Color|0 +$--table-header-background-color: $--color-white !default; +$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default; + +/* Pagination +-------------------------- */ +/// fontSize||Font|1 +$--pagination-font-size: 13px !default; +/// color||Color|0 +$--pagination-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-font-color: $--color-text-primary !default; +$--pagination-border-radius: 3px !default; +/// color||Color|0 +$--pagination-button-color: $--color-text-primary !default; +/// height||Other|4 +$--pagination-button-width: 35.5px !default; +/// height||Other|4 +$--pagination-button-height: 28px !default; +/// color||Color|0 +$--pagination-button-disabled-color: $--color-text-placeholder !default; +/// color||Color|0 +$--pagination-button-disabled-background-color: $--color-white !default; +/// color||Color|0 +$--pagination-hover-color: $--color-primary !default; + +/* Popup +-------------------------- */ +/// color||Color|0 +$--popup-modal-background-color: $--color-black !default; +/// opacity||Other|1 +$--popup-modal-opacity: 0.5 !default; + +/* Popover +-------------------------- */ +/// color||Color|0 +$--popover-background-color: $--color-white !default; +/// fontSize||Font|1 +$--popover-font-size: $--font-size-base !default; +/// color||Color|0 +$--popover-border-color: $--border-color-lighter !default; +$--popover-arrow-size: 6px !default; +/// padding||Spacing|3 +$--popover-padding: 12px !default; +$--popover-padding-large: 18px 20px !default; +/// fontSize||Font|1 +$--popover-title-font-size: 16px !default; +/// color||Color|0 +$--popover-title-font-color: $--color-text-primary !default; + +/* Tooltip +-------------------------- */ +/// color|1|Color|0 +$--tooltip-fill: $--color-text-primary !default; +/// color|1|Color|0 +$--tooltip-color: $--color-white !default; +/// fontSize||Font|1 +$--tooltip-font-size: 12px !default; +/// color||Color|0 +$--tooltip-border-color: $--color-text-primary !default; +$--tooltip-arrow-size: 6px !default; +/// padding||Spacing|3 +$--tooltip-padding: 10px !default; + +/* Tag +-------------------------- */ +/// color||Color|0 +$--tag-info-color: $--color-info !default; +/// color||Color|0 +$--tag-primary-color: $--color-primary !default; +/// color||Color|0 +$--tag-success-color: $--color-success !default; +/// color||Color|0 +$--tag-warning-color: $--color-warning !default; +/// color||Color|0 +$--tag-danger-color: $--color-danger !default; +/// fontSize||Font|1 +$--tag-font-size: 12px !default; +$--tag-border-radius: 4px !default; +$--tag-padding: 0 10px !default; + +/* Tree +-------------------------- */ +/// color||Color|0 +$--tree-node-hover-background-color: $--background-color-base !default; +/// color||Color|0 +$--tree-font-color: $--color-text-regular !default; +/// color||Color|0 +$--tree-expand-icon-color: $--color-text-placeholder !default; + +/* Dropdown +-------------------------- */ +$--dropdown-menu-box-shadow: $--box-shadow-light !default; +$--dropdown-menuItem-hover-fill: $--color-primary !default; +$--dropdown-menuItem-hover-color: $--color-white !default; + +/* Badge +-------------------------- */ +/// color||Color|0 +$--badge-background-color: $--color-danger !default; +$--badge-radius: 10px !default; +/// fontSize||Font|1 +$--badge-font-size: 12px !default; +/// padding||Spacing|3 +$--badge-padding: 6px !default; +/// height||Other|4 +$--badge-size: 18px !default; + +/* Card +--------------------------*/ +/// color||Color|0 +$--card-border-color: $--border-color-lighter !default; +$--card-border-radius: 4px !default; +/// padding||Spacing|3 +$--card-padding: 20px !default; + +/* Slider +--------------------------*/ +/// color||Color|0 +$--slider-main-background-color: $--color-primary !default; +/// color||Color|0 +$--slider-runway-background-color: $--border-color-light !default; +$--slider-button-hover-color: mix($--color-primary, black, 97%) !default; +$--slider-stop-background-color: $--color-white !default; +$--slider-disable-color: $--color-text-placeholder !default; +$--slider-margin: 16px 0 !default; +$--slider-border-radius: 3px !default; +/// height|1|Other|4 +$--slider-height: 6px !default; +/// height||Other|4 +$--slider-button-size: 16px !default; +$--slider-button-wrapper-size: 36px !default; +$--slider-button-wrapper-offset: -15px !default; + +/* Steps +--------------------------*/ +$--steps-border-color: $--disabled-border-base !default; +$--steps-border-radius: 4px !default; +$--steps-padding: 20px !default; + +/* Menu +--------------------------*/ +/// fontSize||Font|1 +$--menu-item-font-size: $--font-size-base !default; +/// color||Color|0 +$--menu-item-font-color: $--color-white !default; +/// color||Color|0 +$--menu-background-color: $--color-menu-background !default; +$--menu-item-hover-fill: $--color-menu-item-active-background !default; + +/* Rate +--------------------------*/ +$--rate-height: 20px !default; +/// fontSize||Font|1 +$--rate-font-size: $--font-size-base !default; +/// height||Other|3 +$--rate-icon-size: 18px !default; +/// margin||Spacing|2 +$--rate-icon-margin: 6px !default; +$--rate-icon-color: $--color-text-placeholder !default; + +/* DatePicker +--------------------------*/ +$--datepicker-font-color: $--color-text-regular !default; +/// color|1|Color|0 +$--datepicker-off-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--datepicker-header-font-color: $--color-text-regular !default; +$--datepicker-icon-color: $--color-text-primary !default; +$--datepicker-border-color: $--disabled-border-base !default; +$--datepicker-inner-border-color: #e4e4e4 !default; +/// color||Color|0 +$--datepicker-inrange-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default; +/// color||Color|0 +$--datepicker-active-color: $--color-primary !default; +/// color||Color|0 +$--datepicker-hover-font-color: $--color-primary !default; +$--datepicker-cell-hover-color: #fff !default; + +/* Loading +--------------------------*/ +/// height||Other|4 +$--loading-spinner-size: 42px !default; +/// height||Other|4 +$--loading-fullscreen-spinner-size: 50px !default; + +/* Scrollbar +--------------------------*/ +$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default; +$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default; + +/* Carousel +--------------------------*/ +/// fontSize||Font|1 +$--carousel-arrow-font-size: 12px !default; +$--carousel-arrow-size: 36px !default; +$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default; +$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default; +/// width||Other|4 +$--carousel-indicator-width: 30px !default; +/// height||Other|4 +$--carousel-indicator-height: 2px !default; +$--carousel-indicator-padding-horizontal: 4px !default; +$--carousel-indicator-padding-vertical: 12px !default; +$--carousel-indicator-out-color: $--border-color-hover !default; + +/* Collapse +--------------------------*/ +/// color||Color|0 +$--collapse-border-color: $--border-color-lighter !default; +/// height||Other|4 +$--collapse-header-height: 48px !default; +/// color||Color|0 +$--collapse-header-background-color: $--color-white !default; +/// color||Color|0 +$--collapse-header-font-color: $--color-text-primary !default; +/// fontSize||Font|1 +$--collapse-header-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-background-color: $--color-white !default; +/// fontSize||Font|1 +$--collapse-content-font-size: 13px !default; +/// color||Color|0 +$--collapse-content-font-color: $--color-text-primary !default; + +/* Transfer +--------------------------*/ +$--transfer-border-color: $--border-color-lighter !default; +$--transfer-border-radius: $--border-radius-base !default; +/// height||Other|4 +$--transfer-panel-width: 200px !default; +/// height||Other|4 +$--transfer-panel-header-height: 40px !default; +/// color||Color|0 +$--transfer-panel-header-background-color: $--background-color-base !default; +/// height||Other|4 +$--transfer-panel-footer-height: 40px !default; +/// height||Other|4 +$--transfer-panel-body-height: 246px !default; +/// height||Other|4 +$--transfer-item-height: 30px !default; +/// height||Other|4 +$--transfer-filter-height: 32px !default; + +/* Header + --------------------------*/ +$--header-padding: 0 20px !default; + +/* Footer +--------------------------*/ +$--footer-padding: 0 20px !default; + +/* Main +--------------------------*/ +$--main-padding: 20px !default; + +/* Timeline +--------------------------*/ +$--timeline-node-size-normal: 12px !default; +$--timeline-node-size-large: 14px !default; +$--timeline-node-color: $--border-color-light !default; + +/* Backtop +--------------------------*/ +/// color||Color|0 +$--backtop-background-color: $--color-white !default; +/// color||Color|0 +$--backtop-font-color: $--color-primary !default; +/// color||Color|0 +$--backtop-hover-background-color: $--border-color-extra-light !default; + +/* Link +--------------------------*/ +/// fontSize||Font|1 +$--link-font-size: $--font-size-base !default; +/// fontWeight||Font|1 +$--link-font-weight: $--font-weight-primary !default; +/// color||Color|0 +$--link-default-font-color: $--color-text-regular !default; +/// color||Color|0 +$--link-default-active-color: $--color-primary !default; +/// color||Color|0 +$--link-disabled-font-color: $--color-text-placeholder !default; +/// color||Color|0 +$--link-primary-font-color: $--color-primary !default; +/// color||Color|0 +$--link-success-font-color: $--color-success !default; +/// color||Color|0 +$--link-warning-font-color: $--color-warning !default; +/// color||Color|0 +$--link-danger-font-color: $--color-danger !default; +/// color||Color|0 +$--link-info-font-color: $--color-info !default; +/* Calendar +--------------------------*/ +/// border||Other|4 +$--calendar-border: $--table-border !default; +/// color||Other|4 +$--calendar-selected-background-color: #F2F8FE !default; +$--calendar-cell-width: 85px !default; + +/* Form +-------------------------- */ +/// fontSize||Font|1 +$--form-label-font-size: $--font-size-base !default; + +/* Avatar +--------------------------*/ +/// color||Color|0 +$--avatar-font-color: #fff !default; +/// color||Color|0 +$--avatar-background-color: #C0C4CC !default; +/// fontSize||Font Size|1 +$--avatar-text-font-size: 14px !default; +/// fontSize||Font Size|1 +$--avatar-icon-font-size: 18px !default; +/// borderRadius||Border|2 +$--avatar-border-radius: $--border-radius-base !default; +/// size|1|Avatar Size|3 +$--avatar-large-size: 40px !default; +/// size|1|Avatar Size|3 +$--avatar-medium-size: 36px !default; +/// size|1|Avatar Size|3 +$--avatar-small-size: 28px !default; + +/* Break-point +--------------------------*/ +$--sm: 768px !default; +$--md: 992px !default; +$--lg: 1200px !default; +$--xl: 1920px !default; + +$--breakpoints: ( + 'xs' : (max-width: $--sm - 1), + 'sm' : (min-width: $--sm), + 'md' : (min-width: $--md), + 'lg' : (min-width: $--lg), + 'xl' : (min-width: $--xl) +); + +$--breakpoints-spec: ( + 'xs-only' : (max-width: $--sm - 1), + 'sm-and-up' : (min-width: $--sm), + 'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})", + 'sm-and-down': (max-width: $--md - 1), + 'md-and-up' : (min-width: $--md), + 'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})", + 'md-and-down': (max-width: $--lg - 1), + 'lg-and-up' : (min-width: $--lg), + 'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})", + 'lg-and-down': (max-width: $--xl - 1), + 'xl-only' : (min-width: $--xl), +); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/default-header.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/default-header.jpg new file mode 100644 index 00000000..222d18da Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/default-header.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login.png new file mode 100644 index 00000000..87130950 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login_bg.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login_bg.jpg new file mode 100644 index 00000000..efc558de Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login_bg.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login_logo.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login_logo.png new file mode 100644 index 00000000..03712478 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/login_logo.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/logo.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/logo.jpg new file mode 100644 index 00000000..a88fc0d0 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/logo.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/logo.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/logo.png new file mode 100644 index 00000000..f2df5bb8 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/logo.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/orange-group1.png b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/orange-group1.png new file mode 100644 index 00000000..efd59f26 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/img/orange-group1.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/package.json b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/package.json new file mode 100644 index 00000000..a0912945 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/package.json @@ -0,0 +1,13 @@ +{ + "scripts": { + "theme-light": "et -c element-variables-light.scss", + "theme-dark": "et -c element-variables-dark.scss", + "theme-green": "et -c element-variables-green.scss", + "theme-orange": "et -c element-variables-orange.scss", + "theme-blue": "et -c element-variables-blue.scss" + }, + "devDependencies": { + "element-theme": "2.0.1", + "element-theme-chalk": "2.14.1" + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/base.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/base.scss new file mode 100644 index 00000000..76177f49 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/base.scss @@ -0,0 +1,651 @@ +@import "element-variables.scss"; +@import "transition.scss"; + +html, body { + padding: 0; + margin: 0; + font-size: 14px; + font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; + background-color: rgb(228,240,255); +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +$header-height: 60px; + +// 过滤组件长度 +$filter-item-width: 250px; +// 范围选择过滤组件长度 +$filter-item-range-width: 400px; +// 左侧过滤树组件每一项高度 +$tree-node-height: 40px; +// 高级管理表单标题高度 +$advanced-title-height: 50px; +$border-color: rgb(216, 220, 229); +$menuHover: rgba(255,255,255,0.3); +$menu-background-color: transparent; +$tabs-header-margin-bottom: 25px; +$tab-header-background-color: #EBEEF5; +$image-item-width: 65px; +$box-padding-size: 25px; + +/** + * 弹窗样式,封装的layer的弹窗 + **/ +body .layer-dialog .layui-layer-title{ + border-radius: 4px 4px 0px 0px; + border:1px solid #01000000; +} + +body .layer-dialog .layui-layer-setwin {color: #ffffff} + +body .layer-dialog { + border-radius: 4px; + border:1px solid #01000000; +} + +body .layer-dialog .layui-layer-content { + padding: $box-padding-size; +} +/** + * 左树右表弹窗样式 + */ +body .layer-advance-dialog { + border-radius: 4px; + border:1px solid #01000000; + background-color: #F8F8F8; +} + +body .layer-advance-dialog .layui-layer-title{ + border-radius: 4px 4px 0px 0px; + border:1px solid #01000000; +} + +body .layer-advance-dialog .layui-layer-content { + padding: 5px 15px; +} + +.orange-project { + .el-main { + padding: 0px; + } + .flex-box { + flex-wrap: wrap; + } + .scrollbar_dropdown__wrap { + overflow-x: hidden; + } + + .icon-btn.el-button { + font-size: 18px; + padding: 5px 0px; + } + + .default-padding-box { + padding: $box-padding-size; + } + + .padding-no-top { + padding: 0px $box-padding-size $box-padding-size $box-padding-size; + } + + .default-border { + border: 1px solid $--border-color-base; + } + + .default-border-left { + border-left: 1px solid $--border-color-base; + } + + .default-border-right { + border-right: 1px solid $--border-color-base; + } + + .default-border-top { + border-top: 1px solid $--border-color-base; + } + + .default-border-bottom { + border-bottom: 1px solid $--border-color-base; + } + + .page-close-box { + position: absolute; + background: #0092FF; + transform: rotate(45deg); + height: 50px; + width: 50px; + right: -25px; + top:-25px; + text-align: center; + + .el-button { + transform: rotate(-45deg); + color: white; + margin-top: 20px; + } + } + + /** + * 过滤组件样式 + **/ + .mask-box { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); + top: 0; + z-index: 10; + } + + .filter-box { + position: relative; + background-color: white; + padding: $box-padding-size $box-padding-size 0px $box-padding-size; + z-index: 20; + } + + .advance-filter-box { + padding-bottom: 25px; + } + + .filter-item { + width: $filter-item-width; + } + + .cascader-item { + width: 160px!important; + } + + .is-range, .is-search { + width: $filter-item-range-width; + } + + .table-operation-box { + align-self: flex-end; + margin-bottom: 10px; + overflow: hidden; + } + + .table-check-box { + margin-right: 7px; + } + + /** + * 左侧树状组件的样式,用户高级管理表单以及用户管理表单 + **/ + .advanced-left-box { + border-right: 1px solid $border-color; + .el-tree-node__content { + height: $tree-node-height; + } + + .tree-node-item { + height: $tree-node-height; + line-height: $tree-node-height; + width: 100%; + + .tree-node-menu { + display: none; + float: right; + padding-right: 10px; + color: red!important; + } + + &:hover .tree-node-menu { + display: block; + } + } + + .el-tree-node .el-button+.el-button { + margin-left: 5px; + } + } + /** + * form表单输入组件宽度 + **/ + .full-width-input { + .el-select { + width: 100%; + } + + .el-input { + width: 100%; + } + + .el-cascader { + width: 100%; + } + + .el-date-editor { + width: 100%; + } + + .el-input-number { + width: 100%; + } + } + + .el-aside { + overflow: visible; + } + + .el-menu { + border-right-width: 0px; + } + + .sidebar-bg { + box-shadow: 0 1px 4px rgba(0,21,41,.08)!important; + } + + .sidebar-title { + display: flex; + align-items: center; + height: 60px; + padding: 0px 20px; + } + + .sidebar-title-text { + font-size: 18px; + color: $--color-sidebar-title-text; + padding-left: 15px; + } + + @if global-variable-exists(--color-menu-item-active-text-color) { + .el-menu:not(.el-menu--horizontal) .el-menu-item.is-active { + color: $--color-menu-item-active-text-color!important; + } + + .el-menu:not(.el-menu--horizontal) .el-submenu__title i { + color: $--color-menu-item-active-text-color; + } + } + + @if global-variable-exists(--color-menu-item-active-background) { + .el-menu:not(.el-menu--horizontal) .el-menu-item.is-active { + @if global-variable-exists(--color-menu-item-active-background-to) { + background: linear-gradient(to left, $--color-menu-item-active-background, $--color-menu-item-active-background-to); + } @else { + background: $--color-menu-item-active-background; + } + } + .el-menu:not(.el-menu--horizontal) .el-menu-item:hover { + @if global-variable-exists(--color-menu-item-active-background-to) { + background: linear-gradient(to left, $--color-menu-item-active-background, $--color-menu-item-active-background-to); + } @else { + background: $--color-menu-item-active-background; + } + } + } + + @if global-variable-exists(--color-submenu-background) { + .left-menu .el-submenu .el-menu { + background-color: $--color-submenu-background; + } + } + + /** + * 多tab页表单,tab样式 + **/ + .el-tabs__header { + margin: 0 0 20px; + } + /** + * 表格表头背景色 + **/ + .table-header-gray, .has-gutter .gutter { + background-color: $tab-header-background-color; + } + + /** + * 操作按钮颜色 + **/ + .table-btn.delete { + color: #F56C6C; + } + + .table-btn.delete:hover { + color: #F78989; + } + + .table-btn.delete:disabled { + color: #DCDFE6; + } + + .table-btn.success { + color: #67C23A; + } + + .table-btn.success:hover { + color: #85CE61; + } + + .table-btn.success:disabled { + color: #DCDFE6; + } + + .table-btn.warning { + color: #E6A23C; + } + + .table-btn.warning:hover { + color: #EBB563; + } + + .table-btn.success:disabled { + color: #DCDFE6; + } + + /** + * 图片上传以及显示样式 + **/ + .upload-image-item { + font-size: 28px; + color: #8c939d; + width: $image-item-width; + height: $image-item-width; + text-align: center; + display: block; + + .el-upload i { + line-height: $image-item-width; + } + } + + .upload-image-multi { + display: inline; + } + + .upload-image-item .el-upload { + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + } + .upload-image-item .el-upload:hover { + border-color: #409eff; + } + + .upload-image-show { + width: $image-item-width; + height: $image-item-width; + display: inline; + } + + .table-cell-image { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + text-align: center; + font-size: $image-item-width; + color: #606266; + margin: 0px 5px; + } + + .upload-image-list .el-upload-list__item { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + } + + .upload-image-item .el-upload-list--picture-card .el-upload-list__item { + width: $image-item-width; + height: $image-item-width; + } + + .upload-image-item .el-upload.el-upload--text { + width: $image-item-width; + height: $image-item-width; + } + + .upload-image-item .el-upload--picture-card { + width: $image-item-width; + height: $image-item-width; + line-height: $image-item-width; + } + /** + * + **/ + $header-menu-height: 32px; + + .sidebar { + height: 100%; + background-color: $--color-menu-background; + // overflow: hidden; + box-shadow: 0px 1px 4px rgba(0,21,41,.08); + } + + .header { + display: flex; + align-items: center; + height: $header-height; + background-color: white; + } + + .header .menu-column { + margin-right: 20px; + .el-menu-item.is-active { + border-left: 0px solid #47ba5a; + } + } + + .header-menu { + float: right; + height: $header-menu-height; + line-height: $header-menu-height; + display: flex; + justify-content: flex-end; + flex-grow: 1 + } + + .header-img { + width: $header-menu-height; + height: $header-menu-height; + border-radius: 50%; + margin-left: 10px; + float: right; + } + + .el-menu--horizontal.el-menu { + background-color: white; + } + + .el-menu--horizontal > .el-menu-item { + height: 40px; + line-height: 40px; + } + + .el-menu.el-menu--horizontal { + border-bottom: none; + } + + .user-dropdown { + color: $--color-text-secondary; + cursor: pointer; + font-size: 12px; + } + .user-dropdown-item { + font-size: 12px; + color: $--color-text-primary; + } + + .hamburger-container { + line-height: 70px; + height: $header-height; + float: left; + padding: 0 10px; + } + + .el-submenu__title { + background: #00000000; + } + + .tree-select { + .el-tree-node__content { + height: 34px; + line-height: 34px; + padding-right: 10px; + } + } + + .tree-select.single-select-tree { + .el-tree-node.is-current > .el-tree-node__content > .el-tree-node__label { + color: $--color-primary; + font-weight: 700; + } + } + + .cell { + .operation-cell { + color: #006CDC; + cursor: pointer; + text-decoration: underline; + } + } + + .single-select-tree { + min-width: 200px!important; + } + + .base-card-header { + display: flex; + align-items: center; + height: 50px; + line-height: 50px; + } + + .base-card-operation { + flex-grow: 1; + display: flex; + justify-content: flex-end; + } + + .el-card__header { + padding: 0px 15px; + } + .el-card__body { + padding: 15px; + } + + .custom-cascader { + width: 200px!important; + } + + .no-scroll { + overflow: hidden; + } + + .custom-scroll .el-scrollbar__view { + overflow-x: hidden!important; + } + + .upload-img-del { + position: absolute; + height: 20px; + width: 20px; + line-height: 20px; + font-size: 16px; + top: 2px; + right: 2px; + color: #C0C4CC; + } + + .upload-img-del:hover { + color: #EF5E1C; + } + + .input-label { + display: inline-block; + height: 29px; + line-height: 28px; + } + + .input-progress { + height: 29px; + display: flex; + align-items: center; + } + + .input-item { + width: 100%!important; + } + + .table-header-gray { + background: rgba(237,237,237,1); + } + + .card-header { + display: flex; + justify-content: space-between; + padding: 10px 0px; + line-height: 28px; + } +} + +::-webkit-scrollbar { + width: 7px; + height: 7px; + background: none; +} + +::-webkit-scrollbar-thumb { + background: #DDDEE0; + border-radius: 7px; +} + +::-webkit-scrollbar-thumb:hover { + background: #A8A8A8; +} + +.ml20 { + margin-left: 20px; +} + +.mr20 { + margin-right: 20px; +} + +.mt20 { + margin-top: 20px; +} + +.mb20 { + margin-bottom: 20px; +} + +.pl20 { + padding-left: 20px; +} + +.pr20 { + padding-right: 20px; +} + +.pt20 { + padding-top: 20px; +} + +.pb20 { + padding-bottom: 20px; +} + +.gutter-left { + padding-left: 20px; +} + +.gutter-right { + padding-right: 20px; +} + +.gutter-top { + padding-top: 20px; +} + +.gutter-bottom { + padding-bottom: 20px; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/element-variables.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/element-variables.scss new file mode 100644 index 00000000..f75588ca --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/element-variables.scss @@ -0,0 +1,5 @@ +// @import "../element-variables-light.scss"; +@import "../element-variables-dark.scss"; +// @import "../element-variables-green.scss"; +// @import "../element-variables-orange.scss"; +// @import "../element-variables-blue.scss"; \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/form-style.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/form-style.scss new file mode 100644 index 00000000..027631f9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/form-style.scss @@ -0,0 +1,117 @@ +.form-advanced-manager { + .advance-filter-box { + position: absolute; + top: 100%; + left: 0px; + background-color: white; + width: 100%; + padding: 10px $box-padding-size 15px $box-padding-size; + } + + .title-box { + border-bottom: 1px solid $border-color; + padding: 0px 20px; + z-index: 20; + background-color: white; + height: $advanced-title-height; + + .title { + line-height: $advanced-title-height; + color: #606266; + } + + .menu-box { + position: absolute; + top: 0px; + right: 10px; + height: $advanced-title-height; + + .el-row { + margin: 10px 0px; + height: $advanced-title-height - 20; + } + } + } + + .advanced-right-box { + padding: 0px; + .gutter-box { + margin: (($advanced-title-height - 16)/2) 0px; + height: 16px; + width: 3px; + background-color: $--color-primary; + float: left + } + } +} + +.form-dict-manager { + .dict-title { + height: 50px; + line-height: 50px; + color: $--color-text-primary; + border-bottom: 1px solid $--border-color-base; + font-size: 14px; + + span { + margin-left: 20px; + } + } + + .dict-item { + width: 100%; + height: 40px; + line-height: 40px; + color: #606266; + cursor: pointer; + padding-left: 20px; + + &:hover { + background-color: $--color-primary-light-9; + } + } + + .active-dict-item { + border-left: 3px solid $--color-primary; + color: $--color-primary; + background-color: $--color-primary-light-9 !important; + } + + .el-scrollbar__bar.is-horizontal { + display: none!important; + } +} + + +.form-table-manager { + .advance-filter-box { + position: absolute; + padding: 20px; + top: 100%; + left: 0px; + background-color: white; + width: 100%; + padding: 10px $box-padding-size 15px $box-padding-size; + } +} + +.form-table-multi-select { + // +} + +.form-config { + padding: $box-padding-size; +} + +.form-multi-fragment { + // +} + +.form-single-fragment { + // +} + +.advance-query-form { + padding: 0px!important; + background-color: transparent!important;; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/index.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/index.scss new file mode 100644 index 00000000..a88aa046 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/index.scss @@ -0,0 +1,3 @@ +@import "../theme/index.css"; +@import "base.scss"; +@import "form-style.scss"; \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/transition.scss b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/transition.scss new file mode 100644 index 00000000..49d81925 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/style/transition.scss @@ -0,0 +1,31 @@ +/*fade*/ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/*fade*/ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/alert.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/alert.css new file mode 100644 index 00000000..966d571c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/alert.css @@ -0,0 +1,343 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-alert { + width: 100%; + padding: 8px 16px; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + position: relative; + background-color: #FFFFFF; + overflow: hidden; + opacity: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-transition: opacity .2s; + transition: opacity .2s; } + .el-alert.is-light .el-alert__closebtn { + color: #C0C4CC; } + .el-alert.is-dark .el-alert__closebtn { + color: #FFFFFF; } + .el-alert.is-dark .el-alert__description { + color: #FFFFFF; } + .el-alert.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-alert--success.is-light { + background-color: #f0f9eb; + color: #67C23A; } + .el-alert--success.is-light .el-alert__description { + color: #67C23A; } + .el-alert--success.is-dark { + background-color: #67C23A; + color: #FFFFFF; } + .el-alert--info.is-light { + background-color: #f4f4f5; + color: #909399; } + .el-alert--info.is-dark { + background-color: #909399; + color: #FFFFFF; } + .el-alert--info .el-alert__description { + color: #909399; } + .el-alert--warning.is-light { + background-color: #fdf6ec; + color: #E6A23C; } + .el-alert--warning.is-light .el-alert__description { + color: #E6A23C; } + .el-alert--warning.is-dark { + background-color: #E6A23C; + color: #FFFFFF; } + .el-alert--error.is-light { + background-color: #fef0f0; + color: #F56C6C; } + .el-alert--error.is-light .el-alert__description { + color: #F56C6C; } + .el-alert--error.is-dark { + background-color: #F56C6C; + color: #FFFFFF; } + .el-alert__content { + display: table-cell; + padding: 0 8px; } + .el-alert__icon { + font-size: 16px; + width: 16px; } + .el-alert__icon.is-big { + font-size: 28px; + width: 28px; } + .el-alert__title { + font-size: 13px; + line-height: 18px; } + .el-alert__title.is-bold { + font-weight: bold; } + .el-alert .el-alert__description { + font-size: 12px; + margin: 5px 0 0 0; } + .el-alert__closebtn { + font-size: 12px; + opacity: 1; + position: absolute; + top: 12px; + right: 15px; + cursor: pointer; } + .el-alert__closebtn.is-customed { + font-style: normal; + font-size: 13px; + top: 9px; } + +.el-alert-fade-enter, +.el-alert-fade-leave-active { + opacity: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/aside.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/aside.css new file mode 100644 index 00000000..effb3502 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/aside.css @@ -0,0 +1,136 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-aside { + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/autocomplete.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/autocomplete.css new file mode 100644 index 00000000..de46b558 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/autocomplete.css @@ -0,0 +1,1467 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-autocomplete { + position: relative; + display: inline-block; } + +.el-autocomplete-suggestion { + margin: 5px 0; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + border: 1px solid #E4E7ED; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; } + .el-autocomplete-suggestion__wrap { + max-height: 280px; + padding: 10px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-autocomplete-suggestion__list { + margin: 0; + padding: 0; } + .el-autocomplete-suggestion li { + padding: 0 20px; + margin: 0; + line-height: 34px; + cursor: pointer; + color: #606266; + font-size: 14px; + list-style: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-autocomplete-suggestion li:hover { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.highlighted { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.divider { + margin-top: 6px; + border-top: 1px solid #000000; } + .el-autocomplete-suggestion li.divider:last-child { + margin-bottom: -6px; } + .el-autocomplete-suggestion.is-loading li { + text-align: center; + height: 100px; + line-height: 100px; + font-size: 20px; + color: #999; } + .el-autocomplete-suggestion.is-loading li::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-autocomplete-suggestion.is-loading li:hover { + background-color: #FFFFFF; } + .el-autocomplete-suggestion.is-loading .el-icon-loading { + vertical-align: middle; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/avatar.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/avatar.css new file mode 100644 index 00000000..02d35e49 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/avatar.css @@ -0,0 +1,284 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-avatar { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; + color: #fff; + background: #C0C4CC; + width: 40px; + height: 40px; + line-height: 40px; + font-size: 14px; } + .el-avatar > img { + display: block; + height: 100%; + vertical-align: middle; } + .el-avatar--circle { + border-radius: 50%; } + .el-avatar--square { + border-radius: 4px; } + .el-avatar--icon { + font-size: 18px; } + .el-avatar--large { + width: 40px; + height: 40px; + line-height: 40px; } + .el-avatar--medium { + width: 36px; + height: 36px; + line-height: 36px; } + .el-avatar--small { + width: 28px; + height: 28px; + line-height: 28px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/backtop.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/backtop.css new file mode 100644 index 00000000..7c34d109 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/backtop.css @@ -0,0 +1,273 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-backtop { + position: fixed; + background-color: #FFFFFF; + width: 40px; + height: 40px; + border-radius: 50%; + color: #409EFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 20px; + -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + cursor: pointer; + z-index: 5; } + .el-backtop:hover { + background-color: #F2F6FC; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/badge.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/badge.css new file mode 100644 index 00000000..eef98450 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/badge.css @@ -0,0 +1,290 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-badge { + position: relative; + vertical-align: middle; + display: inline-block; } + .el-badge__content { + background-color: #F56C6C; + border-radius: 10px; + color: #FFFFFF; + display: inline-block; + font-size: 12px; + height: 18px; + line-height: 18px; + padding: 0 6px; + text-align: center; + white-space: nowrap; + border: 1px solid #FFFFFF; } + .el-badge__content.is-fixed { + position: absolute; + top: 0; + right: 10px; + -webkit-transform: translateY(-50%) translateX(100%); + transform: translateY(-50%) translateX(100%); } + .el-badge__content.is-fixed.is-dot { + right: 5px; } + .el-badge__content.is-dot { + height: 8px; + width: 8px; + padding: 0; + right: 0; + border-radius: 50%; } + .el-badge__content--primary { + background-color: #409EFF; } + .el-badge__content--success { + background-color: #67C23A; } + .el-badge__content--warning { + background-color: #E6A23C; } + .el-badge__content--info { + background-color: #909399; } + .el-badge__content--danger { + background-color: #F56C6C; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/base.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/base.css new file mode 100644 index 00000000..2cbc1274 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/base.css @@ -0,0 +1,1244 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@font-face { + font-family: 'element-icons'; + src: url("fonts/element-icons.woff") format("woff"), url("fonts/element-icons.ttf") format("truetype"); + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + font-weight: normal; + font-display: "auto"; + font-style: normal; } + +[class^="el-icon-"], [class*=" el-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'element-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: baseline; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.el-icon-ice-cream-round:before { + content: "\e6a0"; } + +.el-icon-ice-cream-square:before { + content: "\e6a3"; } + +.el-icon-lollipop:before { + content: "\e6a4"; } + +.el-icon-potato-strips:before { + content: "\e6a5"; } + +.el-icon-milk-tea:before { + content: "\e6a6"; } + +.el-icon-ice-drink:before { + content: "\e6a7"; } + +.el-icon-ice-tea:before { + content: "\e6a9"; } + +.el-icon-coffee:before { + content: "\e6aa"; } + +.el-icon-orange:before { + content: "\e6ab"; } + +.el-icon-pear:before { + content: "\e6ac"; } + +.el-icon-apple:before { + content: "\e6ad"; } + +.el-icon-cherry:before { + content: "\e6ae"; } + +.el-icon-watermelon:before { + content: "\e6af"; } + +.el-icon-grape:before { + content: "\e6b0"; } + +.el-icon-refrigerator:before { + content: "\e6b1"; } + +.el-icon-goblet-square-full:before { + content: "\e6b2"; } + +.el-icon-goblet-square:before { + content: "\e6b3"; } + +.el-icon-goblet-full:before { + content: "\e6b4"; } + +.el-icon-goblet:before { + content: "\e6b5"; } + +.el-icon-cold-drink:before { + content: "\e6b6"; } + +.el-icon-coffee-cup:before { + content: "\e6b8"; } + +.el-icon-water-cup:before { + content: "\e6b9"; } + +.el-icon-hot-water:before { + content: "\e6ba"; } + +.el-icon-ice-cream:before { + content: "\e6bb"; } + +.el-icon-dessert:before { + content: "\e6bc"; } + +.el-icon-sugar:before { + content: "\e6bd"; } + +.el-icon-tableware:before { + content: "\e6be"; } + +.el-icon-burger:before { + content: "\e6bf"; } + +.el-icon-knife-fork:before { + content: "\e6c1"; } + +.el-icon-fork-spoon:before { + content: "\e6c2"; } + +.el-icon-chicken:before { + content: "\e6c3"; } + +.el-icon-food:before { + content: "\e6c4"; } + +.el-icon-dish-1:before { + content: "\e6c5"; } + +.el-icon-dish:before { + content: "\e6c6"; } + +.el-icon-moon-night:before { + content: "\e6ee"; } + +.el-icon-moon:before { + content: "\e6f0"; } + +.el-icon-cloudy-and-sunny:before { + content: "\e6f1"; } + +.el-icon-partly-cloudy:before { + content: "\e6f2"; } + +.el-icon-cloudy:before { + content: "\e6f3"; } + +.el-icon-sunny:before { + content: "\e6f6"; } + +.el-icon-sunset:before { + content: "\e6f7"; } + +.el-icon-sunrise-1:before { + content: "\e6f8"; } + +.el-icon-sunrise:before { + content: "\e6f9"; } + +.el-icon-heavy-rain:before { + content: "\e6fa"; } + +.el-icon-lightning:before { + content: "\e6fb"; } + +.el-icon-light-rain:before { + content: "\e6fc"; } + +.el-icon-wind-power:before { + content: "\e6fd"; } + +.el-icon-baseball:before { + content: "\e712"; } + +.el-icon-soccer:before { + content: "\e713"; } + +.el-icon-football:before { + content: "\e715"; } + +.el-icon-basketball:before { + content: "\e716"; } + +.el-icon-ship:before { + content: "\e73f"; } + +.el-icon-truck:before { + content: "\e740"; } + +.el-icon-bicycle:before { + content: "\e741"; } + +.el-icon-mobile-phone:before { + content: "\e6d3"; } + +.el-icon-service:before { + content: "\e6d4"; } + +.el-icon-key:before { + content: "\e6e2"; } + +.el-icon-unlock:before { + content: "\e6e4"; } + +.el-icon-lock:before { + content: "\e6e5"; } + +.el-icon-watch:before { + content: "\e6fe"; } + +.el-icon-watch-1:before { + content: "\e6ff"; } + +.el-icon-timer:before { + content: "\e702"; } + +.el-icon-alarm-clock:before { + content: "\e703"; } + +.el-icon-map-location:before { + content: "\e704"; } + +.el-icon-delete-location:before { + content: "\e705"; } + +.el-icon-add-location:before { + content: "\e706"; } + +.el-icon-location-information:before { + content: "\e707"; } + +.el-icon-location-outline:before { + content: "\e708"; } + +.el-icon-location:before { + content: "\e79e"; } + +.el-icon-place:before { + content: "\e709"; } + +.el-icon-discover:before { + content: "\e70a"; } + +.el-icon-first-aid-kit:before { + content: "\e70b"; } + +.el-icon-trophy-1:before { + content: "\e70c"; } + +.el-icon-trophy:before { + content: "\e70d"; } + +.el-icon-medal:before { + content: "\e70e"; } + +.el-icon-medal-1:before { + content: "\e70f"; } + +.el-icon-stopwatch:before { + content: "\e710"; } + +.el-icon-mic:before { + content: "\e711"; } + +.el-icon-copy-document:before { + content: "\e718"; } + +.el-icon-full-screen:before { + content: "\e719"; } + +.el-icon-switch-button:before { + content: "\e71b"; } + +.el-icon-aim:before { + content: "\e71c"; } + +.el-icon-crop:before { + content: "\e71d"; } + +.el-icon-odometer:before { + content: "\e71e"; } + +.el-icon-time:before { + content: "\e71f"; } + +.el-icon-bangzhu:before { + content: "\e724"; } + +.el-icon-close-notification:before { + content: "\e726"; } + +.el-icon-microphone:before { + content: "\e727"; } + +.el-icon-turn-off-microphone:before { + content: "\e728"; } + +.el-icon-position:before { + content: "\e729"; } + +.el-icon-postcard:before { + content: "\e72a"; } + +.el-icon-message:before { + content: "\e72b"; } + +.el-icon-chat-line-square:before { + content: "\e72d"; } + +.el-icon-chat-dot-square:before { + content: "\e72e"; } + +.el-icon-chat-dot-round:before { + content: "\e72f"; } + +.el-icon-chat-square:before { + content: "\e730"; } + +.el-icon-chat-line-round:before { + content: "\e731"; } + +.el-icon-chat-round:before { + content: "\e732"; } + +.el-icon-set-up:before { + content: "\e733"; } + +.el-icon-turn-off:before { + content: "\e734"; } + +.el-icon-open:before { + content: "\e735"; } + +.el-icon-connection:before { + content: "\e736"; } + +.el-icon-link:before { + content: "\e737"; } + +.el-icon-cpu:before { + content: "\e738"; } + +.el-icon-thumb:before { + content: "\e739"; } + +.el-icon-female:before { + content: "\e73a"; } + +.el-icon-male:before { + content: "\e73b"; } + +.el-icon-guide:before { + content: "\e73c"; } + +.el-icon-news:before { + content: "\e73e"; } + +.el-icon-price-tag:before { + content: "\e744"; } + +.el-icon-discount:before { + content: "\e745"; } + +.el-icon-wallet:before { + content: "\e747"; } + +.el-icon-coin:before { + content: "\e748"; } + +.el-icon-money:before { + content: "\e749"; } + +.el-icon-bank-card:before { + content: "\e74a"; } + +.el-icon-box:before { + content: "\e74b"; } + +.el-icon-present:before { + content: "\e74c"; } + +.el-icon-sell:before { + content: "\e6d5"; } + +.el-icon-sold-out:before { + content: "\e6d6"; } + +.el-icon-shopping-bag-2:before { + content: "\e74d"; } + +.el-icon-shopping-bag-1:before { + content: "\e74e"; } + +.el-icon-shopping-cart-2:before { + content: "\e74f"; } + +.el-icon-shopping-cart-1:before { + content: "\e750"; } + +.el-icon-shopping-cart-full:before { + content: "\e751"; } + +.el-icon-smoking:before { + content: "\e752"; } + +.el-icon-no-smoking:before { + content: "\e753"; } + +.el-icon-house:before { + content: "\e754"; } + +.el-icon-table-lamp:before { + content: "\e755"; } + +.el-icon-school:before { + content: "\e756"; } + +.el-icon-office-building:before { + content: "\e757"; } + +.el-icon-toilet-paper:before { + content: "\e758"; } + +.el-icon-notebook-2:before { + content: "\e759"; } + +.el-icon-notebook-1:before { + content: "\e75a"; } + +.el-icon-files:before { + content: "\e75b"; } + +.el-icon-collection:before { + content: "\e75c"; } + +.el-icon-receiving:before { + content: "\e75d"; } + +.el-icon-suitcase-1:before { + content: "\e760"; } + +.el-icon-suitcase:before { + content: "\e761"; } + +.el-icon-film:before { + content: "\e763"; } + +.el-icon-collection-tag:before { + content: "\e765"; } + +.el-icon-data-analysis:before { + content: "\e766"; } + +.el-icon-pie-chart:before { + content: "\e767"; } + +.el-icon-data-board:before { + content: "\e768"; } + +.el-icon-data-line:before { + content: "\e76d"; } + +.el-icon-reading:before { + content: "\e769"; } + +.el-icon-magic-stick:before { + content: "\e76a"; } + +.el-icon-coordinate:before { + content: "\e76b"; } + +.el-icon-mouse:before { + content: "\e76c"; } + +.el-icon-brush:before { + content: "\e76e"; } + +.el-icon-headset:before { + content: "\e76f"; } + +.el-icon-umbrella:before { + content: "\e770"; } + +.el-icon-scissors:before { + content: "\e771"; } + +.el-icon-mobile:before { + content: "\e773"; } + +.el-icon-attract:before { + content: "\e774"; } + +.el-icon-monitor:before { + content: "\e775"; } + +.el-icon-search:before { + content: "\e778"; } + +.el-icon-takeaway-box:before { + content: "\e77a"; } + +.el-icon-paperclip:before { + content: "\e77d"; } + +.el-icon-printer:before { + content: "\e77e"; } + +.el-icon-document-add:before { + content: "\e782"; } + +.el-icon-document:before { + content: "\e785"; } + +.el-icon-document-checked:before { + content: "\e786"; } + +.el-icon-document-copy:before { + content: "\e787"; } + +.el-icon-document-delete:before { + content: "\e788"; } + +.el-icon-document-remove:before { + content: "\e789"; } + +.el-icon-tickets:before { + content: "\e78b"; } + +.el-icon-folder-checked:before { + content: "\e77f"; } + +.el-icon-folder-delete:before { + content: "\e780"; } + +.el-icon-folder-remove:before { + content: "\e781"; } + +.el-icon-folder-add:before { + content: "\e783"; } + +.el-icon-folder-opened:before { + content: "\e784"; } + +.el-icon-folder:before { + content: "\e78a"; } + +.el-icon-edit-outline:before { + content: "\e764"; } + +.el-icon-edit:before { + content: "\e78c"; } + +.el-icon-date:before { + content: "\e78e"; } + +.el-icon-c-scale-to-original:before { + content: "\e7c6"; } + +.el-icon-view:before { + content: "\e6ce"; } + +.el-icon-loading:before { + content: "\e6cf"; } + +.el-icon-rank:before { + content: "\e6d1"; } + +.el-icon-sort-down:before { + content: "\e7c4"; } + +.el-icon-sort-up:before { + content: "\e7c5"; } + +.el-icon-sort:before { + content: "\e6d2"; } + +.el-icon-finished:before { + content: "\e6cd"; } + +.el-icon-refresh-left:before { + content: "\e6c7"; } + +.el-icon-refresh-right:before { + content: "\e6c8"; } + +.el-icon-refresh:before { + content: "\e6d0"; } + +.el-icon-video-play:before { + content: "\e7c0"; } + +.el-icon-video-pause:before { + content: "\e7c1"; } + +.el-icon-d-arrow-right:before { + content: "\e6dc"; } + +.el-icon-d-arrow-left:before { + content: "\e6dd"; } + +.el-icon-arrow-up:before { + content: "\e6e1"; } + +.el-icon-arrow-down:before { + content: "\e6df"; } + +.el-icon-arrow-right:before { + content: "\e6e0"; } + +.el-icon-arrow-left:before { + content: "\e6de"; } + +.el-icon-top-right:before { + content: "\e6e7"; } + +.el-icon-top-left:before { + content: "\e6e8"; } + +.el-icon-top:before { + content: "\e6e6"; } + +.el-icon-bottom:before { + content: "\e6eb"; } + +.el-icon-right:before { + content: "\e6e9"; } + +.el-icon-back:before { + content: "\e6ea"; } + +.el-icon-bottom-right:before { + content: "\e6ec"; } + +.el-icon-bottom-left:before { + content: "\e6ed"; } + +.el-icon-caret-top:before { + content: "\e78f"; } + +.el-icon-caret-bottom:before { + content: "\e790"; } + +.el-icon-caret-right:before { + content: "\e791"; } + +.el-icon-caret-left:before { + content: "\e792"; } + +.el-icon-d-caret:before { + content: "\e79a"; } + +.el-icon-share:before { + content: "\e793"; } + +.el-icon-menu:before { + content: "\e798"; } + +.el-icon-s-grid:before { + content: "\e7a6"; } + +.el-icon-s-check:before { + content: "\e7a7"; } + +.el-icon-s-data:before { + content: "\e7a8"; } + +.el-icon-s-opportunity:before { + content: "\e7aa"; } + +.el-icon-s-custom:before { + content: "\e7ab"; } + +.el-icon-s-claim:before { + content: "\e7ad"; } + +.el-icon-s-finance:before { + content: "\e7ae"; } + +.el-icon-s-comment:before { + content: "\e7af"; } + +.el-icon-s-flag:before { + content: "\e7b0"; } + +.el-icon-s-marketing:before { + content: "\e7b1"; } + +.el-icon-s-shop:before { + content: "\e7b4"; } + +.el-icon-s-open:before { + content: "\e7b5"; } + +.el-icon-s-management:before { + content: "\e7b6"; } + +.el-icon-s-ticket:before { + content: "\e7b7"; } + +.el-icon-s-release:before { + content: "\e7b8"; } + +.el-icon-s-home:before { + content: "\e7b9"; } + +.el-icon-s-promotion:before { + content: "\e7ba"; } + +.el-icon-s-operation:before { + content: "\e7bb"; } + +.el-icon-s-unfold:before { + content: "\e7bc"; } + +.el-icon-s-fold:before { + content: "\e7a9"; } + +.el-icon-s-platform:before { + content: "\e7bd"; } + +.el-icon-s-order:before { + content: "\e7be"; } + +.el-icon-s-cooperation:before { + content: "\e7bf"; } + +.el-icon-bell:before { + content: "\e725"; } + +.el-icon-message-solid:before { + content: "\e799"; } + +.el-icon-video-camera:before { + content: "\e772"; } + +.el-icon-video-camera-solid:before { + content: "\e796"; } + +.el-icon-camera:before { + content: "\e779"; } + +.el-icon-camera-solid:before { + content: "\e79b"; } + +.el-icon-download:before { + content: "\e77c"; } + +.el-icon-upload2:before { + content: "\e77b"; } + +.el-icon-upload:before { + content: "\e7c3"; } + +.el-icon-picture-outline-round:before { + content: "\e75f"; } + +.el-icon-picture-outline:before { + content: "\e75e"; } + +.el-icon-picture:before { + content: "\e79f"; } + +.el-icon-close:before { + content: "\e6db"; } + +.el-icon-check:before { + content: "\e6da"; } + +.el-icon-plus:before { + content: "\e6d9"; } + +.el-icon-minus:before { + content: "\e6d8"; } + +.el-icon-help:before { + content: "\e73d"; } + +.el-icon-s-help:before { + content: "\e7b3"; } + +.el-icon-circle-close:before { + content: "\e78d"; } + +.el-icon-circle-check:before { + content: "\e720"; } + +.el-icon-circle-plus-outline:before { + content: "\e723"; } + +.el-icon-remove-outline:before { + content: "\e722"; } + +.el-icon-zoom-out:before { + content: "\e776"; } + +.el-icon-zoom-in:before { + content: "\e777"; } + +.el-icon-error:before { + content: "\e79d"; } + +.el-icon-success:before { + content: "\e79c"; } + +.el-icon-circle-plus:before { + content: "\e7a0"; } + +.el-icon-remove:before { + content: "\e7a2"; } + +.el-icon-info:before { + content: "\e7a1"; } + +.el-icon-question:before { + content: "\e7a4"; } + +.el-icon-warning-outline:before { + content: "\e6c9"; } + +.el-icon-warning:before { + content: "\e7a3"; } + +.el-icon-goods:before { + content: "\e7c2"; } + +.el-icon-s-goods:before { + content: "\e7b2"; } + +.el-icon-star-off:before { + content: "\e717"; } + +.el-icon-star-on:before { + content: "\e797"; } + +.el-icon-more-outline:before { + content: "\e6cc"; } + +.el-icon-more:before { + content: "\e794"; } + +.el-icon-phone-outline:before { + content: "\e6cb"; } + +.el-icon-phone:before { + content: "\e795"; } + +.el-icon-user:before { + content: "\e6e3"; } + +.el-icon-user-solid:before { + content: "\e7a5"; } + +.el-icon-setting:before { + content: "\e6ca"; } + +.el-icon-s-tools:before { + content: "\e7ac"; } + +.el-icon-delete:before { + content: "\e6d7"; } + +.el-icon-delete-solid:before { + content: "\e7c9"; } + +.el-icon-eleme:before { + content: "\e7c7"; } + +.el-icon-platform-eleme:before { + content: "\e7ca"; } + +.el-icon-loading { + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; } + +.el-icon--right { + margin-left: 5px; } + +.el-icon--left { + margin-right: 5px; } + +@-webkit-keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/breadcrumb-item.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/breadcrumb-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/breadcrumb.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/breadcrumb.css new file mode 100644 index 00000000..80884ebf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/breadcrumb.css @@ -0,0 +1,287 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-breadcrumb { + font-size: 14px; + line-height: 1; } + .el-breadcrumb::before, + .el-breadcrumb::after { + display: table; + content: ""; } + .el-breadcrumb::after { + clear: both; } + .el-breadcrumb__separator { + margin: 0 9px; + font-weight: bold; + color: #C0C4CC; } + .el-breadcrumb__separator[class*=icon] { + margin: 0 6px; + font-weight: normal; } + .el-breadcrumb__item { + float: left; } + .el-breadcrumb__inner { + color: #606266; } + .el-breadcrumb__inner.is-link, .el-breadcrumb__inner a { + font-weight: bold; + text-decoration: none; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + color: #303133; } + .el-breadcrumb__inner.is-link:hover, .el-breadcrumb__inner a:hover { + color: #409EFF; + cursor: pointer; } + .el-breadcrumb__item:last-child .el-breadcrumb__inner, .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover { + font-weight: normal; + color: #606266; + cursor: text; } + .el-breadcrumb__item:last-child .el-breadcrumb__separator { + display: none; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/button-group.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/button-group.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/button.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/button.css new file mode 100644 index 00000000..fd339ab4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/button.css @@ -0,0 +1,762 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/calendar.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/calendar.css new file mode 100644 index 00000000..78ef6366 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/calendar.css @@ -0,0 +1,1065 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +.el-calendar { + background-color: #fff; } + .el-calendar__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 12px 20px; + border-bottom: 1px solid #EBEEF5; } + .el-calendar__title { + color: #000000; + -ms-flex-item-align: center; + align-self: center; } + .el-calendar__body { + padding: 12px 20px 35px; } + +.el-calendar-table { + table-layout: fixed; + width: 100%; } + .el-calendar-table thead th { + padding: 12px 0; + color: #606266; + font-weight: normal; } + .el-calendar-table:not(.is-range) td.prev, + .el-calendar-table:not(.is-range) td.next { + color: #C0C4CC; } + .el-calendar-table td { + border-bottom: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + vertical-align: top; + -webkit-transition: background-color 0.2s ease; + transition: background-color 0.2s ease; } + .el-calendar-table td.is-selected { + background-color: #F2F8FE; } + .el-calendar-table td.is-today { + color: #409EFF; } + .el-calendar-table tr:first-child td { + border-top: 1px solid #EBEEF5; } + .el-calendar-table tr td:first-child { + border-left: 1px solid #EBEEF5; } + .el-calendar-table tr.el-calendar-table__row--hide-border td { + border-top: none; } + .el-calendar-table .el-calendar-day { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 8px; + height: 85px; } + .el-calendar-table .el-calendar-day:hover { + cursor: pointer; + background-color: #F2F8FE; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/card.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/card.css new file mode 100644 index 00000000..66139320 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/card.css @@ -0,0 +1,271 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-card { + border-radius: 4px; + border: 1px solid #EBEEF5; + background-color: #FFFFFF; + overflow: hidden; + color: #303133; + -webkit-transition: 0.3s; + transition: 0.3s; } + .el-card.is-always-shadow { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card.is-hover-shadow:hover, .el-card.is-hover-shadow:focus { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card__header { + padding: 18px 20px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-card__body { + padding: 20px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/carousel-item.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/carousel-item.css new file mode 100644 index 00000000..ad06193d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/carousel-item.css @@ -0,0 +1,291 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel__item { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: inline-block; + overflow: hidden; + z-index: 0; } + .el-carousel__item.is-active { + z-index: 2; } + .el-carousel__item.is-animating { + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card { + width: 50%; + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card.is-in-stage { + cursor: pointer; + z-index: 1; } + .el-carousel__item--card.is-in-stage:hover .el-carousel__mask, + .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask { + opacity: 0.12; } + .el-carousel__item--card.is-active { + z-index: 2; } + +.el-carousel__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: #FFFFFF; + opacity: 0.24; + -webkit-transition: .2s; + transition: .2s; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/carousel.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/carousel.css new file mode 100644 index 00000000..a22c8c86 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/carousel.css @@ -0,0 +1,367 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel { + position: relative; } + .el-carousel--horizontal { + overflow-x: hidden; } + .el-carousel--vertical { + overflow-y: hidden; } + .el-carousel__container { + position: relative; + height: 300px; } + .el-carousel__arrow { + border: none; + outline: none; + padding: 0; + margin: 0; + height: 36px; + width: 36px; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; + border-radius: 50%; + background-color: rgba(31, 45, 61, 0.11); + color: #FFFFFF; + position: absolute; + top: 50%; + z-index: 10; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + text-align: center; + font-size: 12px; } + .el-carousel__arrow--left { + left: 16px; } + .el-carousel__arrow--right { + right: 16px; } + .el-carousel__arrow:hover { + background-color: rgba(31, 45, 61, 0.23); } + .el-carousel__arrow i { + cursor: pointer; } + .el-carousel__indicators { + position: absolute; + list-style: none; + margin: 0; + padding: 0; + z-index: 2; } + .el-carousel__indicators--horizontal { + bottom: 0; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .el-carousel__indicators--vertical { + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-carousel__indicators--outside { + bottom: 26px; + text-align: center; + position: static; + -webkit-transform: none; + transform: none; } + .el-carousel__indicators--outside .el-carousel__indicator:hover button { + opacity: 0.64; } + .el-carousel__indicators--outside button { + background-color: #C0C4CC; + opacity: 0.24; } + .el-carousel__indicators--labels { + left: 0; + right: 0; + -webkit-transform: none; + transform: none; + text-align: center; } + .el-carousel__indicators--labels .el-carousel__button { + height: auto; + width: auto; + padding: 2px 18px; + font-size: 12px; } + .el-carousel__indicators--labels .el-carousel__indicator { + padding: 6px 4px; } + .el-carousel__indicator { + background-color: transparent; + cursor: pointer; } + .el-carousel__indicator:hover button { + opacity: 0.72; } + .el-carousel__indicator--horizontal { + display: inline-block; + padding: 12px 4px; } + .el-carousel__indicator--vertical { + padding: 4px 12px; } + .el-carousel__indicator--vertical .el-carousel__button { + width: 2px; + height: 15px; } + .el-carousel__indicator.is-active button { + opacity: 1; } + .el-carousel__button { + display: block; + opacity: 0.48; + width: 30px; + height: 2px; + background-color: #FFFFFF; + border: none; + outline: none; + padding: 0; + margin: 0; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; } + +.carousel-arrow-left-enter, +.carousel-arrow-left-leave-active { + -webkit-transform: translateY(-50%) translateX(-10px); + transform: translateY(-50%) translateX(-10px); + opacity: 0; } + +.carousel-arrow-right-enter, +.carousel-arrow-right-leave-active { + -webkit-transform: translateY(-50%) translateX(10px); + transform: translateY(-50%) translateX(10px); + opacity: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/cascader-panel.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/cascader-panel.css new file mode 100644 index 00000000..ac054909 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/cascader-panel.css @@ -0,0 +1,1781 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/cascader.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/cascader.css new file mode 100644 index 00000000..64058d7d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/cascader.css @@ -0,0 +1,3504 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } + +.el-cascader { + display: inline-block; + position: relative; + font-size: 14px; + line-height: 40px; } + .el-cascader:not(.is-disabled):hover .el-input__inner { + cursor: pointer; + border-color: #C0C4CC; } + .el-cascader .el-input { + cursor: pointer; } + .el-cascader .el-input .el-input__inner { + text-overflow: ellipsis; } + .el-cascader .el-input .el-input__inner:focus { + border-color: #409EFF; } + .el-cascader .el-input .el-icon-arrow-down { + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 14px; } + .el-cascader .el-input .el-icon-arrow-down.is-reverse { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-cascader .el-input .el-icon-circle-close:hover { + color: #909399; } + .el-cascader .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-cascader--medium { + font-size: 14px; + line-height: 36px; } + .el-cascader--small { + font-size: 13px; + line-height: 32px; } + .el-cascader--mini { + font-size: 12px; + line-height: 28px; } + .el-cascader.is-disabled .el-cascader__label { + z-index: 2; + color: #C0C4CC; } + .el-cascader__dropdown { + margin: 5px 0; + font-size: 14px; + background: #FFFFFF; + border: solid 1px #E4E7ED; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-cascader__tags { + position: absolute; + left: 0; + right: 30px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + line-height: normal; + text-align: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__tags .el-tag { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + max-width: 100%; + margin: 2px 0 2px 6px; + text-overflow: ellipsis; + background: #f0f2f5; } + .el-cascader__tags .el-tag:not(.is-hit) { + border-color: transparent; } + .el-cascader__tags .el-tag > span { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader__tags .el-tag .el-icon-close { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + background-color: #C0C4CC; + color: #FFFFFF; } + .el-cascader__tags .el-tag .el-icon-close:hover { + background-color: #909399; } + .el-cascader__suggestion-panel { + border-radius: 4px; } + .el-cascader__suggestion-list { + max-height: 204px; + margin: 0; + padding: 6px 0; + font-size: 14px; + color: #606266; + text-align: center; } + .el-cascader__suggestion-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + padding: 0 15px; + text-align: left; + outline: none; + cursor: pointer; } + .el-cascader__suggestion-item:hover, .el-cascader__suggestion-item:focus { + background: #F5F7FA; } + .el-cascader__suggestion-item.is-checked { + color: #409EFF; + font-weight: bold; } + .el-cascader__suggestion-item > span { + margin-right: 10px; } + .el-cascader__empty-text { + margin: 10px 0; + color: #C0C4CC; } + .el-cascader__search-input { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + height: 24px; + min-width: 60px; + margin: 2px 0 2px 15px; + padding: 0; + color: #606266; + border: none; + outline: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__search-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-moz-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::placeholder { + color: #C0C4CC; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/checkbox-button.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/checkbox-button.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/checkbox-group.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/checkbox-group.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/checkbox.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/checkbox.css new file mode 100644 index 00000000..056492bf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/checkbox.css @@ -0,0 +1,636 @@ +@charset "UTF-8"; +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/col.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/col.css new file mode 100644 index 00000000..d14ed5ab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/col.css @@ -0,0 +1,1877 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +[class*="el-col-"] { + float: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-col-0 { + display: none; } + +.el-col-0 { + width: 0%; } + +.el-col-offset-0 { + margin-left: 0%; } + +.el-col-pull-0 { + position: relative; + right: 0%; } + +.el-col-push-0 { + position: relative; + left: 0%; } + +.el-col-1 { + width: 4.16667%; } + +.el-col-offset-1 { + margin-left: 4.16667%; } + +.el-col-pull-1 { + position: relative; + right: 4.16667%; } + +.el-col-push-1 { + position: relative; + left: 4.16667%; } + +.el-col-2 { + width: 8.33333%; } + +.el-col-offset-2 { + margin-left: 8.33333%; } + +.el-col-pull-2 { + position: relative; + right: 8.33333%; } + +.el-col-push-2 { + position: relative; + left: 8.33333%; } + +.el-col-3 { + width: 12.5%; } + +.el-col-offset-3 { + margin-left: 12.5%; } + +.el-col-pull-3 { + position: relative; + right: 12.5%; } + +.el-col-push-3 { + position: relative; + left: 12.5%; } + +.el-col-4 { + width: 16.66667%; } + +.el-col-offset-4 { + margin-left: 16.66667%; } + +.el-col-pull-4 { + position: relative; + right: 16.66667%; } + +.el-col-push-4 { + position: relative; + left: 16.66667%; } + +.el-col-5 { + width: 20.83333%; } + +.el-col-offset-5 { + margin-left: 20.83333%; } + +.el-col-pull-5 { + position: relative; + right: 20.83333%; } + +.el-col-push-5 { + position: relative; + left: 20.83333%; } + +.el-col-6 { + width: 25%; } + +.el-col-offset-6 { + margin-left: 25%; } + +.el-col-pull-6 { + position: relative; + right: 25%; } + +.el-col-push-6 { + position: relative; + left: 25%; } + +.el-col-7 { + width: 29.16667%; } + +.el-col-offset-7 { + margin-left: 29.16667%; } + +.el-col-pull-7 { + position: relative; + right: 29.16667%; } + +.el-col-push-7 { + position: relative; + left: 29.16667%; } + +.el-col-8 { + width: 33.33333%; } + +.el-col-offset-8 { + margin-left: 33.33333%; } + +.el-col-pull-8 { + position: relative; + right: 33.33333%; } + +.el-col-push-8 { + position: relative; + left: 33.33333%; } + +.el-col-9 { + width: 37.5%; } + +.el-col-offset-9 { + margin-left: 37.5%; } + +.el-col-pull-9 { + position: relative; + right: 37.5%; } + +.el-col-push-9 { + position: relative; + left: 37.5%; } + +.el-col-10 { + width: 41.66667%; } + +.el-col-offset-10 { + margin-left: 41.66667%; } + +.el-col-pull-10 { + position: relative; + right: 41.66667%; } + +.el-col-push-10 { + position: relative; + left: 41.66667%; } + +.el-col-11 { + width: 45.83333%; } + +.el-col-offset-11 { + margin-left: 45.83333%; } + +.el-col-pull-11 { + position: relative; + right: 45.83333%; } + +.el-col-push-11 { + position: relative; + left: 45.83333%; } + +.el-col-12 { + width: 50%; } + +.el-col-offset-12 { + margin-left: 50%; } + +.el-col-pull-12 { + position: relative; + right: 50%; } + +.el-col-push-12 { + position: relative; + left: 50%; } + +.el-col-13 { + width: 54.16667%; } + +.el-col-offset-13 { + margin-left: 54.16667%; } + +.el-col-pull-13 { + position: relative; + right: 54.16667%; } + +.el-col-push-13 { + position: relative; + left: 54.16667%; } + +.el-col-14 { + width: 58.33333%; } + +.el-col-offset-14 { + margin-left: 58.33333%; } + +.el-col-pull-14 { + position: relative; + right: 58.33333%; } + +.el-col-push-14 { + position: relative; + left: 58.33333%; } + +.el-col-15 { + width: 62.5%; } + +.el-col-offset-15 { + margin-left: 62.5%; } + +.el-col-pull-15 { + position: relative; + right: 62.5%; } + +.el-col-push-15 { + position: relative; + left: 62.5%; } + +.el-col-16 { + width: 66.66667%; } + +.el-col-offset-16 { + margin-left: 66.66667%; } + +.el-col-pull-16 { + position: relative; + right: 66.66667%; } + +.el-col-push-16 { + position: relative; + left: 66.66667%; } + +.el-col-17 { + width: 70.83333%; } + +.el-col-offset-17 { + margin-left: 70.83333%; } + +.el-col-pull-17 { + position: relative; + right: 70.83333%; } + +.el-col-push-17 { + position: relative; + left: 70.83333%; } + +.el-col-18 { + width: 75%; } + +.el-col-offset-18 { + margin-left: 75%; } + +.el-col-pull-18 { + position: relative; + right: 75%; } + +.el-col-push-18 { + position: relative; + left: 75%; } + +.el-col-19 { + width: 79.16667%; } + +.el-col-offset-19 { + margin-left: 79.16667%; } + +.el-col-pull-19 { + position: relative; + right: 79.16667%; } + +.el-col-push-19 { + position: relative; + left: 79.16667%; } + +.el-col-20 { + width: 83.33333%; } + +.el-col-offset-20 { + margin-left: 83.33333%; } + +.el-col-pull-20 { + position: relative; + right: 83.33333%; } + +.el-col-push-20 { + position: relative; + left: 83.33333%; } + +.el-col-21 { + width: 87.5%; } + +.el-col-offset-21 { + margin-left: 87.5%; } + +.el-col-pull-21 { + position: relative; + right: 87.5%; } + +.el-col-push-21 { + position: relative; + left: 87.5%; } + +.el-col-22 { + width: 91.66667%; } + +.el-col-offset-22 { + margin-left: 91.66667%; } + +.el-col-pull-22 { + position: relative; + right: 91.66667%; } + +.el-col-push-22 { + position: relative; + left: 91.66667%; } + +.el-col-23 { + width: 95.83333%; } + +.el-col-offset-23 { + margin-left: 95.83333%; } + +.el-col-pull-23 { + position: relative; + right: 95.83333%; } + +.el-col-push-23 { + position: relative; + left: 95.83333%; } + +.el-col-24 { + width: 100%; } + +.el-col-offset-24 { + margin-left: 100%; } + +.el-col-pull-24 { + position: relative; + right: 100%; } + +.el-col-push-24 { + position: relative; + left: 100%; } + +@media only screen and (max-width: 767px) { + .el-col-xs-0 { + display: none; } + .el-col-xs-0 { + width: 0%; } + .el-col-xs-offset-0 { + margin-left: 0%; } + .el-col-xs-pull-0 { + position: relative; + right: 0%; } + .el-col-xs-push-0 { + position: relative; + left: 0%; } + .el-col-xs-1 { + width: 4.16667%; } + .el-col-xs-offset-1 { + margin-left: 4.16667%; } + .el-col-xs-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xs-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xs-2 { + width: 8.33333%; } + .el-col-xs-offset-2 { + margin-left: 8.33333%; } + .el-col-xs-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xs-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xs-3 { + width: 12.5%; } + .el-col-xs-offset-3 { + margin-left: 12.5%; } + .el-col-xs-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xs-push-3 { + position: relative; + left: 12.5%; } + .el-col-xs-4 { + width: 16.66667%; } + .el-col-xs-offset-4 { + margin-left: 16.66667%; } + .el-col-xs-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xs-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xs-5 { + width: 20.83333%; } + .el-col-xs-offset-5 { + margin-left: 20.83333%; } + .el-col-xs-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xs-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xs-6 { + width: 25%; } + .el-col-xs-offset-6 { + margin-left: 25%; } + .el-col-xs-pull-6 { + position: relative; + right: 25%; } + .el-col-xs-push-6 { + position: relative; + left: 25%; } + .el-col-xs-7 { + width: 29.16667%; } + .el-col-xs-offset-7 { + margin-left: 29.16667%; } + .el-col-xs-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xs-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xs-8 { + width: 33.33333%; } + .el-col-xs-offset-8 { + margin-left: 33.33333%; } + .el-col-xs-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xs-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xs-9 { + width: 37.5%; } + .el-col-xs-offset-9 { + margin-left: 37.5%; } + .el-col-xs-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xs-push-9 { + position: relative; + left: 37.5%; } + .el-col-xs-10 { + width: 41.66667%; } + .el-col-xs-offset-10 { + margin-left: 41.66667%; } + .el-col-xs-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xs-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xs-11 { + width: 45.83333%; } + .el-col-xs-offset-11 { + margin-left: 45.83333%; } + .el-col-xs-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xs-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xs-12 { + width: 50%; } + .el-col-xs-offset-12 { + margin-left: 50%; } + .el-col-xs-pull-12 { + position: relative; + right: 50%; } + .el-col-xs-push-12 { + position: relative; + left: 50%; } + .el-col-xs-13 { + width: 54.16667%; } + .el-col-xs-offset-13 { + margin-left: 54.16667%; } + .el-col-xs-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xs-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xs-14 { + width: 58.33333%; } + .el-col-xs-offset-14 { + margin-left: 58.33333%; } + .el-col-xs-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xs-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xs-15 { + width: 62.5%; } + .el-col-xs-offset-15 { + margin-left: 62.5%; } + .el-col-xs-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xs-push-15 { + position: relative; + left: 62.5%; } + .el-col-xs-16 { + width: 66.66667%; } + .el-col-xs-offset-16 { + margin-left: 66.66667%; } + .el-col-xs-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xs-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xs-17 { + width: 70.83333%; } + .el-col-xs-offset-17 { + margin-left: 70.83333%; } + .el-col-xs-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xs-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xs-18 { + width: 75%; } + .el-col-xs-offset-18 { + margin-left: 75%; } + .el-col-xs-pull-18 { + position: relative; + right: 75%; } + .el-col-xs-push-18 { + position: relative; + left: 75%; } + .el-col-xs-19 { + width: 79.16667%; } + .el-col-xs-offset-19 { + margin-left: 79.16667%; } + .el-col-xs-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xs-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xs-20 { + width: 83.33333%; } + .el-col-xs-offset-20 { + margin-left: 83.33333%; } + .el-col-xs-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xs-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xs-21 { + width: 87.5%; } + .el-col-xs-offset-21 { + margin-left: 87.5%; } + .el-col-xs-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xs-push-21 { + position: relative; + left: 87.5%; } + .el-col-xs-22 { + width: 91.66667%; } + .el-col-xs-offset-22 { + margin-left: 91.66667%; } + .el-col-xs-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xs-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xs-23 { + width: 95.83333%; } + .el-col-xs-offset-23 { + margin-left: 95.83333%; } + .el-col-xs-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xs-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xs-24 { + width: 100%; } + .el-col-xs-offset-24 { + margin-left: 100%; } + .el-col-xs-pull-24 { + position: relative; + right: 100%; } + .el-col-xs-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 768px) { + .el-col-sm-0 { + display: none; } + .el-col-sm-0 { + width: 0%; } + .el-col-sm-offset-0 { + margin-left: 0%; } + .el-col-sm-pull-0 { + position: relative; + right: 0%; } + .el-col-sm-push-0 { + position: relative; + left: 0%; } + .el-col-sm-1 { + width: 4.16667%; } + .el-col-sm-offset-1 { + margin-left: 4.16667%; } + .el-col-sm-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-sm-push-1 { + position: relative; + left: 4.16667%; } + .el-col-sm-2 { + width: 8.33333%; } + .el-col-sm-offset-2 { + margin-left: 8.33333%; } + .el-col-sm-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-sm-push-2 { + position: relative; + left: 8.33333%; } + .el-col-sm-3 { + width: 12.5%; } + .el-col-sm-offset-3 { + margin-left: 12.5%; } + .el-col-sm-pull-3 { + position: relative; + right: 12.5%; } + .el-col-sm-push-3 { + position: relative; + left: 12.5%; } + .el-col-sm-4 { + width: 16.66667%; } + .el-col-sm-offset-4 { + margin-left: 16.66667%; } + .el-col-sm-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-sm-push-4 { + position: relative; + left: 16.66667%; } + .el-col-sm-5 { + width: 20.83333%; } + .el-col-sm-offset-5 { + margin-left: 20.83333%; } + .el-col-sm-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-sm-push-5 { + position: relative; + left: 20.83333%; } + .el-col-sm-6 { + width: 25%; } + .el-col-sm-offset-6 { + margin-left: 25%; } + .el-col-sm-pull-6 { + position: relative; + right: 25%; } + .el-col-sm-push-6 { + position: relative; + left: 25%; } + .el-col-sm-7 { + width: 29.16667%; } + .el-col-sm-offset-7 { + margin-left: 29.16667%; } + .el-col-sm-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-sm-push-7 { + position: relative; + left: 29.16667%; } + .el-col-sm-8 { + width: 33.33333%; } + .el-col-sm-offset-8 { + margin-left: 33.33333%; } + .el-col-sm-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-sm-push-8 { + position: relative; + left: 33.33333%; } + .el-col-sm-9 { + width: 37.5%; } + .el-col-sm-offset-9 { + margin-left: 37.5%; } + .el-col-sm-pull-9 { + position: relative; + right: 37.5%; } + .el-col-sm-push-9 { + position: relative; + left: 37.5%; } + .el-col-sm-10 { + width: 41.66667%; } + .el-col-sm-offset-10 { + margin-left: 41.66667%; } + .el-col-sm-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-sm-push-10 { + position: relative; + left: 41.66667%; } + .el-col-sm-11 { + width: 45.83333%; } + .el-col-sm-offset-11 { + margin-left: 45.83333%; } + .el-col-sm-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-sm-push-11 { + position: relative; + left: 45.83333%; } + .el-col-sm-12 { + width: 50%; } + .el-col-sm-offset-12 { + margin-left: 50%; } + .el-col-sm-pull-12 { + position: relative; + right: 50%; } + .el-col-sm-push-12 { + position: relative; + left: 50%; } + .el-col-sm-13 { + width: 54.16667%; } + .el-col-sm-offset-13 { + margin-left: 54.16667%; } + .el-col-sm-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-sm-push-13 { + position: relative; + left: 54.16667%; } + .el-col-sm-14 { + width: 58.33333%; } + .el-col-sm-offset-14 { + margin-left: 58.33333%; } + .el-col-sm-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-sm-push-14 { + position: relative; + left: 58.33333%; } + .el-col-sm-15 { + width: 62.5%; } + .el-col-sm-offset-15 { + margin-left: 62.5%; } + .el-col-sm-pull-15 { + position: relative; + right: 62.5%; } + .el-col-sm-push-15 { + position: relative; + left: 62.5%; } + .el-col-sm-16 { + width: 66.66667%; } + .el-col-sm-offset-16 { + margin-left: 66.66667%; } + .el-col-sm-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-sm-push-16 { + position: relative; + left: 66.66667%; } + .el-col-sm-17 { + width: 70.83333%; } + .el-col-sm-offset-17 { + margin-left: 70.83333%; } + .el-col-sm-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-sm-push-17 { + position: relative; + left: 70.83333%; } + .el-col-sm-18 { + width: 75%; } + .el-col-sm-offset-18 { + margin-left: 75%; } + .el-col-sm-pull-18 { + position: relative; + right: 75%; } + .el-col-sm-push-18 { + position: relative; + left: 75%; } + .el-col-sm-19 { + width: 79.16667%; } + .el-col-sm-offset-19 { + margin-left: 79.16667%; } + .el-col-sm-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-sm-push-19 { + position: relative; + left: 79.16667%; } + .el-col-sm-20 { + width: 83.33333%; } + .el-col-sm-offset-20 { + margin-left: 83.33333%; } + .el-col-sm-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-sm-push-20 { + position: relative; + left: 83.33333%; } + .el-col-sm-21 { + width: 87.5%; } + .el-col-sm-offset-21 { + margin-left: 87.5%; } + .el-col-sm-pull-21 { + position: relative; + right: 87.5%; } + .el-col-sm-push-21 { + position: relative; + left: 87.5%; } + .el-col-sm-22 { + width: 91.66667%; } + .el-col-sm-offset-22 { + margin-left: 91.66667%; } + .el-col-sm-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-sm-push-22 { + position: relative; + left: 91.66667%; } + .el-col-sm-23 { + width: 95.83333%; } + .el-col-sm-offset-23 { + margin-left: 95.83333%; } + .el-col-sm-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-sm-push-23 { + position: relative; + left: 95.83333%; } + .el-col-sm-24 { + width: 100%; } + .el-col-sm-offset-24 { + margin-left: 100%; } + .el-col-sm-pull-24 { + position: relative; + right: 100%; } + .el-col-sm-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 992px) { + .el-col-md-0 { + display: none; } + .el-col-md-0 { + width: 0%; } + .el-col-md-offset-0 { + margin-left: 0%; } + .el-col-md-pull-0 { + position: relative; + right: 0%; } + .el-col-md-push-0 { + position: relative; + left: 0%; } + .el-col-md-1 { + width: 4.16667%; } + .el-col-md-offset-1 { + margin-left: 4.16667%; } + .el-col-md-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-md-push-1 { + position: relative; + left: 4.16667%; } + .el-col-md-2 { + width: 8.33333%; } + .el-col-md-offset-2 { + margin-left: 8.33333%; } + .el-col-md-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-md-push-2 { + position: relative; + left: 8.33333%; } + .el-col-md-3 { + width: 12.5%; } + .el-col-md-offset-3 { + margin-left: 12.5%; } + .el-col-md-pull-3 { + position: relative; + right: 12.5%; } + .el-col-md-push-3 { + position: relative; + left: 12.5%; } + .el-col-md-4 { + width: 16.66667%; } + .el-col-md-offset-4 { + margin-left: 16.66667%; } + .el-col-md-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-md-push-4 { + position: relative; + left: 16.66667%; } + .el-col-md-5 { + width: 20.83333%; } + .el-col-md-offset-5 { + margin-left: 20.83333%; } + .el-col-md-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-md-push-5 { + position: relative; + left: 20.83333%; } + .el-col-md-6 { + width: 25%; } + .el-col-md-offset-6 { + margin-left: 25%; } + .el-col-md-pull-6 { + position: relative; + right: 25%; } + .el-col-md-push-6 { + position: relative; + left: 25%; } + .el-col-md-7 { + width: 29.16667%; } + .el-col-md-offset-7 { + margin-left: 29.16667%; } + .el-col-md-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-md-push-7 { + position: relative; + left: 29.16667%; } + .el-col-md-8 { + width: 33.33333%; } + .el-col-md-offset-8 { + margin-left: 33.33333%; } + .el-col-md-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-md-push-8 { + position: relative; + left: 33.33333%; } + .el-col-md-9 { + width: 37.5%; } + .el-col-md-offset-9 { + margin-left: 37.5%; } + .el-col-md-pull-9 { + position: relative; + right: 37.5%; } + .el-col-md-push-9 { + position: relative; + left: 37.5%; } + .el-col-md-10 { + width: 41.66667%; } + .el-col-md-offset-10 { + margin-left: 41.66667%; } + .el-col-md-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-md-push-10 { + position: relative; + left: 41.66667%; } + .el-col-md-11 { + width: 45.83333%; } + .el-col-md-offset-11 { + margin-left: 45.83333%; } + .el-col-md-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-md-push-11 { + position: relative; + left: 45.83333%; } + .el-col-md-12 { + width: 50%; } + .el-col-md-offset-12 { + margin-left: 50%; } + .el-col-md-pull-12 { + position: relative; + right: 50%; } + .el-col-md-push-12 { + position: relative; + left: 50%; } + .el-col-md-13 { + width: 54.16667%; } + .el-col-md-offset-13 { + margin-left: 54.16667%; } + .el-col-md-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-md-push-13 { + position: relative; + left: 54.16667%; } + .el-col-md-14 { + width: 58.33333%; } + .el-col-md-offset-14 { + margin-left: 58.33333%; } + .el-col-md-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-md-push-14 { + position: relative; + left: 58.33333%; } + .el-col-md-15 { + width: 62.5%; } + .el-col-md-offset-15 { + margin-left: 62.5%; } + .el-col-md-pull-15 { + position: relative; + right: 62.5%; } + .el-col-md-push-15 { + position: relative; + left: 62.5%; } + .el-col-md-16 { + width: 66.66667%; } + .el-col-md-offset-16 { + margin-left: 66.66667%; } + .el-col-md-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-md-push-16 { + position: relative; + left: 66.66667%; } + .el-col-md-17 { + width: 70.83333%; } + .el-col-md-offset-17 { + margin-left: 70.83333%; } + .el-col-md-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-md-push-17 { + position: relative; + left: 70.83333%; } + .el-col-md-18 { + width: 75%; } + .el-col-md-offset-18 { + margin-left: 75%; } + .el-col-md-pull-18 { + position: relative; + right: 75%; } + .el-col-md-push-18 { + position: relative; + left: 75%; } + .el-col-md-19 { + width: 79.16667%; } + .el-col-md-offset-19 { + margin-left: 79.16667%; } + .el-col-md-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-md-push-19 { + position: relative; + left: 79.16667%; } + .el-col-md-20 { + width: 83.33333%; } + .el-col-md-offset-20 { + margin-left: 83.33333%; } + .el-col-md-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-md-push-20 { + position: relative; + left: 83.33333%; } + .el-col-md-21 { + width: 87.5%; } + .el-col-md-offset-21 { + margin-left: 87.5%; } + .el-col-md-pull-21 { + position: relative; + right: 87.5%; } + .el-col-md-push-21 { + position: relative; + left: 87.5%; } + .el-col-md-22 { + width: 91.66667%; } + .el-col-md-offset-22 { + margin-left: 91.66667%; } + .el-col-md-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-md-push-22 { + position: relative; + left: 91.66667%; } + .el-col-md-23 { + width: 95.83333%; } + .el-col-md-offset-23 { + margin-left: 95.83333%; } + .el-col-md-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-md-push-23 { + position: relative; + left: 95.83333%; } + .el-col-md-24 { + width: 100%; } + .el-col-md-offset-24 { + margin-left: 100%; } + .el-col-md-pull-24 { + position: relative; + right: 100%; } + .el-col-md-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1200px) { + .el-col-lg-0 { + display: none; } + .el-col-lg-0 { + width: 0%; } + .el-col-lg-offset-0 { + margin-left: 0%; } + .el-col-lg-pull-0 { + position: relative; + right: 0%; } + .el-col-lg-push-0 { + position: relative; + left: 0%; } + .el-col-lg-1 { + width: 4.16667%; } + .el-col-lg-offset-1 { + margin-left: 4.16667%; } + .el-col-lg-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-lg-push-1 { + position: relative; + left: 4.16667%; } + .el-col-lg-2 { + width: 8.33333%; } + .el-col-lg-offset-2 { + margin-left: 8.33333%; } + .el-col-lg-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-lg-push-2 { + position: relative; + left: 8.33333%; } + .el-col-lg-3 { + width: 12.5%; } + .el-col-lg-offset-3 { + margin-left: 12.5%; } + .el-col-lg-pull-3 { + position: relative; + right: 12.5%; } + .el-col-lg-push-3 { + position: relative; + left: 12.5%; } + .el-col-lg-4 { + width: 16.66667%; } + .el-col-lg-offset-4 { + margin-left: 16.66667%; } + .el-col-lg-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-lg-push-4 { + position: relative; + left: 16.66667%; } + .el-col-lg-5 { + width: 20.83333%; } + .el-col-lg-offset-5 { + margin-left: 20.83333%; } + .el-col-lg-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-lg-push-5 { + position: relative; + left: 20.83333%; } + .el-col-lg-6 { + width: 25%; } + .el-col-lg-offset-6 { + margin-left: 25%; } + .el-col-lg-pull-6 { + position: relative; + right: 25%; } + .el-col-lg-push-6 { + position: relative; + left: 25%; } + .el-col-lg-7 { + width: 29.16667%; } + .el-col-lg-offset-7 { + margin-left: 29.16667%; } + .el-col-lg-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-lg-push-7 { + position: relative; + left: 29.16667%; } + .el-col-lg-8 { + width: 33.33333%; } + .el-col-lg-offset-8 { + margin-left: 33.33333%; } + .el-col-lg-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-lg-push-8 { + position: relative; + left: 33.33333%; } + .el-col-lg-9 { + width: 37.5%; } + .el-col-lg-offset-9 { + margin-left: 37.5%; } + .el-col-lg-pull-9 { + position: relative; + right: 37.5%; } + .el-col-lg-push-9 { + position: relative; + left: 37.5%; } + .el-col-lg-10 { + width: 41.66667%; } + .el-col-lg-offset-10 { + margin-left: 41.66667%; } + .el-col-lg-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-lg-push-10 { + position: relative; + left: 41.66667%; } + .el-col-lg-11 { + width: 45.83333%; } + .el-col-lg-offset-11 { + margin-left: 45.83333%; } + .el-col-lg-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-lg-push-11 { + position: relative; + left: 45.83333%; } + .el-col-lg-12 { + width: 50%; } + .el-col-lg-offset-12 { + margin-left: 50%; } + .el-col-lg-pull-12 { + position: relative; + right: 50%; } + .el-col-lg-push-12 { + position: relative; + left: 50%; } + .el-col-lg-13 { + width: 54.16667%; } + .el-col-lg-offset-13 { + margin-left: 54.16667%; } + .el-col-lg-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-lg-push-13 { + position: relative; + left: 54.16667%; } + .el-col-lg-14 { + width: 58.33333%; } + .el-col-lg-offset-14 { + margin-left: 58.33333%; } + .el-col-lg-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-lg-push-14 { + position: relative; + left: 58.33333%; } + .el-col-lg-15 { + width: 62.5%; } + .el-col-lg-offset-15 { + margin-left: 62.5%; } + .el-col-lg-pull-15 { + position: relative; + right: 62.5%; } + .el-col-lg-push-15 { + position: relative; + left: 62.5%; } + .el-col-lg-16 { + width: 66.66667%; } + .el-col-lg-offset-16 { + margin-left: 66.66667%; } + .el-col-lg-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-lg-push-16 { + position: relative; + left: 66.66667%; } + .el-col-lg-17 { + width: 70.83333%; } + .el-col-lg-offset-17 { + margin-left: 70.83333%; } + .el-col-lg-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-lg-push-17 { + position: relative; + left: 70.83333%; } + .el-col-lg-18 { + width: 75%; } + .el-col-lg-offset-18 { + margin-left: 75%; } + .el-col-lg-pull-18 { + position: relative; + right: 75%; } + .el-col-lg-push-18 { + position: relative; + left: 75%; } + .el-col-lg-19 { + width: 79.16667%; } + .el-col-lg-offset-19 { + margin-left: 79.16667%; } + .el-col-lg-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-lg-push-19 { + position: relative; + left: 79.16667%; } + .el-col-lg-20 { + width: 83.33333%; } + .el-col-lg-offset-20 { + margin-left: 83.33333%; } + .el-col-lg-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-lg-push-20 { + position: relative; + left: 83.33333%; } + .el-col-lg-21 { + width: 87.5%; } + .el-col-lg-offset-21 { + margin-left: 87.5%; } + .el-col-lg-pull-21 { + position: relative; + right: 87.5%; } + .el-col-lg-push-21 { + position: relative; + left: 87.5%; } + .el-col-lg-22 { + width: 91.66667%; } + .el-col-lg-offset-22 { + margin-left: 91.66667%; } + .el-col-lg-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-lg-push-22 { + position: relative; + left: 91.66667%; } + .el-col-lg-23 { + width: 95.83333%; } + .el-col-lg-offset-23 { + margin-left: 95.83333%; } + .el-col-lg-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-lg-push-23 { + position: relative; + left: 95.83333%; } + .el-col-lg-24 { + width: 100%; } + .el-col-lg-offset-24 { + margin-left: 100%; } + .el-col-lg-pull-24 { + position: relative; + right: 100%; } + .el-col-lg-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1920px) { + .el-col-xl-0 { + display: none; } + .el-col-xl-0 { + width: 0%; } + .el-col-xl-offset-0 { + margin-left: 0%; } + .el-col-xl-pull-0 { + position: relative; + right: 0%; } + .el-col-xl-push-0 { + position: relative; + left: 0%; } + .el-col-xl-1 { + width: 4.16667%; } + .el-col-xl-offset-1 { + margin-left: 4.16667%; } + .el-col-xl-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xl-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xl-2 { + width: 8.33333%; } + .el-col-xl-offset-2 { + margin-left: 8.33333%; } + .el-col-xl-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xl-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xl-3 { + width: 12.5%; } + .el-col-xl-offset-3 { + margin-left: 12.5%; } + .el-col-xl-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xl-push-3 { + position: relative; + left: 12.5%; } + .el-col-xl-4 { + width: 16.66667%; } + .el-col-xl-offset-4 { + margin-left: 16.66667%; } + .el-col-xl-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xl-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xl-5 { + width: 20.83333%; } + .el-col-xl-offset-5 { + margin-left: 20.83333%; } + .el-col-xl-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xl-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xl-6 { + width: 25%; } + .el-col-xl-offset-6 { + margin-left: 25%; } + .el-col-xl-pull-6 { + position: relative; + right: 25%; } + .el-col-xl-push-6 { + position: relative; + left: 25%; } + .el-col-xl-7 { + width: 29.16667%; } + .el-col-xl-offset-7 { + margin-left: 29.16667%; } + .el-col-xl-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xl-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xl-8 { + width: 33.33333%; } + .el-col-xl-offset-8 { + margin-left: 33.33333%; } + .el-col-xl-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xl-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xl-9 { + width: 37.5%; } + .el-col-xl-offset-9 { + margin-left: 37.5%; } + .el-col-xl-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xl-push-9 { + position: relative; + left: 37.5%; } + .el-col-xl-10 { + width: 41.66667%; } + .el-col-xl-offset-10 { + margin-left: 41.66667%; } + .el-col-xl-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xl-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xl-11 { + width: 45.83333%; } + .el-col-xl-offset-11 { + margin-left: 45.83333%; } + .el-col-xl-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xl-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xl-12 { + width: 50%; } + .el-col-xl-offset-12 { + margin-left: 50%; } + .el-col-xl-pull-12 { + position: relative; + right: 50%; } + .el-col-xl-push-12 { + position: relative; + left: 50%; } + .el-col-xl-13 { + width: 54.16667%; } + .el-col-xl-offset-13 { + margin-left: 54.16667%; } + .el-col-xl-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xl-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xl-14 { + width: 58.33333%; } + .el-col-xl-offset-14 { + margin-left: 58.33333%; } + .el-col-xl-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xl-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xl-15 { + width: 62.5%; } + .el-col-xl-offset-15 { + margin-left: 62.5%; } + .el-col-xl-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xl-push-15 { + position: relative; + left: 62.5%; } + .el-col-xl-16 { + width: 66.66667%; } + .el-col-xl-offset-16 { + margin-left: 66.66667%; } + .el-col-xl-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xl-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xl-17 { + width: 70.83333%; } + .el-col-xl-offset-17 { + margin-left: 70.83333%; } + .el-col-xl-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xl-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xl-18 { + width: 75%; } + .el-col-xl-offset-18 { + margin-left: 75%; } + .el-col-xl-pull-18 { + position: relative; + right: 75%; } + .el-col-xl-push-18 { + position: relative; + left: 75%; } + .el-col-xl-19 { + width: 79.16667%; } + .el-col-xl-offset-19 { + margin-left: 79.16667%; } + .el-col-xl-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xl-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xl-20 { + width: 83.33333%; } + .el-col-xl-offset-20 { + margin-left: 83.33333%; } + .el-col-xl-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xl-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xl-21 { + width: 87.5%; } + .el-col-xl-offset-21 { + margin-left: 87.5%; } + .el-col-xl-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xl-push-21 { + position: relative; + left: 87.5%; } + .el-col-xl-22 { + width: 91.66667%; } + .el-col-xl-offset-22 { + margin-left: 91.66667%; } + .el-col-xl-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xl-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xl-23 { + width: 95.83333%; } + .el-col-xl-offset-23 { + margin-left: 95.83333%; } + .el-col-xl-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xl-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xl-24 { + width: 100%; } + .el-col-xl-offset-24 { + margin-left: 100%; } + .el-col-xl-pull-24 { + position: relative; + right: 100%; } + .el-col-xl-push-24 { + position: relative; + left: 100%; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/collapse-item.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/collapse-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/collapse.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/collapse.css new file mode 100644 index 00000000..2a9cd5eb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/collapse.css @@ -0,0 +1,543 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-collapse { + border-top: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item.is-disabled .el-collapse-item__header { + color: #bbb; + cursor: not-allowed; } + +.el-collapse-item__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 48px; + line-height: 48px; + background-color: #FFFFFF; + color: #303133; + cursor: pointer; + border-bottom: 1px solid #EBEEF5; + font-size: 13px; + font-weight: 500; + -webkit-transition: border-bottom-color .3s; + transition: border-bottom-color .3s; + outline: none; } + .el-collapse-item__arrow { + margin: 0 8px 0 auto; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-weight: 300; } + .el-collapse-item__arrow.is-active { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-collapse-item__header.focusing:focus:not(:hover) { + color: #409EFF; } + .el-collapse-item__header.is-active { + border-bottom-color: transparent; } + +.el-collapse-item__wrap { + will-change: height; + background-color: #FFFFFF; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item__content { + padding-bottom: 25px; + font-size: 13px; + color: #303133; + line-height: 1.769230769230769; } + +.el-collapse-item:last-child { + margin-bottom: -1px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/color-picker.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/color-picker.css new file mode 100644 index 00000000..f7490856 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/color-picker.css @@ -0,0 +1,545 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-color-predefine { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 12px; + margin-top: 8px; + width: 280px; } + .el-color-predefine__colors { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-color-predefine__color-selector { + margin: 0 0 8px 8px; + width: 20px; + height: 20px; + border-radius: 4px; + cursor: pointer; } + .el-color-predefine__color-selector:nth-child(10n + 1) { + margin-left: 0; } + .el-color-predefine__color-selector.selected { + -webkit-box-shadow: 0 0 3px 2px #409EFF; + box-shadow: 0 0 3px 2px #409EFF; } + .el-color-predefine__color-selector > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 100%; + border-radius: 3px; } + .el-color-predefine__color-selector.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + +.el-color-hue-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background-color: #f00; + padding: 0 2px; } + .el-color-hue-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + height: 100%; } + .el-color-hue-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-hue-slider.is-vertical { + width: 12px; + height: 180px; + padding: 2px 0; } + .el-color-hue-slider.is-vertical .el-color-hue-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to bottom, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); } + .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-svpanel { + position: relative; + width: 280px; + height: 180px; } + .el-color-svpanel__white, .el-color-svpanel__black { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; } + .el-color-svpanel__white { + background: -webkit-gradient(linear, left top, right top, from(#fff), to(rgba(255, 255, 255, 0))); + background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0)); } + .el-color-svpanel__black { + background: -webkit-gradient(linear, left bottom, left top, from(#000), to(rgba(0, 0, 0, 0))); + background: linear-gradient(to top, #000, rgba(0, 0, 0, 0)); } + .el-color-svpanel__cursor { + position: absolute; } + .el-color-svpanel__cursor > div { + cursor: head; + width: 4px; + height: 4px; + -webkit-box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + border-radius: 50%; + -webkit-transform: translate(-2px, -2px); + transform: translate(-2px, -2px); } + +.el-color-alpha-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-alpha-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, white 100%); + height: 100%; } + .el-color-alpha-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-alpha-slider.is-vertical { + width: 20px; + height: 180px; } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, white 100%); } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-dropdown { + width: 300px; } + .el-color-dropdown__main-wrapper { + margin-bottom: 6px; } + .el-color-dropdown__main-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-color-dropdown__btns { + margin-top: 6px; + text-align: right; } + .el-color-dropdown__value { + float: left; + line-height: 26px; + font-size: 12px; + color: #000000; + width: 160px; } + .el-color-dropdown__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-color-dropdown__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-color-dropdown__btn:hover { + color: #409EFF; + border-color: #409EFF; } + .el-color-dropdown__link-btn { + cursor: pointer; + color: #409EFF; + text-decoration: none; + padding: 15px; + font-size: 12px; } + .el-color-dropdown__link-btn:hover { + color: tint(#409EFF, 20%); } + +.el-color-picker { + display: inline-block; + position: relative; + line-height: normal; + height: 40px; } + .el-color-picker.is-disabled .el-color-picker__trigger { + cursor: not-allowed; } + .el-color-picker--medium { + height: 36px; } + .el-color-picker--medium .el-color-picker__trigger { + height: 36px; + width: 36px; } + .el-color-picker--medium .el-color-picker__mask { + height: 34px; + width: 34px; } + .el-color-picker--small { + height: 32px; } + .el-color-picker--small .el-color-picker__trigger { + height: 32px; + width: 32px; } + .el-color-picker--small .el-color-picker__mask { + height: 30px; + width: 30px; } + .el-color-picker--small .el-color-picker__icon, + .el-color-picker--small .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker--mini { + height: 28px; } + .el-color-picker--mini .el-color-picker__trigger { + height: 28px; + width: 28px; } + .el-color-picker--mini .el-color-picker__mask { + height: 26px; + width: 26px; } + .el-color-picker--mini .el-color-picker__icon, + .el-color-picker--mini .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker__mask { + height: 38px; + width: 38px; + border-radius: 4px; + position: absolute; + top: 1px; + left: 1px; + z-index: 1; + cursor: not-allowed; + background-color: rgba(255, 255, 255, 0.7); } + .el-color-picker__trigger { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; + width: 40px; + padding: 4px; + border: 1px solid #e6e6e6; + border-radius: 4px; + font-size: 0; + position: relative; + cursor: pointer; } + .el-color-picker__color { + position: relative; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #999; + border-radius: 2px; + width: 100%; + height: 100%; + text-align: center; } + .el-color-picker__color.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-picker__color-inner { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; } + .el-color-picker__empty { + font-size: 12px; + color: #999; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); } + .el-color-picker__icon { + display: inline-block; + position: absolute; + width: 100%; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); + color: #FFFFFF; + text-align: center; + font-size: 12px; } + .el-color-picker__panel { + position: absolute; + z-index: 10; + padding: 6px; + -webkit-box-sizing: content-box; + box-sizing: content-box; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/container.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/container.css new file mode 100644 index 00000000..d6418086 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/container.css @@ -0,0 +1,151 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + min-width: 0; } + .el-container.is-vertical { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/date-picker.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/date-picker.css new file mode 100644 index 00000000..e9c086c1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/date-picker.css @@ -0,0 +1,3698 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-date-table { + font-size: 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-date-table.is-week-mode .el-date-table__row:hover div { + background-color: #F2F6FC; } + .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover { + color: #606266; } + .el-date-table.is-week-mode .el-date-table__row:hover td:first-child div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row:hover td:last-child div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row.current div { + background-color: #F2F6FC; } + .el-date-table td { + width: 32px; + height: 30px; + padding: 4px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + cursor: pointer; + position: relative; } + .el-date-table td div { + height: 30px; + padding: 3px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-table td span { + width: 24px; + height: 24px; + display: block; + margin: 0 auto; + line-height: 24px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + border-radius: 50%; } + .el-date-table td.next-month, .el-date-table td.prev-month { + color: #C0C4CC; } + .el-date-table td.today { + position: relative; } + .el-date-table td.today span { + color: #409EFF; + font-weight: bold; } + .el-date-table td.today.start-date span, + .el-date-table td.today.end-date span { + color: #FFFFFF; } + .el-date-table td.available:hover { + color: #409EFF; } + .el-date-table td.in-range div { + background-color: #F2F6FC; } + .el-date-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-date-table td.current:not(.disabled) span { + color: #FFFFFF; + background-color: #409EFF; } + .el-date-table td.start-date div, + .el-date-table td.end-date div { + color: #FFFFFF; } + .el-date-table td.start-date span, + .el-date-table td.end-date span { + background-color: #409EFF; } + .el-date-table td.start-date div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table td.end-date div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table td.disabled div { + background-color: #F5F7FA; + opacity: 1; + cursor: not-allowed; + color: #C0C4CC; } + .el-date-table td.selected div { + margin-left: 5px; + margin-right: 5px; + background-color: #F2F6FC; + border-radius: 15px; } + .el-date-table td.selected div:hover { + background-color: #F2F6FC; } + .el-date-table td.selected span { + background-color: #409EFF; + color: #FFFFFF; + border-radius: 15px; } + .el-date-table td.week { + font-size: 80%; + color: #606266; } + .el-date-table th { + padding: 5px; + color: #606266; + font-weight: 400; + border-bottom: solid 1px #EBEEF5; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-month-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-month-table td { + text-align: center; + padding: 8px 0px; + cursor: pointer; } + .el-month-table td div { + height: 48px; + padding: 6px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-month-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-month-table td.today.start-date .cell, + .el-month-table td.today.end-date .cell { + color: #FFFFFF; } + .el-month-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-month-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-month-table td .cell { + width: 60px; + height: 36px; + display: block; + line-height: 36px; + color: #606266; + margin: 0 auto; + border-radius: 18px; } + .el-month-table td .cell:hover { + color: #409EFF; } + .el-month-table td.in-range div { + background-color: #F2F6FC; } + .el-month-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-month-table td.start-date div, + .el-month-table td.end-date div { + color: #FFFFFF; } + .el-month-table td.start-date .cell, + .el-month-table td.end-date .cell { + color: #FFFFFF; + background-color: #409EFF; } + .el-month-table td.start-date div { + border-top-left-radius: 24px; + border-bottom-left-radius: 24px; } + .el-month-table td.end-date div { + border-top-right-radius: 24px; + border-bottom-right-radius: 24px; } + .el-month-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-year-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-year-table .el-icon { + color: #303133; } + .el-year-table td { + text-align: center; + padding: 20px 3px; + cursor: pointer; } + .el-year-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-year-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-year-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-year-table td .cell { + width: 48px; + height: 32px; + display: block; + line-height: 32px; + color: #606266; + margin: 0 auto; } + .el-year-table td .cell:hover { + color: #409EFF; } + .el-year-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-date-range-picker { + width: 646px; } + .el-date-range-picker.has-sidebar { + width: 756px; } + .el-date-range-picker table { + table-layout: fixed; + width: 100%; } + .el-date-range-picker .el-picker-panel__body { + min-width: 513px; } + .el-date-range-picker .el-picker-panel__content { + margin: 0; } + .el-date-range-picker__header { + position: relative; + text-align: center; + height: 28px; } + .el-date-range-picker__header [class*=arrow-left] { + float: left; } + .el-date-range-picker__header [class*=arrow-right] { + float: right; } + .el-date-range-picker__header div { + font-size: 16px; + font-weight: 500; + margin-right: 50px; } + .el-date-range-picker__content { + float: left; + width: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 16px; } + .el-date-range-picker__content.is-left { + border-right: 1px solid #e4e4e4; } + .el-date-range-picker__content .el-date-range-picker__header div { + margin-left: 50px; + margin-right: 50px; } + .el-date-range-picker__editors-wrap { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: table-cell; } + .el-date-range-picker__editors-wrap.is-right { + text-align: right; } + .el-date-range-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-range-picker__time-header > .el-icon-arrow-right { + font-size: 20px; + vertical-align: middle; + display: table-cell; + color: #303133; } + .el-date-range-picker__time-picker-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-range-picker__time-picker-wrap .el-picker-panel { + position: absolute; + top: 13px; + right: 0; + z-index: 1; + background: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dialog.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dialog.css new file mode 100644 index 00000000..56697226 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dialog.css @@ -0,0 +1,651 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@-webkit-keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@-webkit-keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +.el-dialog { + position: relative; + margin: 0 auto 50px; + background: #FFFFFF; + border-radius: 2px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 50%; } + .el-dialog.is-fullscreen { + width: 100%; + margin-top: 0; + margin-bottom: 0; + height: 100%; + overflow: auto; } + .el-dialog__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: auto; + margin: 0; } + .el-dialog__header { + padding: 20px; + padding-bottom: 10px; } + .el-dialog__headerbtn { + position: absolute; + top: 20px; + right: 20px; + padding: 0; + background: transparent; + border: none; + outline: none; + cursor: pointer; + font-size: 16px; } + .el-dialog__headerbtn .el-dialog__close { + color: #909399; } + .el-dialog__headerbtn:focus .el-dialog__close, .el-dialog__headerbtn:hover .el-dialog__close { + color: #409EFF; } + .el-dialog__title { + line-height: 24px; + font-size: 18px; + color: #303133; } + .el-dialog__body { + padding: 30px 20px; + color: #606266; + font-size: 14px; + word-break: break-all; } + .el-dialog__footer { + padding: 20px; + padding-top: 10px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-dialog--center { + text-align: center; } + .el-dialog--center .el-dialog__body { + text-align: initial; + padding: 25px 25px 30px; } + .el-dialog--center .el-dialog__footer { + text-align: inherit; } + +.dialog-fade-enter-active { + -webkit-animation: dialog-fade-in .3s; + animation: dialog-fade-in .3s; } + +.dialog-fade-leave-active { + -webkit-animation: dialog-fade-out .3s; + animation: dialog-fade-out .3s; } + +@-webkit-keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/display.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/display.css new file mode 100644 index 00000000..fdd5fa97 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/display.css @@ -0,0 +1,293 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +@media only screen and (max-width: 767px) { + .hidden-xs-only { + display: none !important; } } + +@media only screen and (min-width: 768px) { + .hidden-sm-and-up { + display: none !important; } } + +@media only screen and (min-width: 768px) and (max-width: 991px) { + .hidden-sm-only { + display: none !important; } } + +@media only screen and (max-width: 991px) { + .hidden-sm-and-down { + display: none !important; } } + +@media only screen and (min-width: 992px) { + .hidden-md-and-up { + display: none !important; } } + +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .hidden-md-only { + display: none !important; } } + +@media only screen and (max-width: 1199px) { + .hidden-md-and-down { + display: none !important; } } + +@media only screen and (min-width: 1200px) { + .hidden-lg-and-up { + display: none !important; } } + +@media only screen and (min-width: 1200px) and (max-width: 1919px) { + .hidden-lg-only { + display: none !important; } } + +@media only screen and (max-width: 1919px) { + .hidden-lg-and-down { + display: none !important; } } + +@media only screen and (min-width: 1920px) { + .hidden-xl-only { + display: none !important; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/divider.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/divider.css new file mode 100644 index 00000000..1896251b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/divider.css @@ -0,0 +1,284 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-divider { + background-color: #DCDFE6; + position: relative; } + .el-divider--horizontal { + display: block; + height: 1px; + width: 100%; + margin: 24px 0; } + .el-divider--vertical { + display: inline-block; + width: 1px; + height: 1em; + margin: 0 8px; + vertical-align: middle; + position: relative; } + .el-divider__text { + position: absolute; + background-color: #FFFFFF; + padding: 0 20px; + font-weight: 500; + color: #303133; + font-size: 14px; } + .el-divider__text.is-left { + left: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-divider__text.is-center { + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + .el-divider__text.is-right { + right: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/drawer.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/drawer.css new file mode 100644 index 00000000..da742d4c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/drawer.css @@ -0,0 +1,503 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@-webkit-keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } +@keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +@-webkit-keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@-webkit-keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@-webkit-keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@-webkit-keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +@keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +.el-drawer { + position: absolute; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + overflow: hidden; } + .el-drawer.rtl { + -webkit-animation: rtl-drawer-out 0.3s; + animation: rtl-drawer-out 0.3s; } + .el-drawer__open .el-drawer.rtl { + -webkit-animation: rtl-drawer-in 0.3s 1ms; + animation: rtl-drawer-in 0.3s 1ms; } + .el-drawer.ltr { + -webkit-animation: ltr-drawer-out 0.3s; + animation: ltr-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ltr { + -webkit-animation: ltr-drawer-in 0.3s 1ms; + animation: ltr-drawer-in 0.3s 1ms; } + .el-drawer.ttb { + -webkit-animation: ttb-drawer-out 0.3s; + animation: ttb-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ttb { + -webkit-animation: ttb-drawer-in 0.3s 1ms; + animation: ttb-drawer-in 0.3s 1ms; } + .el-drawer.btt { + -webkit-animation: btt-drawer-out 0.3s; + animation: btt-drawer-out 0.3s; } + .el-drawer__open .el-drawer.btt { + -webkit-animation: btt-drawer-in 0.3s 1ms; + animation: btt-drawer-in 0.3s 1ms; } + .el-drawer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + margin: 0; } + .el-drawer__header { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #72767b; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-bottom: 32px; + padding: 20px; + padding-bottom: 0; } + .el-drawer__header > :first-child { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__title { + margin: 0; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + line-height: inherit; + font-size: 1rem; } + .el-drawer__close-btn { + border: none; + cursor: pointer; + font-size: 20px; + color: inherit; + background-color: transparent; } + .el-drawer__body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__body > * { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-drawer.ltr, .el-drawer.rtl { + height: 100%; + top: 0; + bottom: 0; } + .el-drawer.ttb, .el-drawer.btt { + width: 100%; + left: 0; + right: 0; } + .el-drawer.ltr { + left: 0; } + .el-drawer.rtl { + right: 0; } + .el-drawer.ttb { + top: 0; } + .el-drawer.btt { + bottom: 0; } + +.el-drawer__container { + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + height: 100%; + width: 100%; } + +.el-drawer-fade-enter-active { + -webkit-animation: el-drawer-fade-in .3s; + animation: el-drawer-fade-in .3s; } + +.el-drawer-fade-leave-active { + animation: el-drawer-fade-in .3s reverse; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dropdown-item.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dropdown-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dropdown-menu.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dropdown-menu.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dropdown.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dropdown.css new file mode 100644 index 00000000..efe9d7ab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/dropdown.css @@ -0,0 +1,1451 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-dropdown { + display: inline-block; + position: relative; + color: #606266; + font-size: 14px; } + .el-dropdown .el-button-group { + display: block; } + .el-dropdown .el-button-group .el-button { + float: none; } + .el-dropdown .el-dropdown__caret-button { + padding-left: 5px; + padding-right: 5px; + position: relative; + border-left: none; } + .el-dropdown .el-dropdown__caret-button::before { + content: ''; + position: absolute; + display: block; + width: 1px; + top: 5px; + bottom: 5px; + left: 0; + background: rgba(255, 255, 255, 0.5); } + .el-dropdown .el-dropdown__caret-button.el-button--default::before { + background: rgba(220, 223, 230, 0.5); } + .el-dropdown .el-dropdown__caret-button:hover::before { + top: 0; + bottom: 0; } + .el-dropdown .el-dropdown__caret-button .el-dropdown__icon { + padding-left: 0; } + .el-dropdown__icon { + font-size: 12px; + margin: 0 3px; } + .el-dropdown .el-dropdown-selfdefine:focus:active, .el-dropdown .el-dropdown-selfdefine:focus:not(.focusing) { + outline-width: 0; } + +.el-dropdown-menu { + position: absolute; + top: 0; + left: 0; + z-index: 10; + padding: 10px 0; + margin: 5px 0; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-dropdown-menu__item { + list-style: none; + line-height: 36px; + padding: 0 20px; + margin: 0; + font-size: 14px; + color: #606266; + cursor: pointer; + outline: none; } + .el-dropdown-menu__item:not(.is-disabled):hover, .el-dropdown-menu__item:focus { + background-color: #409EFF; + color: #FFFFFF; } + .el-dropdown-menu__item i { + margin-right: 5px; } + .el-dropdown-menu__item--divided { + position: relative; + margin-top: 6px; + border-top: 1px solid #EBEEF5; } + .el-dropdown-menu__item--divided:before { + content: ''; + height: 6px; + display: block; + margin: 0 -20px; + background-color: #FFFFFF; } + .el-dropdown-menu__item.is-disabled { + cursor: default; + color: #bbb; + pointer-events: none; } + .el-dropdown-menu--medium { + padding: 6px 0; } + .el-dropdown-menu--medium .el-dropdown-menu__item { + line-height: 30px; + padding: 0 17px; + font-size: 14px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 6px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 6px; + margin: 0 -17px; } + .el-dropdown-menu--small { + padding: 6px 0; } + .el-dropdown-menu--small .el-dropdown-menu__item { + line-height: 27px; + padding: 0 15px; + font-size: 13px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 4px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 4px; + margin: 0 -15px; } + .el-dropdown-menu--mini { + padding: 3px 0; } + .el-dropdown-menu--mini .el-dropdown-menu__item { + line-height: 24px; + padding: 0 10px; + font-size: 12px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 3px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 3px; + margin: 0 -10px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-blue.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-blue.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-blue.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-dark.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-dark.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-dark.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-green.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-green.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-green.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-light.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-light.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-light.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-orange.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-orange.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables-orange.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables.css new file mode 100644 index 00000000..c38c578c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/element-variables.css @@ -0,0 +1,120 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/fonts/element-icons.ttf b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/fonts/element-icons.ttf new file mode 100644 index 00000000..91b74de3 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/fonts/element-icons.ttf differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/fonts/element-icons.woff b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/fonts/element-icons.woff new file mode 100644 index 00000000..02b9a253 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/fonts/element-icons.woff differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/footer.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/footer.css new file mode 100644 index 00000000..36cf5cf8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/footer.css @@ -0,0 +1,256 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-footer { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/form-item.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/form-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/form.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/form.css new file mode 100644 index 00000000..8644193c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/form.css @@ -0,0 +1,364 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-form--label-left .el-form-item__label { + text-align: left; } + +.el-form--label-top .el-form-item__label { + float: none; + display: inline-block; + text-align: left; + padding: 0 0 10px 0; } + +.el-form--inline .el-form-item { + display: inline-block; + margin-right: 10px; + vertical-align: top; } + +.el-form--inline .el-form-item__label { + float: none; + display: inline-block; } + +.el-form--inline .el-form-item__content { + display: inline-block; + vertical-align: top; } + +.el-form--inline.el-form--label-top .el-form-item__content { + display: block; } + +.el-form-item { + margin-bottom: 22px; } + .el-form-item::before, + .el-form-item::after { + display: table; + content: ""; } + .el-form-item::after { + clear: both; } + .el-form-item .el-form-item { + margin-bottom: 0; } + .el-form-item .el-input__validateIcon { + display: none; } + .el-form-item--medium .el-form-item__label { + line-height: 36px; } + .el-form-item--medium .el-form-item__content { + line-height: 36px; } + .el-form-item--small .el-form-item__label { + line-height: 32px; } + .el-form-item--small .el-form-item__content { + line-height: 32px; } + .el-form-item--small.el-form-item { + margin-bottom: 18px; } + .el-form-item--small .el-form-item__error { + padding-top: 2px; } + .el-form-item--mini .el-form-item__label { + line-height: 28px; } + .el-form-item--mini .el-form-item__content { + line-height: 28px; } + .el-form-item--mini.el-form-item { + margin-bottom: 18px; } + .el-form-item--mini .el-form-item__error { + padding-top: 1px; } + .el-form-item__label-wrap { + float: left; } + .el-form-item__label-wrap .el-form-item__label { + display: inline-block; + float: none; } + .el-form-item__label { + text-align: right; + vertical-align: middle; + float: left; + font-size: 14px; + color: #606266; + line-height: 40px; + padding: 0 12px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-form-item__content { + line-height: 40px; + position: relative; + font-size: 14px; } + .el-form-item__content::before, + .el-form-item__content::after { + display: table; + content: ""; } + .el-form-item__content::after { + clear: both; } + .el-form-item__content .el-input-group { + vertical-align: top; } + .el-form-item__error { + color: #F56C6C; + font-size: 12px; + line-height: 1; + padding-top: 4px; + position: absolute; + top: 100%; + left: 0; } + .el-form-item__error--inline { + position: relative; + top: auto; + left: auto; + display: inline-block; + margin-left: 10px; } + .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before, + .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap > .el-form-item__label:before { + content: '*'; + color: #F56C6C; + margin-right: 4px; } + .el-form-item.is-error .el-input__inner, .el-form-item.is-error .el-input__inner:focus, + .el-form-item.is-error .el-textarea__inner, + .el-form-item.is-error .el-textarea__inner:focus { + border-color: #F56C6C; } + .el-form-item.is-error .el-input-group__append .el-input__inner, + .el-form-item.is-error .el-input-group__prepend .el-input__inner { + border-color: transparent; } + .el-form-item.is-error .el-input__validateIcon { + color: #F56C6C; } + .el-form-item--feedback .el-input__validateIcon { + display: inline-block; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/header.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/header.css new file mode 100644 index 00000000..ec740ca6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/header.css @@ -0,0 +1,256 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-header { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/icon.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/icon.css new file mode 100644 index 00000000..8bc8c6b5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/icon.css @@ -0,0 +1,1008 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@font-face { + font-family: 'element-icons'; + src: url("fonts/element-icons.woff") format("woff"), url("fonts/element-icons.ttf") format("truetype"); + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + font-weight: normal; + font-display: "auto"; + font-style: normal; } + +[class^="el-icon-"], [class*=" el-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'element-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: baseline; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.el-icon-ice-cream-round:before { + content: "\e6a0"; } + +.el-icon-ice-cream-square:before { + content: "\e6a3"; } + +.el-icon-lollipop:before { + content: "\e6a4"; } + +.el-icon-potato-strips:before { + content: "\e6a5"; } + +.el-icon-milk-tea:before { + content: "\e6a6"; } + +.el-icon-ice-drink:before { + content: "\e6a7"; } + +.el-icon-ice-tea:before { + content: "\e6a9"; } + +.el-icon-coffee:before { + content: "\e6aa"; } + +.el-icon-orange:before { + content: "\e6ab"; } + +.el-icon-pear:before { + content: "\e6ac"; } + +.el-icon-apple:before { + content: "\e6ad"; } + +.el-icon-cherry:before { + content: "\e6ae"; } + +.el-icon-watermelon:before { + content: "\e6af"; } + +.el-icon-grape:before { + content: "\e6b0"; } + +.el-icon-refrigerator:before { + content: "\e6b1"; } + +.el-icon-goblet-square-full:before { + content: "\e6b2"; } + +.el-icon-goblet-square:before { + content: "\e6b3"; } + +.el-icon-goblet-full:before { + content: "\e6b4"; } + +.el-icon-goblet:before { + content: "\e6b5"; } + +.el-icon-cold-drink:before { + content: "\e6b6"; } + +.el-icon-coffee-cup:before { + content: "\e6b8"; } + +.el-icon-water-cup:before { + content: "\e6b9"; } + +.el-icon-hot-water:before { + content: "\e6ba"; } + +.el-icon-ice-cream:before { + content: "\e6bb"; } + +.el-icon-dessert:before { + content: "\e6bc"; } + +.el-icon-sugar:before { + content: "\e6bd"; } + +.el-icon-tableware:before { + content: "\e6be"; } + +.el-icon-burger:before { + content: "\e6bf"; } + +.el-icon-knife-fork:before { + content: "\e6c1"; } + +.el-icon-fork-spoon:before { + content: "\e6c2"; } + +.el-icon-chicken:before { + content: "\e6c3"; } + +.el-icon-food:before { + content: "\e6c4"; } + +.el-icon-dish-1:before { + content: "\e6c5"; } + +.el-icon-dish:before { + content: "\e6c6"; } + +.el-icon-moon-night:before { + content: "\e6ee"; } + +.el-icon-moon:before { + content: "\e6f0"; } + +.el-icon-cloudy-and-sunny:before { + content: "\e6f1"; } + +.el-icon-partly-cloudy:before { + content: "\e6f2"; } + +.el-icon-cloudy:before { + content: "\e6f3"; } + +.el-icon-sunny:before { + content: "\e6f6"; } + +.el-icon-sunset:before { + content: "\e6f7"; } + +.el-icon-sunrise-1:before { + content: "\e6f8"; } + +.el-icon-sunrise:before { + content: "\e6f9"; } + +.el-icon-heavy-rain:before { + content: "\e6fa"; } + +.el-icon-lightning:before { + content: "\e6fb"; } + +.el-icon-light-rain:before { + content: "\e6fc"; } + +.el-icon-wind-power:before { + content: "\e6fd"; } + +.el-icon-baseball:before { + content: "\e712"; } + +.el-icon-soccer:before { + content: "\e713"; } + +.el-icon-football:before { + content: "\e715"; } + +.el-icon-basketball:before { + content: "\e716"; } + +.el-icon-ship:before { + content: "\e73f"; } + +.el-icon-truck:before { + content: "\e740"; } + +.el-icon-bicycle:before { + content: "\e741"; } + +.el-icon-mobile-phone:before { + content: "\e6d3"; } + +.el-icon-service:before { + content: "\e6d4"; } + +.el-icon-key:before { + content: "\e6e2"; } + +.el-icon-unlock:before { + content: "\e6e4"; } + +.el-icon-lock:before { + content: "\e6e5"; } + +.el-icon-watch:before { + content: "\e6fe"; } + +.el-icon-watch-1:before { + content: "\e6ff"; } + +.el-icon-timer:before { + content: "\e702"; } + +.el-icon-alarm-clock:before { + content: "\e703"; } + +.el-icon-map-location:before { + content: "\e704"; } + +.el-icon-delete-location:before { + content: "\e705"; } + +.el-icon-add-location:before { + content: "\e706"; } + +.el-icon-location-information:before { + content: "\e707"; } + +.el-icon-location-outline:before { + content: "\e708"; } + +.el-icon-location:before { + content: "\e79e"; } + +.el-icon-place:before { + content: "\e709"; } + +.el-icon-discover:before { + content: "\e70a"; } + +.el-icon-first-aid-kit:before { + content: "\e70b"; } + +.el-icon-trophy-1:before { + content: "\e70c"; } + +.el-icon-trophy:before { + content: "\e70d"; } + +.el-icon-medal:before { + content: "\e70e"; } + +.el-icon-medal-1:before { + content: "\e70f"; } + +.el-icon-stopwatch:before { + content: "\e710"; } + +.el-icon-mic:before { + content: "\e711"; } + +.el-icon-copy-document:before { + content: "\e718"; } + +.el-icon-full-screen:before { + content: "\e719"; } + +.el-icon-switch-button:before { + content: "\e71b"; } + +.el-icon-aim:before { + content: "\e71c"; } + +.el-icon-crop:before { + content: "\e71d"; } + +.el-icon-odometer:before { + content: "\e71e"; } + +.el-icon-time:before { + content: "\e71f"; } + +.el-icon-bangzhu:before { + content: "\e724"; } + +.el-icon-close-notification:before { + content: "\e726"; } + +.el-icon-microphone:before { + content: "\e727"; } + +.el-icon-turn-off-microphone:before { + content: "\e728"; } + +.el-icon-position:before { + content: "\e729"; } + +.el-icon-postcard:before { + content: "\e72a"; } + +.el-icon-message:before { + content: "\e72b"; } + +.el-icon-chat-line-square:before { + content: "\e72d"; } + +.el-icon-chat-dot-square:before { + content: "\e72e"; } + +.el-icon-chat-dot-round:before { + content: "\e72f"; } + +.el-icon-chat-square:before { + content: "\e730"; } + +.el-icon-chat-line-round:before { + content: "\e731"; } + +.el-icon-chat-round:before { + content: "\e732"; } + +.el-icon-set-up:before { + content: "\e733"; } + +.el-icon-turn-off:before { + content: "\e734"; } + +.el-icon-open:before { + content: "\e735"; } + +.el-icon-connection:before { + content: "\e736"; } + +.el-icon-link:before { + content: "\e737"; } + +.el-icon-cpu:before { + content: "\e738"; } + +.el-icon-thumb:before { + content: "\e739"; } + +.el-icon-female:before { + content: "\e73a"; } + +.el-icon-male:before { + content: "\e73b"; } + +.el-icon-guide:before { + content: "\e73c"; } + +.el-icon-news:before { + content: "\e73e"; } + +.el-icon-price-tag:before { + content: "\e744"; } + +.el-icon-discount:before { + content: "\e745"; } + +.el-icon-wallet:before { + content: "\e747"; } + +.el-icon-coin:before { + content: "\e748"; } + +.el-icon-money:before { + content: "\e749"; } + +.el-icon-bank-card:before { + content: "\e74a"; } + +.el-icon-box:before { + content: "\e74b"; } + +.el-icon-present:before { + content: "\e74c"; } + +.el-icon-sell:before { + content: "\e6d5"; } + +.el-icon-sold-out:before { + content: "\e6d6"; } + +.el-icon-shopping-bag-2:before { + content: "\e74d"; } + +.el-icon-shopping-bag-1:before { + content: "\e74e"; } + +.el-icon-shopping-cart-2:before { + content: "\e74f"; } + +.el-icon-shopping-cart-1:before { + content: "\e750"; } + +.el-icon-shopping-cart-full:before { + content: "\e751"; } + +.el-icon-smoking:before { + content: "\e752"; } + +.el-icon-no-smoking:before { + content: "\e753"; } + +.el-icon-house:before { + content: "\e754"; } + +.el-icon-table-lamp:before { + content: "\e755"; } + +.el-icon-school:before { + content: "\e756"; } + +.el-icon-office-building:before { + content: "\e757"; } + +.el-icon-toilet-paper:before { + content: "\e758"; } + +.el-icon-notebook-2:before { + content: "\e759"; } + +.el-icon-notebook-1:before { + content: "\e75a"; } + +.el-icon-files:before { + content: "\e75b"; } + +.el-icon-collection:before { + content: "\e75c"; } + +.el-icon-receiving:before { + content: "\e75d"; } + +.el-icon-suitcase-1:before { + content: "\e760"; } + +.el-icon-suitcase:before { + content: "\e761"; } + +.el-icon-film:before { + content: "\e763"; } + +.el-icon-collection-tag:before { + content: "\e765"; } + +.el-icon-data-analysis:before { + content: "\e766"; } + +.el-icon-pie-chart:before { + content: "\e767"; } + +.el-icon-data-board:before { + content: "\e768"; } + +.el-icon-data-line:before { + content: "\e76d"; } + +.el-icon-reading:before { + content: "\e769"; } + +.el-icon-magic-stick:before { + content: "\e76a"; } + +.el-icon-coordinate:before { + content: "\e76b"; } + +.el-icon-mouse:before { + content: "\e76c"; } + +.el-icon-brush:before { + content: "\e76e"; } + +.el-icon-headset:before { + content: "\e76f"; } + +.el-icon-umbrella:before { + content: "\e770"; } + +.el-icon-scissors:before { + content: "\e771"; } + +.el-icon-mobile:before { + content: "\e773"; } + +.el-icon-attract:before { + content: "\e774"; } + +.el-icon-monitor:before { + content: "\e775"; } + +.el-icon-search:before { + content: "\e778"; } + +.el-icon-takeaway-box:before { + content: "\e77a"; } + +.el-icon-paperclip:before { + content: "\e77d"; } + +.el-icon-printer:before { + content: "\e77e"; } + +.el-icon-document-add:before { + content: "\e782"; } + +.el-icon-document:before { + content: "\e785"; } + +.el-icon-document-checked:before { + content: "\e786"; } + +.el-icon-document-copy:before { + content: "\e787"; } + +.el-icon-document-delete:before { + content: "\e788"; } + +.el-icon-document-remove:before { + content: "\e789"; } + +.el-icon-tickets:before { + content: "\e78b"; } + +.el-icon-folder-checked:before { + content: "\e77f"; } + +.el-icon-folder-delete:before { + content: "\e780"; } + +.el-icon-folder-remove:before { + content: "\e781"; } + +.el-icon-folder-add:before { + content: "\e783"; } + +.el-icon-folder-opened:before { + content: "\e784"; } + +.el-icon-folder:before { + content: "\e78a"; } + +.el-icon-edit-outline:before { + content: "\e764"; } + +.el-icon-edit:before { + content: "\e78c"; } + +.el-icon-date:before { + content: "\e78e"; } + +.el-icon-c-scale-to-original:before { + content: "\e7c6"; } + +.el-icon-view:before { + content: "\e6ce"; } + +.el-icon-loading:before { + content: "\e6cf"; } + +.el-icon-rank:before { + content: "\e6d1"; } + +.el-icon-sort-down:before { + content: "\e7c4"; } + +.el-icon-sort-up:before { + content: "\e7c5"; } + +.el-icon-sort:before { + content: "\e6d2"; } + +.el-icon-finished:before { + content: "\e6cd"; } + +.el-icon-refresh-left:before { + content: "\e6c7"; } + +.el-icon-refresh-right:before { + content: "\e6c8"; } + +.el-icon-refresh:before { + content: "\e6d0"; } + +.el-icon-video-play:before { + content: "\e7c0"; } + +.el-icon-video-pause:before { + content: "\e7c1"; } + +.el-icon-d-arrow-right:before { + content: "\e6dc"; } + +.el-icon-d-arrow-left:before { + content: "\e6dd"; } + +.el-icon-arrow-up:before { + content: "\e6e1"; } + +.el-icon-arrow-down:before { + content: "\e6df"; } + +.el-icon-arrow-right:before { + content: "\e6e0"; } + +.el-icon-arrow-left:before { + content: "\e6de"; } + +.el-icon-top-right:before { + content: "\e6e7"; } + +.el-icon-top-left:before { + content: "\e6e8"; } + +.el-icon-top:before { + content: "\e6e6"; } + +.el-icon-bottom:before { + content: "\e6eb"; } + +.el-icon-right:before { + content: "\e6e9"; } + +.el-icon-back:before { + content: "\e6ea"; } + +.el-icon-bottom-right:before { + content: "\e6ec"; } + +.el-icon-bottom-left:before { + content: "\e6ed"; } + +.el-icon-caret-top:before { + content: "\e78f"; } + +.el-icon-caret-bottom:before { + content: "\e790"; } + +.el-icon-caret-right:before { + content: "\e791"; } + +.el-icon-caret-left:before { + content: "\e792"; } + +.el-icon-d-caret:before { + content: "\e79a"; } + +.el-icon-share:before { + content: "\e793"; } + +.el-icon-menu:before { + content: "\e798"; } + +.el-icon-s-grid:before { + content: "\e7a6"; } + +.el-icon-s-check:before { + content: "\e7a7"; } + +.el-icon-s-data:before { + content: "\e7a8"; } + +.el-icon-s-opportunity:before { + content: "\e7aa"; } + +.el-icon-s-custom:before { + content: "\e7ab"; } + +.el-icon-s-claim:before { + content: "\e7ad"; } + +.el-icon-s-finance:before { + content: "\e7ae"; } + +.el-icon-s-comment:before { + content: "\e7af"; } + +.el-icon-s-flag:before { + content: "\e7b0"; } + +.el-icon-s-marketing:before { + content: "\e7b1"; } + +.el-icon-s-shop:before { + content: "\e7b4"; } + +.el-icon-s-open:before { + content: "\e7b5"; } + +.el-icon-s-management:before { + content: "\e7b6"; } + +.el-icon-s-ticket:before { + content: "\e7b7"; } + +.el-icon-s-release:before { + content: "\e7b8"; } + +.el-icon-s-home:before { + content: "\e7b9"; } + +.el-icon-s-promotion:before { + content: "\e7ba"; } + +.el-icon-s-operation:before { + content: "\e7bb"; } + +.el-icon-s-unfold:before { + content: "\e7bc"; } + +.el-icon-s-fold:before { + content: "\e7a9"; } + +.el-icon-s-platform:before { + content: "\e7bd"; } + +.el-icon-s-order:before { + content: "\e7be"; } + +.el-icon-s-cooperation:before { + content: "\e7bf"; } + +.el-icon-bell:before { + content: "\e725"; } + +.el-icon-message-solid:before { + content: "\e799"; } + +.el-icon-video-camera:before { + content: "\e772"; } + +.el-icon-video-camera-solid:before { + content: "\e796"; } + +.el-icon-camera:before { + content: "\e779"; } + +.el-icon-camera-solid:before { + content: "\e79b"; } + +.el-icon-download:before { + content: "\e77c"; } + +.el-icon-upload2:before { + content: "\e77b"; } + +.el-icon-upload:before { + content: "\e7c3"; } + +.el-icon-picture-outline-round:before { + content: "\e75f"; } + +.el-icon-picture-outline:before { + content: "\e75e"; } + +.el-icon-picture:before { + content: "\e79f"; } + +.el-icon-close:before { + content: "\e6db"; } + +.el-icon-check:before { + content: "\e6da"; } + +.el-icon-plus:before { + content: "\e6d9"; } + +.el-icon-minus:before { + content: "\e6d8"; } + +.el-icon-help:before { + content: "\e73d"; } + +.el-icon-s-help:before { + content: "\e7b3"; } + +.el-icon-circle-close:before { + content: "\e78d"; } + +.el-icon-circle-check:before { + content: "\e720"; } + +.el-icon-circle-plus-outline:before { + content: "\e723"; } + +.el-icon-remove-outline:before { + content: "\e722"; } + +.el-icon-zoom-out:before { + content: "\e776"; } + +.el-icon-zoom-in:before { + content: "\e777"; } + +.el-icon-error:before { + content: "\e79d"; } + +.el-icon-success:before { + content: "\e79c"; } + +.el-icon-circle-plus:before { + content: "\e7a0"; } + +.el-icon-remove:before { + content: "\e7a2"; } + +.el-icon-info:before { + content: "\e7a1"; } + +.el-icon-question:before { + content: "\e7a4"; } + +.el-icon-warning-outline:before { + content: "\e6c9"; } + +.el-icon-warning:before { + content: "\e7a3"; } + +.el-icon-goods:before { + content: "\e7c2"; } + +.el-icon-s-goods:before { + content: "\e7b2"; } + +.el-icon-star-off:before { + content: "\e717"; } + +.el-icon-star-on:before { + content: "\e797"; } + +.el-icon-more-outline:before { + content: "\e6cc"; } + +.el-icon-more:before { + content: "\e794"; } + +.el-icon-phone-outline:before { + content: "\e6cb"; } + +.el-icon-phone:before { + content: "\e795"; } + +.el-icon-user:before { + content: "\e6e3"; } + +.el-icon-user-solid:before { + content: "\e7a5"; } + +.el-icon-setting:before { + content: "\e6ca"; } + +.el-icon-s-tools:before { + content: "\e7ac"; } + +.el-icon-delete:before { + content: "\e6d7"; } + +.el-icon-delete-solid:before { + content: "\e7c9"; } + +.el-icon-eleme:before { + content: "\e7c7"; } + +.el-icon-platform-eleme:before { + content: "\e7ca"; } + +.el-icon-loading { + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; } + +.el-icon--right { + margin-left: 5px; } + +.el-icon--left { + margin-right: 5px; } + +@-webkit-keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/image.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/image.css new file mode 100644 index 00000000..80973022 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/image.css @@ -0,0 +1,443 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-image__inner, .el-image__placeholder, .el-image__error { + width: 100%; + height: 100%; } + +.el-image { + position: relative; + display: inline-block; + overflow: hidden; } + .el-image__inner { + vertical-align: top; } + .el-image__inner--center { + position: relative; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + display: block; } + .el-image__placeholder { + background: #F5F7FA; } + .el-image__error { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 14px; + background: #F5F7FA; + color: #C0C4CC; + vertical-align: middle; } + .el-image__preview { + cursor: pointer; } + +.el-image-viewer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; } + +.el-image-viewer__btn { + position: absolute; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 50%; + opacity: .8; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.el-image-viewer__close { + top: 40px; + right: 40px; + width: 40px; + height: 40px; + font-size: 40px; } + +.el-image-viewer__canvas { + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-image-viewer__actions { + left: 50%; + bottom: 30px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: 282px; + height: 44px; + padding: 0 23px; + background-color: #606266; + border-color: #fff; + border-radius: 22px; } + .el-image-viewer__actions__inner { + width: 100%; + height: 100%; + text-align: justify; + cursor: default; + font-size: 23px; + color: #fff; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: distribute; + justify-content: space-around; } + +.el-image-viewer__prev { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + left: 40px; } + +.el-image-viewer__next { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + right: 40px; + text-indent: 2px; } + +.el-image-viewer__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + opacity: .5; + background: #000; } + +.viewer-fade-enter-active { + -webkit-animation: viewer-fade-in .3s; + animation: viewer-fade-in .3s; } + +.viewer-fade-leave-active { + -webkit-animation: viewer-fade-out .3s; + animation: viewer-fade-out .3s; } + +@-webkit-keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/index.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/index.css new file mode 100644 index 00000000..b34f94c4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/index.css @@ -0,0 +1,57046 @@ +@charset "UTF-8"; +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@font-face { + font-family: 'element-icons'; + src: url("fonts/element-icons.woff") format("woff"), url("fonts/element-icons.ttf") format("truetype"); + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + font-weight: normal; + font-display: "auto"; + font-style: normal; } + +[class^="el-icon-"], [class*=" el-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'element-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: baseline; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.el-icon-ice-cream-round:before { + content: "\e6a0"; } + +.el-icon-ice-cream-square:before { + content: "\e6a3"; } + +.el-icon-lollipop:before { + content: "\e6a4"; } + +.el-icon-potato-strips:before { + content: "\e6a5"; } + +.el-icon-milk-tea:before { + content: "\e6a6"; } + +.el-icon-ice-drink:before { + content: "\e6a7"; } + +.el-icon-ice-tea:before { + content: "\e6a9"; } + +.el-icon-coffee:before { + content: "\e6aa"; } + +.el-icon-orange:before { + content: "\e6ab"; } + +.el-icon-pear:before { + content: "\e6ac"; } + +.el-icon-apple:before { + content: "\e6ad"; } + +.el-icon-cherry:before { + content: "\e6ae"; } + +.el-icon-watermelon:before { + content: "\e6af"; } + +.el-icon-grape:before { + content: "\e6b0"; } + +.el-icon-refrigerator:before { + content: "\e6b1"; } + +.el-icon-goblet-square-full:before { + content: "\e6b2"; } + +.el-icon-goblet-square:before { + content: "\e6b3"; } + +.el-icon-goblet-full:before { + content: "\e6b4"; } + +.el-icon-goblet:before { + content: "\e6b5"; } + +.el-icon-cold-drink:before { + content: "\e6b6"; } + +.el-icon-coffee-cup:before { + content: "\e6b8"; } + +.el-icon-water-cup:before { + content: "\e6b9"; } + +.el-icon-hot-water:before { + content: "\e6ba"; } + +.el-icon-ice-cream:before { + content: "\e6bb"; } + +.el-icon-dessert:before { + content: "\e6bc"; } + +.el-icon-sugar:before { + content: "\e6bd"; } + +.el-icon-tableware:before { + content: "\e6be"; } + +.el-icon-burger:before { + content: "\e6bf"; } + +.el-icon-knife-fork:before { + content: "\e6c1"; } + +.el-icon-fork-spoon:before { + content: "\e6c2"; } + +.el-icon-chicken:before { + content: "\e6c3"; } + +.el-icon-food:before { + content: "\e6c4"; } + +.el-icon-dish-1:before { + content: "\e6c5"; } + +.el-icon-dish:before { + content: "\e6c6"; } + +.el-icon-moon-night:before { + content: "\e6ee"; } + +.el-icon-moon:before { + content: "\e6f0"; } + +.el-icon-cloudy-and-sunny:before { + content: "\e6f1"; } + +.el-icon-partly-cloudy:before { + content: "\e6f2"; } + +.el-icon-cloudy:before { + content: "\e6f3"; } + +.el-icon-sunny:before { + content: "\e6f6"; } + +.el-icon-sunset:before { + content: "\e6f7"; } + +.el-icon-sunrise-1:before { + content: "\e6f8"; } + +.el-icon-sunrise:before { + content: "\e6f9"; } + +.el-icon-heavy-rain:before { + content: "\e6fa"; } + +.el-icon-lightning:before { + content: "\e6fb"; } + +.el-icon-light-rain:before { + content: "\e6fc"; } + +.el-icon-wind-power:before { + content: "\e6fd"; } + +.el-icon-baseball:before { + content: "\e712"; } + +.el-icon-soccer:before { + content: "\e713"; } + +.el-icon-football:before { + content: "\e715"; } + +.el-icon-basketball:before { + content: "\e716"; } + +.el-icon-ship:before { + content: "\e73f"; } + +.el-icon-truck:before { + content: "\e740"; } + +.el-icon-bicycle:before { + content: "\e741"; } + +.el-icon-mobile-phone:before { + content: "\e6d3"; } + +.el-icon-service:before { + content: "\e6d4"; } + +.el-icon-key:before { + content: "\e6e2"; } + +.el-icon-unlock:before { + content: "\e6e4"; } + +.el-icon-lock:before { + content: "\e6e5"; } + +.el-icon-watch:before { + content: "\e6fe"; } + +.el-icon-watch-1:before { + content: "\e6ff"; } + +.el-icon-timer:before { + content: "\e702"; } + +.el-icon-alarm-clock:before { + content: "\e703"; } + +.el-icon-map-location:before { + content: "\e704"; } + +.el-icon-delete-location:before { + content: "\e705"; } + +.el-icon-add-location:before { + content: "\e706"; } + +.el-icon-location-information:before { + content: "\e707"; } + +.el-icon-location-outline:before { + content: "\e708"; } + +.el-icon-location:before { + content: "\e79e"; } + +.el-icon-place:before { + content: "\e709"; } + +.el-icon-discover:before { + content: "\e70a"; } + +.el-icon-first-aid-kit:before { + content: "\e70b"; } + +.el-icon-trophy-1:before { + content: "\e70c"; } + +.el-icon-trophy:before { + content: "\e70d"; } + +.el-icon-medal:before { + content: "\e70e"; } + +.el-icon-medal-1:before { + content: "\e70f"; } + +.el-icon-stopwatch:before { + content: "\e710"; } + +.el-icon-mic:before { + content: "\e711"; } + +.el-icon-copy-document:before { + content: "\e718"; } + +.el-icon-full-screen:before { + content: "\e719"; } + +.el-icon-switch-button:before { + content: "\e71b"; } + +.el-icon-aim:before { + content: "\e71c"; } + +.el-icon-crop:before { + content: "\e71d"; } + +.el-icon-odometer:before { + content: "\e71e"; } + +.el-icon-time:before { + content: "\e71f"; } + +.el-icon-bangzhu:before { + content: "\e724"; } + +.el-icon-close-notification:before { + content: "\e726"; } + +.el-icon-microphone:before { + content: "\e727"; } + +.el-icon-turn-off-microphone:before { + content: "\e728"; } + +.el-icon-position:before { + content: "\e729"; } + +.el-icon-postcard:before { + content: "\e72a"; } + +.el-icon-message:before { + content: "\e72b"; } + +.el-icon-chat-line-square:before { + content: "\e72d"; } + +.el-icon-chat-dot-square:before { + content: "\e72e"; } + +.el-icon-chat-dot-round:before { + content: "\e72f"; } + +.el-icon-chat-square:before { + content: "\e730"; } + +.el-icon-chat-line-round:before { + content: "\e731"; } + +.el-icon-chat-round:before { + content: "\e732"; } + +.el-icon-set-up:before { + content: "\e733"; } + +.el-icon-turn-off:before { + content: "\e734"; } + +.el-icon-open:before { + content: "\e735"; } + +.el-icon-connection:before { + content: "\e736"; } + +.el-icon-link:before { + content: "\e737"; } + +.el-icon-cpu:before { + content: "\e738"; } + +.el-icon-thumb:before { + content: "\e739"; } + +.el-icon-female:before { + content: "\e73a"; } + +.el-icon-male:before { + content: "\e73b"; } + +.el-icon-guide:before { + content: "\e73c"; } + +.el-icon-news:before { + content: "\e73e"; } + +.el-icon-price-tag:before { + content: "\e744"; } + +.el-icon-discount:before { + content: "\e745"; } + +.el-icon-wallet:before { + content: "\e747"; } + +.el-icon-coin:before { + content: "\e748"; } + +.el-icon-money:before { + content: "\e749"; } + +.el-icon-bank-card:before { + content: "\e74a"; } + +.el-icon-box:before { + content: "\e74b"; } + +.el-icon-present:before { + content: "\e74c"; } + +.el-icon-sell:before { + content: "\e6d5"; } + +.el-icon-sold-out:before { + content: "\e6d6"; } + +.el-icon-shopping-bag-2:before { + content: "\e74d"; } + +.el-icon-shopping-bag-1:before { + content: "\e74e"; } + +.el-icon-shopping-cart-2:before { + content: "\e74f"; } + +.el-icon-shopping-cart-1:before { + content: "\e750"; } + +.el-icon-shopping-cart-full:before { + content: "\e751"; } + +.el-icon-smoking:before { + content: "\e752"; } + +.el-icon-no-smoking:before { + content: "\e753"; } + +.el-icon-house:before { + content: "\e754"; } + +.el-icon-table-lamp:before { + content: "\e755"; } + +.el-icon-school:before { + content: "\e756"; } + +.el-icon-office-building:before { + content: "\e757"; } + +.el-icon-toilet-paper:before { + content: "\e758"; } + +.el-icon-notebook-2:before { + content: "\e759"; } + +.el-icon-notebook-1:before { + content: "\e75a"; } + +.el-icon-files:before { + content: "\e75b"; } + +.el-icon-collection:before { + content: "\e75c"; } + +.el-icon-receiving:before { + content: "\e75d"; } + +.el-icon-suitcase-1:before { + content: "\e760"; } + +.el-icon-suitcase:before { + content: "\e761"; } + +.el-icon-film:before { + content: "\e763"; } + +.el-icon-collection-tag:before { + content: "\e765"; } + +.el-icon-data-analysis:before { + content: "\e766"; } + +.el-icon-pie-chart:before { + content: "\e767"; } + +.el-icon-data-board:before { + content: "\e768"; } + +.el-icon-data-line:before { + content: "\e76d"; } + +.el-icon-reading:before { + content: "\e769"; } + +.el-icon-magic-stick:before { + content: "\e76a"; } + +.el-icon-coordinate:before { + content: "\e76b"; } + +.el-icon-mouse:before { + content: "\e76c"; } + +.el-icon-brush:before { + content: "\e76e"; } + +.el-icon-headset:before { + content: "\e76f"; } + +.el-icon-umbrella:before { + content: "\e770"; } + +.el-icon-scissors:before { + content: "\e771"; } + +.el-icon-mobile:before { + content: "\e773"; } + +.el-icon-attract:before { + content: "\e774"; } + +.el-icon-monitor:before { + content: "\e775"; } + +.el-icon-search:before { + content: "\e778"; } + +.el-icon-takeaway-box:before { + content: "\e77a"; } + +.el-icon-paperclip:before { + content: "\e77d"; } + +.el-icon-printer:before { + content: "\e77e"; } + +.el-icon-document-add:before { + content: "\e782"; } + +.el-icon-document:before { + content: "\e785"; } + +.el-icon-document-checked:before { + content: "\e786"; } + +.el-icon-document-copy:before { + content: "\e787"; } + +.el-icon-document-delete:before { + content: "\e788"; } + +.el-icon-document-remove:before { + content: "\e789"; } + +.el-icon-tickets:before { + content: "\e78b"; } + +.el-icon-folder-checked:before { + content: "\e77f"; } + +.el-icon-folder-delete:before { + content: "\e780"; } + +.el-icon-folder-remove:before { + content: "\e781"; } + +.el-icon-folder-add:before { + content: "\e783"; } + +.el-icon-folder-opened:before { + content: "\e784"; } + +.el-icon-folder:before { + content: "\e78a"; } + +.el-icon-edit-outline:before { + content: "\e764"; } + +.el-icon-edit:before { + content: "\e78c"; } + +.el-icon-date:before { + content: "\e78e"; } + +.el-icon-c-scale-to-original:before { + content: "\e7c6"; } + +.el-icon-view:before { + content: "\e6ce"; } + +.el-icon-loading:before { + content: "\e6cf"; } + +.el-icon-rank:before { + content: "\e6d1"; } + +.el-icon-sort-down:before { + content: "\e7c4"; } + +.el-icon-sort-up:before { + content: "\e7c5"; } + +.el-icon-sort:before { + content: "\e6d2"; } + +.el-icon-finished:before { + content: "\e6cd"; } + +.el-icon-refresh-left:before { + content: "\e6c7"; } + +.el-icon-refresh-right:before { + content: "\e6c8"; } + +.el-icon-refresh:before { + content: "\e6d0"; } + +.el-icon-video-play:before { + content: "\e7c0"; } + +.el-icon-video-pause:before { + content: "\e7c1"; } + +.el-icon-d-arrow-right:before { + content: "\e6dc"; } + +.el-icon-d-arrow-left:before { + content: "\e6dd"; } + +.el-icon-arrow-up:before { + content: "\e6e1"; } + +.el-icon-arrow-down:before { + content: "\e6df"; } + +.el-icon-arrow-right:before { + content: "\e6e0"; } + +.el-icon-arrow-left:before { + content: "\e6de"; } + +.el-icon-top-right:before { + content: "\e6e7"; } + +.el-icon-top-left:before { + content: "\e6e8"; } + +.el-icon-top:before { + content: "\e6e6"; } + +.el-icon-bottom:before { + content: "\e6eb"; } + +.el-icon-right:before { + content: "\e6e9"; } + +.el-icon-back:before { + content: "\e6ea"; } + +.el-icon-bottom-right:before { + content: "\e6ec"; } + +.el-icon-bottom-left:before { + content: "\e6ed"; } + +.el-icon-caret-top:before { + content: "\e78f"; } + +.el-icon-caret-bottom:before { + content: "\e790"; } + +.el-icon-caret-right:before { + content: "\e791"; } + +.el-icon-caret-left:before { + content: "\e792"; } + +.el-icon-d-caret:before { + content: "\e79a"; } + +.el-icon-share:before { + content: "\e793"; } + +.el-icon-menu:before { + content: "\e798"; } + +.el-icon-s-grid:before { + content: "\e7a6"; } + +.el-icon-s-check:before { + content: "\e7a7"; } + +.el-icon-s-data:before { + content: "\e7a8"; } + +.el-icon-s-opportunity:before { + content: "\e7aa"; } + +.el-icon-s-custom:before { + content: "\e7ab"; } + +.el-icon-s-claim:before { + content: "\e7ad"; } + +.el-icon-s-finance:before { + content: "\e7ae"; } + +.el-icon-s-comment:before { + content: "\e7af"; } + +.el-icon-s-flag:before { + content: "\e7b0"; } + +.el-icon-s-marketing:before { + content: "\e7b1"; } + +.el-icon-s-shop:before { + content: "\e7b4"; } + +.el-icon-s-open:before { + content: "\e7b5"; } + +.el-icon-s-management:before { + content: "\e7b6"; } + +.el-icon-s-ticket:before { + content: "\e7b7"; } + +.el-icon-s-release:before { + content: "\e7b8"; } + +.el-icon-s-home:before { + content: "\e7b9"; } + +.el-icon-s-promotion:before { + content: "\e7ba"; } + +.el-icon-s-operation:before { + content: "\e7bb"; } + +.el-icon-s-unfold:before { + content: "\e7bc"; } + +.el-icon-s-fold:before { + content: "\e7a9"; } + +.el-icon-s-platform:before { + content: "\e7bd"; } + +.el-icon-s-order:before { + content: "\e7be"; } + +.el-icon-s-cooperation:before { + content: "\e7bf"; } + +.el-icon-bell:before { + content: "\e725"; } + +.el-icon-message-solid:before { + content: "\e799"; } + +.el-icon-video-camera:before { + content: "\e772"; } + +.el-icon-video-camera-solid:before { + content: "\e796"; } + +.el-icon-camera:before { + content: "\e779"; } + +.el-icon-camera-solid:before { + content: "\e79b"; } + +.el-icon-download:before { + content: "\e77c"; } + +.el-icon-upload2:before { + content: "\e77b"; } + +.el-icon-upload:before { + content: "\e7c3"; } + +.el-icon-picture-outline-round:before { + content: "\e75f"; } + +.el-icon-picture-outline:before { + content: "\e75e"; } + +.el-icon-picture:before { + content: "\e79f"; } + +.el-icon-close:before { + content: "\e6db"; } + +.el-icon-check:before { + content: "\e6da"; } + +.el-icon-plus:before { + content: "\e6d9"; } + +.el-icon-minus:before { + content: "\e6d8"; } + +.el-icon-help:before { + content: "\e73d"; } + +.el-icon-s-help:before { + content: "\e7b3"; } + +.el-icon-circle-close:before { + content: "\e78d"; } + +.el-icon-circle-check:before { + content: "\e720"; } + +.el-icon-circle-plus-outline:before { + content: "\e723"; } + +.el-icon-remove-outline:before { + content: "\e722"; } + +.el-icon-zoom-out:before { + content: "\e776"; } + +.el-icon-zoom-in:before { + content: "\e777"; } + +.el-icon-error:before { + content: "\e79d"; } + +.el-icon-success:before { + content: "\e79c"; } + +.el-icon-circle-plus:before { + content: "\e7a0"; } + +.el-icon-remove:before { + content: "\e7a2"; } + +.el-icon-info:before { + content: "\e7a1"; } + +.el-icon-question:before { + content: "\e7a4"; } + +.el-icon-warning-outline:before { + content: "\e6c9"; } + +.el-icon-warning:before { + content: "\e7a3"; } + +.el-icon-goods:before { + content: "\e7c2"; } + +.el-icon-s-goods:before { + content: "\e7b2"; } + +.el-icon-star-off:before { + content: "\e717"; } + +.el-icon-star-on:before { + content: "\e797"; } + +.el-icon-more-outline:before { + content: "\e6cc"; } + +.el-icon-more:before { + content: "\e794"; } + +.el-icon-phone-outline:before { + content: "\e6cb"; } + +.el-icon-phone:before { + content: "\e795"; } + +.el-icon-user:before { + content: "\e6e3"; } + +.el-icon-user-solid:before { + content: "\e7a5"; } + +.el-icon-setting:before { + content: "\e6ca"; } + +.el-icon-s-tools:before { + content: "\e7ac"; } + +.el-icon-delete:before { + content: "\e6d7"; } + +.el-icon-delete-solid:before { + content: "\e7c9"; } + +.el-icon-eleme:before { + content: "\e7c7"; } + +.el-icon-platform-eleme:before { + content: "\e7ca"; } + +.el-icon-loading { + -webkit-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; } + +.el-icon--right { + margin-left: 5px; } + +.el-icon--left { + margin-right: 5px; } + +@-webkit-keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +@keyframes rotating { + 0% { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + 100% { + -webkit-transform: rotateZ(360deg); + transform: rotateZ(360deg); } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags > span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } + +.el-pagination { + white-space: nowrap; + padding: 2px 5px; + color: #303133; + font-weight: bold; } + .el-pagination::before, + .el-pagination::after { + display: table; + content: ""; } + .el-pagination::after { + clear: both; } + .el-pagination span:not([class*=suffix]), + .el-pagination button { + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + vertical-align: top; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-pagination .el-input__inner { + text-align: center; + -moz-appearance: textfield; + line-height: normal; } + .el-pagination .el-input__suffix { + right: 0; + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-pagination .el-select .el-input { + width: 100px; + margin: 0 5px; } + .el-pagination .el-select .el-input .el-input__inner { + padding-right: 25px; + border-radius: 3px; } + .el-pagination button { + border: none; + padding: 0 6px; + background: transparent; } + .el-pagination button:focus { + outline: none; } + .el-pagination button:hover { + color: #409EFF; } + .el-pagination button:disabled { + color: #C0C4CC; + background-color: #FFFFFF; + cursor: not-allowed; } + .el-pagination .btn-prev, + .el-pagination .btn-next { + background: center center no-repeat; + background-size: 16px; + background-color: #FFFFFF; + cursor: pointer; + margin: 0; + color: #303133; } + .el-pagination .btn-prev .el-icon, + .el-pagination .btn-next .el-icon { + display: block; + font-size: 12px; + font-weight: bold; } + .el-pagination .btn-prev { + padding-right: 12px; } + .el-pagination .btn-next { + padding-left: 12px; } + .el-pagination .el-pager li.disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-pagination--small .btn-prev, + .el-pagination--small .btn-next, + .el-pagination--small .el-pager li, + .el-pagination--small .el-pager li.btn-quicknext, + .el-pagination--small .el-pager li.btn-quickprev, + .el-pagination--small .el-pager li:last-child { + border-color: transparent; + font-size: 12px; + line-height: 22px; + height: 22px; + min-width: 22px; } + .el-pagination--small .arrow.disabled { + visibility: hidden; } + .el-pagination--small .more::before, + .el-pagination--small li.more::before { + line-height: 24px; } + .el-pagination--small span:not([class*=suffix]), + .el-pagination--small button { + height: 22px; + line-height: 22px; } + .el-pagination--small .el-pagination__editor { + height: 22px; } + .el-pagination--small .el-pagination__editor.el-input .el-input__inner { + height: 22px; } + .el-pagination__sizes { + margin: 0 10px 0 0; + font-weight: normal; + color: #606266; } + .el-pagination__sizes .el-input .el-input__inner { + font-size: 13px; + padding-left: 8px; } + .el-pagination__sizes .el-input .el-input__inner:hover { + border-color: #409EFF; } + .el-pagination__total { + margin-right: 10px; + font-weight: normal; + color: #606266; } + .el-pagination__jump { + margin-left: 24px; + font-weight: normal; + color: #606266; } + .el-pagination__jump .el-input__inner { + padding: 0 3px; } + .el-pagination__rightwrapper { + float: right; } + .el-pagination__editor { + line-height: 18px; + padding: 0 2px; + height: 28px; + text-align: center; + margin: 0 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; } + .el-pagination__editor.el-input { + width: 50px; } + .el-pagination__editor.el-input .el-input__inner { + height: 28px; } + .el-pagination__editor .el-input__inner::-webkit-inner-spin-button, + .el-pagination__editor .el-input__inner::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; } + .el-pagination.is-background .btn-prev, + .el-pagination.is-background .btn-next, + .el-pagination.is-background .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; } + .el-pagination.is-background .btn-prev.disabled, + .el-pagination.is-background .btn-next.disabled, + .el-pagination.is-background .el-pager li.disabled { + color: #C0C4CC; } + .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next { + padding: 0; } + .el-pagination.is-background .btn-prev:disabled, .el-pagination.is-background .btn-next:disabled { + color: #C0C4CC; } + .el-pagination.is-background .el-pager li:not(.disabled):hover { + color: #409EFF; } + .el-pagination.is-background .el-pager li:not(.disabled).active { + background-color: #409EFF; + color: #FFFFFF; } + .el-pagination.is-background.el-pagination--small .btn-prev, + .el-pagination.is-background.el-pagination--small .btn-next, + .el-pagination.is-background.el-pagination--small .el-pager li { + margin: 0 3px; + min-width: 22px; } + +.el-pager { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + list-style: none; + display: inline-block; + vertical-align: top; + font-size: 0; + padding: 0; + margin: 0; } + .el-pager .more::before { + line-height: 30px; } + .el-pager li { + padding: 0 4px; + background: #FFFFFF; + vertical-align: top; + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + margin: 0; } + .el-pager li.btn-quicknext, .el-pager li.btn-quickprev { + line-height: 28px; + color: #303133; } + .el-pager li.btn-quicknext.disabled, .el-pager li.btn-quickprev.disabled { + color: #C0C4CC; } + .el-pager li.btn-quickprev:hover { + cursor: pointer; } + .el-pager li.btn-quicknext:hover { + cursor: pointer; } + .el-pager li.active + li { + border-left: 0; } + .el-pager li:hover { + color: #409EFF; } + .el-pager li.active { + color: #409EFF; + cursor: default; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@-webkit-keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@-webkit-keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +.el-dialog { + position: relative; + margin: 0 auto 50px; + background: #FFFFFF; + border-radius: 2px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 50%; } + .el-dialog.is-fullscreen { + width: 100%; + margin-top: 0; + margin-bottom: 0; + height: 100%; + overflow: auto; } + .el-dialog__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: auto; + margin: 0; } + .el-dialog__header { + padding: 20px; + padding-bottom: 10px; } + .el-dialog__headerbtn { + position: absolute; + top: 20px; + right: 20px; + padding: 0; + background: transparent; + border: none; + outline: none; + cursor: pointer; + font-size: 16px; } + .el-dialog__headerbtn .el-dialog__close { + color: #909399; } + .el-dialog__headerbtn:focus .el-dialog__close, .el-dialog__headerbtn:hover .el-dialog__close { + color: #409EFF; } + .el-dialog__title { + line-height: 24px; + font-size: 18px; + color: #303133; } + .el-dialog__body { + padding: 30px 20px; + color: #606266; + font-size: 14px; + word-break: break-all; } + .el-dialog__footer { + padding: 20px; + padding-top: 10px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-dialog--center { + text-align: center; } + .el-dialog--center .el-dialog__body { + text-align: initial; + padding: 25px 25px 30px; } + .el-dialog--center .el-dialog__footer { + text-align: inherit; } + +.dialog-fade-enter-active { + -webkit-animation: dialog-fade-in .3s; + animation: dialog-fade-in .3s; } + +.dialog-fade-leave-active { + -webkit-animation: dialog-fade-out .3s; + animation: dialog-fade-out .3s; } + +@-webkit-keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes dialog-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes dialog-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-autocomplete { + position: relative; + display: inline-block; } + +.el-autocomplete-suggestion { + margin: 5px 0; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + border: 1px solid #E4E7ED; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; } + .el-autocomplete-suggestion__wrap { + max-height: 280px; + padding: 10px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-autocomplete-suggestion__list { + margin: 0; + padding: 0; } + .el-autocomplete-suggestion li { + padding: 0 20px; + margin: 0; + line-height: 34px; + cursor: pointer; + color: #606266; + font-size: 14px; + list-style: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-autocomplete-suggestion li:hover { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.highlighted { + background-color: #F5F7FA; } + .el-autocomplete-suggestion li.divider { + margin-top: 6px; + border-top: 1px solid #000000; } + .el-autocomplete-suggestion li.divider:last-child { + margin-bottom: -6px; } + .el-autocomplete-suggestion.is-loading li { + text-align: center; + height: 100px; + line-height: 100px; + font-size: 20px; + color: #999; } + .el-autocomplete-suggestion.is-loading li::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-autocomplete-suggestion.is-loading li:hover { + background-color: #FFFFFF; } + .el-autocomplete-suggestion.is-loading .el-icon-loading { + vertical-align: middle; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-dropdown { + display: inline-block; + position: relative; + color: #606266; + font-size: 14px; } + .el-dropdown .el-button-group { + display: block; } + .el-dropdown .el-button-group .el-button { + float: none; } + .el-dropdown .el-dropdown__caret-button { + padding-left: 5px; + padding-right: 5px; + position: relative; + border-left: none; } + .el-dropdown .el-dropdown__caret-button::before { + content: ''; + position: absolute; + display: block; + width: 1px; + top: 5px; + bottom: 5px; + left: 0; + background: rgba(255, 255, 255, 0.5); } + .el-dropdown .el-dropdown__caret-button.el-button--default::before { + background: rgba(220, 223, 230, 0.5); } + .el-dropdown .el-dropdown__caret-button:hover::before { + top: 0; + bottom: 0; } + .el-dropdown .el-dropdown__caret-button .el-dropdown__icon { + padding-left: 0; } + .el-dropdown__icon { + font-size: 12px; + margin: 0 3px; } + .el-dropdown .el-dropdown-selfdefine:focus:active, .el-dropdown .el-dropdown-selfdefine:focus:not(.focusing) { + outline-width: 0; } + +.el-dropdown-menu { + position: absolute; + top: 0; + left: 0; + z-index: 10; + padding: 10px 0; + margin: 5px 0; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-dropdown-menu__item { + list-style: none; + line-height: 36px; + padding: 0 20px; + margin: 0; + font-size: 14px; + color: #606266; + cursor: pointer; + outline: none; } + .el-dropdown-menu__item:not(.is-disabled):hover, .el-dropdown-menu__item:focus { + background-color: #409EFF; + color: #FFFFFF; } + .el-dropdown-menu__item i { + margin-right: 5px; } + .el-dropdown-menu__item--divided { + position: relative; + margin-top: 6px; + border-top: 1px solid #EBEEF5; } + .el-dropdown-menu__item--divided:before { + content: ''; + height: 6px; + display: block; + margin: 0 -20px; + background-color: #FFFFFF; } + .el-dropdown-menu__item.is-disabled { + cursor: default; + color: #bbb; + pointer-events: none; } + .el-dropdown-menu--medium { + padding: 6px 0; } + .el-dropdown-menu--medium .el-dropdown-menu__item { + line-height: 30px; + padding: 0 17px; + font-size: 14px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 6px; } + .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 6px; + margin: 0 -17px; } + .el-dropdown-menu--small { + padding: 6px 0; } + .el-dropdown-menu--small .el-dropdown-menu__item { + line-height: 27px; + padding: 0 15px; + font-size: 13px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 4px; } + .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 4px; + margin: 0 -15px; } + .el-dropdown-menu--mini { + padding: 3px 0; } + .el-dropdown-menu--mini .el-dropdown-menu__item { + line-height: 24px; + padding: 0 10px; + font-size: 12px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided { + margin-top: 3px; } + .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before { + height: 3px; + margin: 0 -10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-menu { + border-right: solid 1px #e6e6e6; + list-style: none; + position: relative; + margin: 0; + padding-left: 0; + background-color: #272C34; } + .el-menu::before, + .el-menu::after { + display: table; + content: ""; } + .el-menu::after { + clear: both; } + .el-menu.el-menu--horizontal { + border-bottom: solid 1px #e6e6e6; } + .el-menu--horizontal { + border-right: none; } + .el-menu--horizontal > .el-menu-item { + float: left; + height: 60px; + line-height: 60px; + margin: 0; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-menu-item a, + .el-menu--horizontal > .el-menu-item a:hover { + color: inherit; } + .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus { + background-color: #fff; } + .el-menu--horizontal > .el-submenu { + float: left; } + .el-menu--horizontal > .el-submenu:focus, .el-menu--horizontal > .el-submenu:hover { + outline: none; } + .el-menu--horizontal > .el-submenu:focus .el-submenu__title, .el-menu--horizontal > .el-submenu:hover .el-submenu__title { + color: #303133; } + .el-menu--horizontal > .el-submenu.is-active .el-submenu__title { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--horizontal > .el-submenu .el-submenu__title { + height: 60px; + line-height: 60px; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-submenu .el-submenu__title:hover { + background-color: #fff; } + .el-menu--horizontal > .el-submenu .el-submenu__icon-arrow { + position: static; + vertical-align: middle; + margin-left: 8px; + margin-top: -3px; } + .el-menu--horizontal .el-menu .el-menu-item, + .el-menu--horizontal .el-menu .el-submenu__title { + background-color: #FFFFFF; + float: none; + height: 36px; + line-height: 36px; + padding: 0 10px; + color: #909399; } + .el-menu--horizontal .el-menu .el-menu-item.is-active, + .el-menu--horizontal .el-menu .el-submenu.is-active > .el-submenu__title { + color: #303133; } + .el-menu--horizontal .el-menu-item:not(.is-disabled):hover, + .el-menu--horizontal .el-menu-item:not(.is-disabled):focus { + outline: none; + color: #303133; } + .el-menu--horizontal > .el-menu-item.is-active { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--collapse { + width: 64px; } + .el-menu--collapse > .el-menu-item [class^="el-icon-"], + .el-menu--collapse > .el-submenu > .el-submenu__title [class^="el-icon-"] { + margin: 0; + vertical-align: middle; + width: 24px; + text-align: center; } + .el-menu--collapse > .el-menu-item .el-submenu__icon-arrow, + .el-menu--collapse > .el-submenu > .el-submenu__title .el-submenu__icon-arrow { + display: none; } + .el-menu--collapse > .el-menu-item span, + .el-menu--collapse > .el-submenu > .el-submenu__title span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; } + .el-menu--collapse > .el-menu-item.is-active i { + color: inherit; } + .el-menu--collapse .el-menu .el-submenu { + min-width: 200px; } + .el-menu--collapse .el-submenu { + position: relative; } + .el-menu--collapse .el-submenu .el-menu { + position: absolute; + margin-left: 5px; + top: 0; + left: 100%; + z-index: 10; + border: 1px solid #E4E7ED; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--collapse .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: none; + transform: none; } + .el-menu--popup { + z-index: 100; + min-width: 200px; + border: none; + padding: 5px 0; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--popup-bottom-start { + margin-top: 5px; } + .el-menu--popup-right-start { + margin-left: 5px; + margin-right: 5px; } + +.el-menu-item { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-menu-item * { + vertical-align: middle; } + .el-menu-item i { + color: #909399; } + .el-menu-item:hover, .el-menu-item:focus { + outline: none; + background-color: #409EFF; } + .el-menu-item.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-menu-item [class^="el-icon-"] { + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; + vertical-align: middle; } + .el-menu-item.is-active { + color: #409EFF; } + .el-menu-item.is-active i { + color: inherit; } + +.el-submenu { + list-style: none; + margin: 0; + padding-left: 0; } + .el-submenu__title { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-submenu__title * { + vertical-align: middle; } + .el-submenu__title i { + color: #909399; } + .el-submenu__title:hover, .el-submenu__title:focus { + outline: none; + background-color: #409EFF; } + .el-submenu__title.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu__title:hover { + background-color: #409EFF; } + .el-submenu .el-menu { + border: none; } + .el-submenu .el-menu-item { + height: 50px; + line-height: 50px; + padding: 0 45px; + min-width: 200px; } + .el-submenu__icon-arrow { + position: absolute; + top: 50%; + right: 20px; + margin-top: -7px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 12px; } + .el-submenu.is-active .el-submenu__title { + border-bottom-color: #409EFF; } + .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-submenu.is-disabled .el-submenu__title, + .el-submenu.is-disabled .el-menu-item { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu [class^="el-icon-"] { + vertical-align: middle; + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; } + +.el-menu-item-group > ul { + padding: 0; } + +.el-menu-item-group__title { + padding: 7px 0 7px 20px; + line-height: normal; + font-size: 12px; + color: #909399; } + +.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow { + -webkit-transition: .2s; + transition: .2s; + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-group { + display: inline-block; + line-height: 1; + vertical-align: middle; + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-button { + position: relative; + display: inline-block; + outline: none; } + .el-radio-button__inner { + display: inline-block; + line-height: 1; + white-space: nowrap; + vertical-align: middle; + background: #FFFFFF; + border: 1px solid #DCDFE6; + font-weight: 500; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + cursor: pointer; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button__inner.is-round { + padding: 12px 20px; } + .el-radio-button__inner:hover { + color: #409EFF; } + .el-radio-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-radio-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-radio-button:first-child .el-radio-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-radio-button__orig-radio { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; } + .el-radio-button__orig-radio:checked + .el-radio-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #409EFF; + box-shadow: -1px 0 0 0 #409EFF; } + .el-radio-button__orig-radio:disabled + .el-radio-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-radio-button__orig-radio:disabled:checked + .el-radio-button__inner { + background-color: #F2F6FC; } + .el-radio-button:last-child .el-radio-button__inner { + border-radius: 0 4px 4px 0; } + .el-radio-button:first-child:last-child .el-radio-button__inner { + border-radius: 4px; } + .el-radio-button--medium .el-radio-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button--medium .el-radio-button__inner.is-round { + padding: 10px 20px; } + .el-radio-button--small .el-radio-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--small .el-radio-button__inner.is-round { + padding: 9px 15px; } + .el-radio-button--mini .el-radio-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--mini .el-radio-button__inner.is-round { + padding: 7px 15px; } + .el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-switch { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + font-size: 14px; + line-height: 20px; + height: 20px; + vertical-align: middle; } + .el-switch.is-disabled .el-switch__core, + .el-switch.is-disabled .el-switch__label { + cursor: not-allowed; } + .el-switch__label { + -webkit-transition: .2s; + transition: .2s; + height: 20px; + display: inline-block; + font-size: 14px; + font-weight: 500; + cursor: pointer; + vertical-align: middle; + color: #303133; } + .el-switch__label.is-active { + color: #409EFF; } + .el-switch__label--left { + margin-right: 10px; } + .el-switch__label--right { + margin-left: 10px; } + .el-switch__label * { + line-height: 1; + font-size: 14px; + display: inline-block; } + .el-switch__input { + position: absolute; + width: 0; + height: 0; + opacity: 0; + margin: 0; } + .el-switch__core { + margin: 0; + display: inline-block; + position: relative; + width: 40px; + height: 20px; + border: 1px solid #DCDFE6; + outline: none; + border-radius: 10px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #DCDFE6; + cursor: pointer; + -webkit-transition: border-color .3s, background-color .3s; + transition: border-color .3s, background-color .3s; + vertical-align: middle; } + .el-switch__core:after { + content: ""; + position: absolute; + top: 1px; + left: 1px; + border-radius: 100%; + -webkit-transition: all .3s; + transition: all .3s; + width: 16px; + height: 16px; + background-color: #FFFFFF; } + .el-switch.is-checked .el-switch__core { + border-color: #409EFF; + background-color: #409EFF; } + .el-switch.is-checked .el-switch__core::after { + left: 100%; + margin-left: -17px; } + .el-switch.is-disabled { + opacity: 0.6; } + .el-switch--wide .el-switch__label.el-switch__label--left span { + left: 10px; } + .el-switch--wide .el-switch__label.el-switch__label--right span { + right: 10px; } + .el-switch .label-fade-enter, + .el-switch .label-fade-leave-active { + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags > span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table { + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; + max-width: 100%; + background-color: #FFFFFF; + font-size: 14px; + color: #606266; } + .el-table__empty-block { + min-height: 60px; + text-align: center; + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-table__empty-text { + line-height: 60px; + width: 50%; + color: #909399; } + .el-table__expand-column .cell { + padding: 0; + text-align: center; } + .el-table__expand-icon { + position: relative; + cursor: pointer; + color: #666; + font-size: 12px; + -webkit-transition: -webkit-transform 0.2s ease-in-out; + transition: -webkit-transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out; + height: 20px; } + .el-table__expand-icon--expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-table__expand-icon > .el-icon { + position: absolute; + left: 50%; + top: 50%; + margin-left: -5px; + margin-top: -5px; } + .el-table__expanded-cell { + background-color: #FFFFFF; } + .el-table__expanded-cell[class*=cell] { + padding: 20px 50px; } + .el-table__expanded-cell:hover { + background-color: transparent !important; } + .el-table__placeholder { + display: inline-block; + width: 20px; } + .el-table__append-wrapper { + overflow: hidden; } + .el-table--fit { + border-right: 0; + border-bottom: 0; } + .el-table--fit th.gutter, .el-table--fit td.gutter { + border-right-width: 1px; } + .el-table--scrollable-x .el-table__body-wrapper { + overflow-x: auto; } + .el-table--scrollable-y .el-table__body-wrapper { + overflow-y: auto; } + .el-table thead { + color: #909399; + font-weight: 500; } + .el-table thead.is-group th { + background: #F5F7FA; } + .el-table th, .el-table td { + padding: 12px 0; + min-width: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + vertical-align: middle; + position: relative; + text-align: left; } + .el-table th.is-center, .el-table td.is-center { + text-align: center; } + .el-table th.is-right, .el-table td.is-right { + text-align: right; } + .el-table th.gutter, .el-table td.gutter { + width: 15px; + border-right-width: 0; + border-bottom-width: 0; + padding: 0; } + .el-table th.is-hidden > *, .el-table td.is-hidden > * { + visibility: hidden; } + .el-table--medium th, .el-table--medium td { + padding: 10px 0; } + .el-table--small { + font-size: 12px; } + .el-table--small th, .el-table--small td { + padding: 8px 0; } + .el-table--mini { + font-size: 12px; } + .el-table--mini th, .el-table--mini td { + padding: 6px 0; } + .el-table tr { + background-color: #FFFFFF; } + .el-table tr input[type="checkbox"] { + margin: 0; } + .el-table th.is-leaf, .el-table td { + border-bottom: 1px solid #EBEEF5; } + .el-table th.is-sortable { + cursor: pointer; } + .el-table th { + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #FFFFFF; } + .el-table th > .cell { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; + vertical-align: middle; + padding-left: 10px; + padding-right: 10px; + width: 100%; } + .el-table th > .cell.highlight { + color: #409EFF; } + .el-table th.required > div::before { + display: inline-block; + content: ""; + width: 8px; + height: 8px; + border-radius: 50%; + background: #ff4d51; + margin-right: 5px; + vertical-align: middle; } + .el-table td div { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-table td.gutter { + width: 0; } + .el-table .cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; + word-break: break-all; + line-height: 23px; + padding-left: 10px; + padding-right: 10px; } + .el-table .cell.el-tooltip { + white-space: nowrap; + min-width: 50px; } + .el-table--group, .el-table--border { + border: 1px solid #EBEEF5; } + .el-table--group::after, .el-table--border::after, .el-table::before { + content: ''; + position: absolute; + background-color: #EBEEF5; + z-index: 1; } + .el-table--group::after, .el-table--border::after { + top: 0; + right: 0; + width: 1px; + height: 100%; } + .el-table::before { + left: 0; + bottom: 0; + width: 100%; + height: 1px; } + .el-table--border { + border-right: none; + border-bottom: none; } + .el-table--border.el-loading-parent--relative { + border-color: transparent; } + .el-table--border th, .el-table--border td { + border-right: 1px solid #EBEEF5; } + .el-table--border th:first-child .cell, .el-table--border td:first-child .cell { + padding-left: 10px; } + .el-table--border th.gutter:last-of-type { + border-bottom: 1px solid #EBEEF5; + border-bottom-width: 1px; } + .el-table--border th { + border-bottom: 1px solid #EBEEF5; } + .el-table--hidden { + visibility: hidden; } + .el-table__fixed, .el-table__fixed-right { + position: absolute; + top: 0; + left: 0; + overflow-x: hidden; + overflow-y: hidden; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); } + .el-table__fixed::before, .el-table__fixed-right::before { + content: ''; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 1px; + background-color: #EBEEF5; + z-index: 4; } + .el-table__fixed-right-patch { + position: absolute; + top: -1px; + right: 0; + background-color: #FFFFFF; + border-bottom: 1px solid #EBEEF5; } + .el-table__fixed-right { + top: 0; + left: auto; + right: 0; } + .el-table__fixed-right .el-table__fixed-header-wrapper, + .el-table__fixed-right .el-table__fixed-body-wrapper, + .el-table__fixed-right .el-table__fixed-footer-wrapper { + left: auto; + right: 0; } + .el-table__fixed-header-wrapper { + position: absolute; + left: 0; + top: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper { + position: absolute; + left: 0; + bottom: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper tbody td { + border-top: 1px solid #EBEEF5; + background-color: #F5F7FA; + color: #606266; } + .el-table__fixed-body-wrapper { + position: absolute; + left: 0; + top: 37px; + overflow: hidden; + z-index: 3; } + .el-table__header-wrapper, .el-table__body-wrapper, .el-table__footer-wrapper { + width: 100%; } + .el-table__footer-wrapper { + margin-top: -1px; } + .el-table__footer-wrapper td { + border-top: 1px solid #EBEEF5; } + .el-table__header, .el-table__body, .el-table__footer { + table-layout: fixed; + border-collapse: separate; } + .el-table__header-wrapper, .el-table__footer-wrapper { + overflow: hidden; } + .el-table__header-wrapper tbody td, .el-table__footer-wrapper tbody td { + background-color: #F5F7FA; + color: #606266; } + .el-table__body-wrapper { + overflow: hidden; + position: relative; } + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed, + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-left ~ .el-table__fixed { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-right ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper .el-table--border.is-scrolling-right ~ .el-table__fixed-right { + border-left: 1px solid #EBEEF5; } + .el-table__body-wrapper .el-table--border.is-scrolling-left ~ .el-table__fixed { + border-right: 1px solid #EBEEF5; } + .el-table .caret-wrapper { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + width: 24px; + vertical-align: middle; + cursor: pointer; + overflow: initial; + position: relative; } + .el-table .sort-caret { + width: 0; + height: 0; + border: solid 5px transparent; + position: absolute; + left: 7px; } + .el-table .sort-caret.ascending { + border-bottom-color: #C0C4CC; + top: 5px; } + .el-table .sort-caret.descending { + border-top-color: #C0C4CC; + bottom: 7px; } + .el-table .ascending .sort-caret.ascending { + border-bottom-color: #409EFF; } + .el-table .descending .sort-caret.descending { + border-top-color: #409EFF; } + .el-table .hidden-columns { + visibility: hidden; + position: absolute; + z-index: -1; } + .el-table--striped .el-table__body tr.el-table__row--striped td { + background: #FAFAFA; } + .el-table--striped .el-table__body tr.el-table__row--striped.current-row td { + background-color: #ecf5ff; } + .el-table__body tr.hover-row > td, .el-table__body tr.hover-row.current-row > td, .el-table__body tr.hover-row.el-table__row--striped > td, .el-table__body tr.hover-row.el-table__row--striped.current-row > td { + background-color: #F5F7FA; } + .el-table__body tr.current-row > td { + background-color: #ecf5ff; } + .el-table__column-resize-proxy { + position: absolute; + left: 200px; + top: 0; + bottom: 0; + width: 0; + border-left: 1px solid #EBEEF5; + z-index: 10; } + .el-table__column-filter-trigger { + display: inline-block; + line-height: 34px; + cursor: pointer; } + .el-table__column-filter-trigger i { + color: #909399; + font-size: 12px; + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .el-table--enable-row-transition .el-table__body td { + -webkit-transition: background-color .25s ease; + transition: background-color .25s ease; } + .el-table--enable-row-hover .el-table__body tr:hover > td { + background-color: #F5F7FA; } + .el-table--fluid-height .el-table__fixed, + .el-table--fluid-height .el-table__fixed-right { + bottom: 0; + overflow: hidden; } + .el-table [class*=el-table__row--level] .el-table__expand-icon { + display: inline-block; + width: 20px; + line-height: 20px; + height: 20px; + text-align: center; + margin-right: 3px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table-column--selection .cell { + padding-left: 14px; + padding-right: 14px; } + +.el-table-filter { + border: solid 1px #EBEEF5; + border-radius: 2px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 2px 0; + /** used for dropdown mode */ } + .el-table-filter__list { + padding: 5px 0; + margin: 0; + list-style: none; + min-width: 100px; } + .el-table-filter__list-item { + line-height: 36px; + padding: 0 10px; + cursor: pointer; + font-size: 14px; } + .el-table-filter__list-item:hover { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__list-item.is-active { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__content { + min-width: 100px; } + .el-table-filter__bottom { + border-top: 1px solid #EBEEF5; + padding: 8px; } + .el-table-filter__bottom button { + background: transparent; + border: none; + color: #606266; + cursor: pointer; + font-size: 13px; + padding: 0 3px; } + .el-table-filter__bottom button:hover { + color: #409EFF; } + .el-table-filter__bottom button:focus { + outline: none; } + .el-table-filter__bottom button.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-table-filter__wrap { + max-height: 280px; } + .el-table-filter__checkbox-group { + padding: 10px; } + .el-table-filter__checkbox-group label.el-checkbox { + display: block; + margin-right: 5px; + margin-bottom: 8px; + margin-left: 5px; } + .el-table-filter__checkbox-group .el-checkbox:last-child { + margin-bottom: 0; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-date-table { + font-size: 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-date-table.is-week-mode .el-date-table__row:hover div { + background-color: #F2F6FC; } + .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover { + color: #606266; } + .el-date-table.is-week-mode .el-date-table__row:hover td:first-child div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row:hover td:last-child div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table.is-week-mode .el-date-table__row.current div { + background-color: #F2F6FC; } + .el-date-table td { + width: 32px; + height: 30px; + padding: 4px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + cursor: pointer; + position: relative; } + .el-date-table td div { + height: 30px; + padding: 3px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-table td span { + width: 24px; + height: 24px; + display: block; + margin: 0 auto; + line-height: 24px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + border-radius: 50%; } + .el-date-table td.next-month, .el-date-table td.prev-month { + color: #C0C4CC; } + .el-date-table td.today { + position: relative; } + .el-date-table td.today span { + color: #409EFF; + font-weight: bold; } + .el-date-table td.today.start-date span, + .el-date-table td.today.end-date span { + color: #FFFFFF; } + .el-date-table td.available:hover { + color: #409EFF; } + .el-date-table td.in-range div { + background-color: #F2F6FC; } + .el-date-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-date-table td.current:not(.disabled) span { + color: #FFFFFF; + background-color: #409EFF; } + .el-date-table td.start-date div, + .el-date-table td.end-date div { + color: #FFFFFF; } + .el-date-table td.start-date span, + .el-date-table td.end-date span { + background-color: #409EFF; } + .el-date-table td.start-date div { + margin-left: 5px; + border-top-left-radius: 15px; + border-bottom-left-radius: 15px; } + .el-date-table td.end-date div { + margin-right: 5px; + border-top-right-radius: 15px; + border-bottom-right-radius: 15px; } + .el-date-table td.disabled div { + background-color: #F5F7FA; + opacity: 1; + cursor: not-allowed; + color: #C0C4CC; } + .el-date-table td.selected div { + margin-left: 5px; + margin-right: 5px; + background-color: #F2F6FC; + border-radius: 15px; } + .el-date-table td.selected div:hover { + background-color: #F2F6FC; } + .el-date-table td.selected span { + background-color: #409EFF; + color: #FFFFFF; + border-radius: 15px; } + .el-date-table td.week { + font-size: 80%; + color: #606266; } + .el-date-table th { + padding: 5px; + color: #606266; + font-weight: 400; + border-bottom: solid 1px #EBEEF5; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-month-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-month-table td { + text-align: center; + padding: 8px 0px; + cursor: pointer; } + .el-month-table td div { + height: 48px; + padding: 6px 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-month-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-month-table td.today.start-date .cell, + .el-month-table td.today.end-date .cell { + color: #FFFFFF; } + .el-month-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-month-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-month-table td .cell { + width: 60px; + height: 36px; + display: block; + line-height: 36px; + color: #606266; + margin: 0 auto; + border-radius: 18px; } + .el-month-table td .cell:hover { + color: #409EFF; } + .el-month-table td.in-range div { + background-color: #F2F6FC; } + .el-month-table td.in-range div:hover { + background-color: #F2F6FC; } + .el-month-table td.start-date div, + .el-month-table td.end-date div { + color: #FFFFFF; } + .el-month-table td.start-date .cell, + .el-month-table td.end-date .cell { + color: #FFFFFF; + background-color: #409EFF; } + .el-month-table td.start-date div { + border-top-left-radius: 24px; + border-bottom-left-radius: 24px; } + .el-month-table td.end-date div { + border-top-right-radius: 24px; + border-bottom-right-radius: 24px; } + .el-month-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-year-table { + font-size: 12px; + margin: -1px; + border-collapse: collapse; } + .el-year-table .el-icon { + color: #303133; } + .el-year-table td { + text-align: center; + padding: 20px 3px; + cursor: pointer; } + .el-year-table td.today .cell { + color: #409EFF; + font-weight: bold; } + .el-year-table td.disabled .cell { + background-color: #F5F7FA; + cursor: not-allowed; + color: #C0C4CC; } + .el-year-table td.disabled .cell:hover { + color: #C0C4CC; } + .el-year-table td .cell { + width: 48px; + height: 32px; + display: block; + line-height: 32px; + color: #606266; + margin: 0 auto; } + .el-year-table td .cell:hover { + color: #409EFF; } + .el-year-table td.current:not(.disabled) .cell { + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-date-range-picker { + width: 646px; } + .el-date-range-picker.has-sidebar { + width: 756px; } + .el-date-range-picker table { + table-layout: fixed; + width: 100%; } + .el-date-range-picker .el-picker-panel__body { + min-width: 513px; } + .el-date-range-picker .el-picker-panel__content { + margin: 0; } + .el-date-range-picker__header { + position: relative; + text-align: center; + height: 28px; } + .el-date-range-picker__header [class*=arrow-left] { + float: left; } + .el-date-range-picker__header [class*=arrow-right] { + float: right; } + .el-date-range-picker__header div { + font-size: 16px; + font-weight: 500; + margin-right: 50px; } + .el-date-range-picker__content { + float: left; + width: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 16px; } + .el-date-range-picker__content.is-left { + border-right: 1px solid #e4e4e4; } + .el-date-range-picker__content .el-date-range-picker__header div { + margin-left: 50px; + margin-right: 50px; } + .el-date-range-picker__editors-wrap { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: table-cell; } + .el-date-range-picker__editors-wrap.is-right { + text-align: right; } + .el-date-range-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-range-picker__time-header > .el-icon-arrow-right { + font-size: 20px; + vertical-align: middle; + display: table-cell; + color: #303133; } + .el-date-range-picker__time-picker-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-range-picker__time-picker-wrap .el-picker-panel { + position: absolute; + top: 13px; + right: 0; + z-index: 1; + background: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.time-select { + margin: 5px 0; + min-width: 0; } + +.time-select .el-picker-panel__content { + max-height: 200px; + margin: 0; } + +.time-select-item { + padding: 8px 10px; + font-size: 14px; + line-height: 20px; } + +.time-select-item.selected:not(.disabled) { + color: #409EFF; + font-weight: bold; } + +.time-select-item.disabled { + color: #E4E7ED; + cursor: not-allowed; } + +.time-select-item:hover { + background-color: #F5F7FA; + font-weight: bold; + cursor: pointer; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-popover { + position: absolute; + background: #FFFFFF; + min-width: 150px; + border-radius: 4px; + border: 1px solid #EBEEF5; + padding: 12px; + z-index: 2000; + color: #606266; + line-height: 1.4; + text-align: justify; + font-size: 14px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + word-break: break-all; } + .el-popover--plain { + padding: 18px 20px; } + .el-popover__title { + color: #303133; + font-size: 16px; + line-height: 1; + margin-bottom: 12px; } + .el-popover__reference:focus:not(.focusing), .el-popover__reference:focus:hover { + outline-width: 0; } + .el-popover:focus:active, .el-popover:focus { + outline-width: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-message-box { + display: inline-block; + width: 420px; + padding-bottom: 10px; + vertical-align: middle; + background-color: #FFFFFF; + border-radius: 4px; + border: 1px solid #EBEEF5; + font-size: 18px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + text-align: left; + overflow: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .el-message-box__wrapper { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + text-align: center; } + .el-message-box__wrapper::after { + content: ""; + display: inline-block; + height: 100%; + width: 0; + vertical-align: middle; } + .el-message-box__header { + position: relative; + padding: 15px; + padding-bottom: 10px; } + .el-message-box__title { + padding-left: 0; + margin-bottom: 0; + font-size: 18px; + line-height: 1; + color: #303133; } + .el-message-box__headerbtn { + position: absolute; + top: 15px; + right: 15px; + padding: 0; + border: none; + outline: none; + background: transparent; + font-size: 16px; + cursor: pointer; } + .el-message-box__headerbtn .el-message-box__close { + color: #909399; } + .el-message-box__headerbtn:focus .el-message-box__close, .el-message-box__headerbtn:hover .el-message-box__close { + color: #409EFF; } + .el-message-box__content { + padding: 10px 15px; + color: #606266; + font-size: 14px; } + .el-message-box__container { + position: relative; } + .el-message-box__input { + padding-top: 15px; } + .el-message-box__input input.invalid { + border-color: #F56C6C; } + .el-message-box__input input.invalid:focus { + border-color: #F56C6C; } + .el-message-box__status { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: 24px !important; } + .el-message-box__status::before { + padding-left: 1px; } + .el-message-box__status + .el-message-box__message { + padding-left: 36px; + padding-right: 12px; } + .el-message-box__status.el-icon-success { + color: #67C23A; } + .el-message-box__status.el-icon-info { + color: #909399; } + .el-message-box__status.el-icon-warning { + color: #E6A23C; } + .el-message-box__status.el-icon-error { + color: #F56C6C; } + .el-message-box__message { + margin: 0; } + .el-message-box__message p { + margin: 0; + line-height: 24px; } + .el-message-box__errormsg { + color: #F56C6C; + font-size: 12px; + min-height: 18px; + margin-top: 2px; } + .el-message-box__btns { + padding: 5px 15px 0; + text-align: right; } + .el-message-box__btns button:nth-child(2) { + margin-left: 10px; } + .el-message-box__btns-reverse { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .el-message-box--center { + padding-bottom: 30px; } + .el-message-box--center .el-message-box__header { + padding-top: 30px; } + .el-message-box--center .el-message-box__title { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message-box--center .el-message-box__status { + position: relative; + top: auto; + padding-right: 5px; + text-align: center; + -webkit-transform: translateY(-1px); + transform: translateY(-1px); } + .el-message-box--center .el-message-box__message { + margin-left: 0; } + .el-message-box--center .el-message-box__btns, .el-message-box--center .el-message-box__content { + text-align: center; } + .el-message-box--center .el-message-box__content { + padding-left: 27px; + padding-right: 27px; } + +.msgbox-fade-enter-active { + -webkit-animation: msgbox-fade-in .3s; + animation: msgbox-fade-in .3s; } + +.msgbox-fade-leave-active { + -webkit-animation: msgbox-fade-out .3s; + animation: msgbox-fade-out .3s; } + +@-webkit-keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-breadcrumb { + font-size: 14px; + line-height: 1; } + .el-breadcrumb::before, + .el-breadcrumb::after { + display: table; + content: ""; } + .el-breadcrumb::after { + clear: both; } + .el-breadcrumb__separator { + margin: 0 9px; + font-weight: bold; + color: #C0C4CC; } + .el-breadcrumb__separator[class*=icon] { + margin: 0 6px; + font-weight: normal; } + .el-breadcrumb__item { + float: left; } + .el-breadcrumb__inner { + color: #606266; } + .el-breadcrumb__inner.is-link, .el-breadcrumb__inner a { + font-weight: bold; + text-decoration: none; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + color: #303133; } + .el-breadcrumb__inner.is-link:hover, .el-breadcrumb__inner a:hover { + color: #409EFF; + cursor: pointer; } + .el-breadcrumb__item:last-child .el-breadcrumb__inner, .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a, + .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover { + font-weight: normal; + color: #606266; + cursor: text; } + .el-breadcrumb__item:last-child .el-breadcrumb__separator { + display: none; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-form--label-left .el-form-item__label { + text-align: left; } + +.el-form--label-top .el-form-item__label { + float: none; + display: inline-block; + text-align: left; + padding: 0 0 10px 0; } + +.el-form--inline .el-form-item { + display: inline-block; + margin-right: 10px; + vertical-align: top; } + +.el-form--inline .el-form-item__label { + float: none; + display: inline-block; } + +.el-form--inline .el-form-item__content { + display: inline-block; + vertical-align: top; } + +.el-form--inline.el-form--label-top .el-form-item__content { + display: block; } + +.el-form-item { + margin-bottom: 22px; } + .el-form-item::before, + .el-form-item::after { + display: table; + content: ""; } + .el-form-item::after { + clear: both; } + .el-form-item .el-form-item { + margin-bottom: 0; } + .el-form-item .el-input__validateIcon { + display: none; } + .el-form-item--medium .el-form-item__label { + line-height: 36px; } + .el-form-item--medium .el-form-item__content { + line-height: 36px; } + .el-form-item--small .el-form-item__label { + line-height: 32px; } + .el-form-item--small .el-form-item__content { + line-height: 32px; } + .el-form-item--small.el-form-item { + margin-bottom: 18px; } + .el-form-item--small .el-form-item__error { + padding-top: 2px; } + .el-form-item--mini .el-form-item__label { + line-height: 28px; } + .el-form-item--mini .el-form-item__content { + line-height: 28px; } + .el-form-item--mini.el-form-item { + margin-bottom: 18px; } + .el-form-item--mini .el-form-item__error { + padding-top: 1px; } + .el-form-item__label-wrap { + float: left; } + .el-form-item__label-wrap .el-form-item__label { + display: inline-block; + float: none; } + .el-form-item__label { + text-align: right; + vertical-align: middle; + float: left; + font-size: 14px; + color: #606266; + line-height: 40px; + padding: 0 12px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-form-item__content { + line-height: 40px; + position: relative; + font-size: 14px; } + .el-form-item__content::before, + .el-form-item__content::after { + display: table; + content: ""; } + .el-form-item__content::after { + clear: both; } + .el-form-item__content .el-input-group { + vertical-align: top; } + .el-form-item__error { + color: #F56C6C; + font-size: 12px; + line-height: 1; + padding-top: 4px; + position: absolute; + top: 100%; + left: 0; } + .el-form-item__error--inline { + position: relative; + top: auto; + left: auto; + display: inline-block; + margin-left: 10px; } + .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before, + .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap > .el-form-item__label:before { + content: '*'; + color: #F56C6C; + margin-right: 4px; } + .el-form-item.is-error .el-input__inner, .el-form-item.is-error .el-input__inner:focus, + .el-form-item.is-error .el-textarea__inner, + .el-form-item.is-error .el-textarea__inner:focus { + border-color: #F56C6C; } + .el-form-item.is-error .el-input-group__append .el-input__inner, + .el-form-item.is-error .el-input-group__prepend .el-input__inner { + border-color: transparent; } + .el-form-item.is-error .el-input__validateIcon { + color: #F56C6C; } + .el-form-item--feedback .el-input__validateIcon { + display: inline-block; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tabs__header { + padding: 0; + position: relative; + margin: 0 0 15px; } + +.el-tabs__active-bar { + position: absolute; + bottom: 0; + left: 0; + height: 2px; + background-color: #409EFF; + z-index: 1; + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + list-style: none; } + +.el-tabs__new-tab { + float: right; + border: 1px solid #d3dce6; + height: 18px; + width: 18px; + line-height: 18px; + margin: 12px 0 9px 10px; + border-radius: 3px; + text-align: center; + font-size: 12px; + color: #d3dce6; + cursor: pointer; + -webkit-transition: all .15s; + transition: all .15s; } + .el-tabs__new-tab .el-icon-plus { + -webkit-transform: scale(0.8, 0.8); + transform: scale(0.8, 0.8); } + .el-tabs__new-tab:hover { + color: #409EFF; } + +.el-tabs__nav-wrap { + overflow: hidden; + margin-bottom: -1px; + position: relative; } + .el-tabs__nav-wrap::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 2px; + background-color: #E4E7ED; + z-index: 1; } + .el-tabs__nav-wrap.is-scrollable { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs__nav-scroll { + overflow: hidden; } + +.el-tabs__nav-next, .el-tabs__nav-prev { + position: absolute; + cursor: pointer; + line-height: 44px; + font-size: 12px; + color: #909399; } + +.el-tabs__nav-next { + right: 0; } + +.el-tabs__nav-prev { + left: 0; } + +.el-tabs__nav { + white-space: nowrap; + position: relative; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + float: left; + z-index: 2; } + .el-tabs__nav.is-stretch { + min-width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-tabs__nav.is-stretch > * { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + text-align: center; } + +.el-tabs__item { + padding: 0 20px; + height: 40px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: 40px; + display: inline-block; + list-style: none; + font-size: 14px; + font-weight: 500; + color: #303133; + position: relative; } + .el-tabs__item:focus, .el-tabs__item:focus:active { + outline: none; } + .el-tabs__item:focus.is-active.is-focus:not(:active) { + -webkit-box-shadow: 0 0 2px 2px #409EFF inset; + box-shadow: 0 0 2px 2px #409EFF inset; + border-radius: 3px; } + .el-tabs__item .el-icon-close { + border-radius: 50%; + text-align: center; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + margin-left: 5px; } + .el-tabs__item .el-icon-close:before { + -webkit-transform: scale(0.9); + transform: scale(0.9); + display: inline-block; } + .el-tabs__item .el-icon-close:hover { + background-color: #C0C4CC; + color: #FFFFFF; } + .el-tabs__item.is-active { + color: #409EFF; } + .el-tabs__item:hover { + color: #409EFF; + cursor: pointer; } + .el-tabs__item.is-disabled { + color: #C0C4CC; + cursor: default; } + +.el-tabs__content { + overflow: hidden; + position: relative; } + +.el-tabs--card > .el-tabs__header { + border-bottom: 1px solid #E4E7ED; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav { + border: 1px solid #E4E7ED; + border-bottom: none; + border-radius: 4px 4px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs--card > .el-tabs__header .el-tabs__active-bar { + display: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__item .el-icon-close { + position: relative; + font-size: 12px; + width: 0; + height: 14px; + vertical-align: middle; + line-height: 15px; + overflow: hidden; + top: -1px; + right: -2px; + -webkit-transform-origin: 100% 50%; + transform-origin: 100% 50%; } + +.el-tabs--card > .el-tabs__header .el-tabs__item { + border-bottom: 1px solid transparent; + border-left: 1px solid #E4E7ED; + -webkit-transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-tabs--card > .el-tabs__header .el-tabs__item:first-child { + border-left: none; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover { + padding-left: 13px; + padding-right: 13px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close { + width: 14px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active { + border-bottom-color: #FFFFFF; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable { + padding-left: 20px; + padding-right: 20px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close { + width: 14px; } + +.el-tabs--border-card { + background: #FFFFFF; + border: 1px solid #DCDFE6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); } + .el-tabs--border-card > .el-tabs__content { + padding: 15px; } + .el-tabs--border-card > .el-tabs__header { + background-color: #F5F7FA; + border-bottom: 1px solid #E4E7ED; + margin: 0; } + .el-tabs--border-card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item { + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + border: 1px solid transparent; + margin-top: -1px; + color: #909399; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:first-child { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item + .el-tabs__item { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + color: #409EFF; + background-color: #FFFFFF; + border-right-color: #DCDFE6; + border-left-color: #DCDFE6; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-disabled):hover { + color: #409EFF; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-disabled { + color: #C0C4CC; } + .el-tabs--border-card > .el-tabs__header .is-scrollable .el-tabs__item:first-child { + margin-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:nth-child(2), +.el-tabs--top .el-tabs__item.is-bottom:nth-child(2), .el-tabs--bottom .el-tabs__item.is-top:nth-child(2), +.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2) { + padding-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:last-child, +.el-tabs--top .el-tabs__item.is-bottom:last-child, .el-tabs--bottom .el-tabs__item.is-top:last-child, +.el-tabs--bottom .el-tabs__item.is-bottom:last-child { + padding-right: 0; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2) { + padding-left: 20px; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:last-child { + padding-right: 20px; } + +.el-tabs--bottom .el-tabs__header.is-bottom { + margin-bottom: 0; + margin-top: 10px; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom { + border-bottom: 0; + border-top: 1px solid #DCDFE6; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom { + margin-top: -1px; + margin-bottom: 0; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active) { + border: 1px solid transparent; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom { + margin: 0 -1px -1px -1px; } + +.el-tabs--left, .el-tabs--right { + overflow: hidden; } + .el-tabs--left .el-tabs__header.is-left, + .el-tabs--left .el-tabs__header.is-right, + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, + .el-tabs--left .el-tabs__nav-scroll, .el-tabs--right .el-tabs__header.is-left, + .el-tabs--right .el-tabs__header.is-right, + .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right, + .el-tabs--right .el-tabs__nav-scroll { + height: 100%; } + .el-tabs--left .el-tabs__active-bar.is-left, + .el-tabs--left .el-tabs__active-bar.is-right, .el-tabs--right .el-tabs__active-bar.is-left, + .el-tabs--right .el-tabs__active-bar.is-right { + top: 0; + bottom: auto; + width: 2px; + height: auto; } + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right { + margin-bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + height: 30px; + line-height: 30px; + width: 100%; + text-align: center; + cursor: pointer; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i { + -webkit-transform: rotateZ(90deg); + transform: rotateZ(90deg); } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev { + left: auto; + top: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + right: auto; + bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable, .el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable { + padding: 30px 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after, + .el-tabs--left .el-tabs__nav-wrap.is-right::after, .el-tabs--right .el-tabs__nav-wrap.is-left::after, + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + height: 100%; + width: 2px; + bottom: auto; + top: 0; } + .el-tabs--left .el-tabs__nav.is-left, + .el-tabs--left .el-tabs__nav.is-right, .el-tabs--right .el-tabs__nav.is-left, + .el-tabs--right .el-tabs__nav.is-right { + float: none; } + .el-tabs--left .el-tabs__item.is-left, + .el-tabs--left .el-tabs__item.is-right, .el-tabs--right .el-tabs__item.is-left, + .el-tabs--right .el-tabs__item.is-right { + display: block; } + +.el-tabs--left .el-tabs__header.is-left { + float: left; + margin-bottom: 0; + margin-right: 10px; } + +.el-tabs--left .el-tabs__nav-wrap.is-left { + margin-right: -1px; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after { + left: auto; + right: 0; } + +.el-tabs--left .el-tabs__active-bar.is-left { + right: 0; + left: auto; } + +.el-tabs--left .el-tabs__item.is-left { + text-align: right; } + +.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left { + display: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left { + border-left: none; + border-right: 1px solid #E4E7ED; + border-bottom: none; + border-top: 1px solid #E4E7ED; + text-align: left; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child { + border-right: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active { + border: 1px solid #E4E7ED; + border-right-color: #fff; + border-left: none; + border-bottom: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child { + border-top: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child { + border-bottom: none; } + +.el-tabs--left.el-tabs--card .el-tabs__nav { + border-radius: 4px 0 0 4px; + border-bottom: 1px solid #E4E7ED; + border-right: none; } + +.el-tabs--left.el-tabs--card .el-tabs__new-tab { + float: none; } + +.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left { + border-right: 1px solid #dfe4ed; } + +.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left { + border: 1px solid transparent; + margin: -1px 0 -1px -1px; } + .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.el-tabs--right .el-tabs__header.is-right { + float: right; + margin-bottom: 0; + margin-left: 10px; } + +.el-tabs--right .el-tabs__nav-wrap.is-right { + margin-left: -1px; } + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + left: 0; + right: auto; } + +.el-tabs--right .el-tabs__active-bar.is-right { + left: 0; } + +.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right { + display: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right { + border-bottom: none; + border-top: 1px solid #E4E7ED; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child { + border-left: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active { + border: 1px solid #E4E7ED; + border-left-color: #fff; + border-right: none; + border-bottom: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child { + border-top: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child { + border-bottom: none; } + +.el-tabs--right.el-tabs--card .el-tabs__nav { + border-radius: 0 4px 4px 0; + border-bottom: 1px solid #E4E7ED; + border-left: none; } + +.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right { + border-left: 1px solid #dfe4ed; } + +.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right { + border: 1px solid transparent; + margin: -1px -1px -1px 0; } + .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.slideInRight-transition, +.slideInLeft-transition { + display: inline-block; } + +.slideInRight-enter { + -webkit-animation: slideInRight-enter .3s; + animation: slideInRight-enter .3s; } + +.slideInRight-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInRight-leave .3s; + animation: slideInRight-leave .3s; } + +.slideInLeft-enter { + -webkit-animation: slideInLeft-enter .3s; + animation: slideInLeft-enter .3s; } + +.slideInLeft-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInLeft-leave .3s; + animation: slideInLeft-leave .3s; } + +@-webkit-keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@-webkit-keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } + +@keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-tree { + position: relative; + cursor: default; + background: #FFFFFF; + color: #606266; } + .el-tree__empty-block { + position: relative; + min-height: 60px; + text-align: center; + width: 100%; + height: 100%; } + .el-tree__empty-text { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + color: #909399; + font-size: 14px; } + .el-tree__drop-indicator { + position: absolute; + left: 0; + right: 0; + height: 1px; + background-color: #409EFF; } + +.el-tree-node { + white-space: nowrap; + outline: none; } + .el-tree-node:focus { + /* focus */ } + .el-tree-node:focus > .el-tree-node__content { + background-color: #F5F7FA; } + .el-tree-node.is-drop-inner > .el-tree-node__content .el-tree-node__label { + background-color: #409EFF; + color: #fff; } + .el-tree-node__content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 26px; + cursor: pointer; } + .el-tree-node__content > .el-tree-node__expand-icon { + padding: 6px; } + .el-tree-node__content > label.el-checkbox { + margin-right: 8px; } + .el-tree-node__content:hover { + background-color: #F5F7FA; } + .el-tree.is-dragging .el-tree-node__content { + cursor: move; } + .el-tree.is-dragging .el-tree-node__content * { + pointer-events: none; } + .el-tree.is-dragging.is-drop-not-allow .el-tree-node__content { + cursor: not-allowed; } + .el-tree-node__expand-icon { + cursor: pointer; + color: #C0C4CC; + font-size: 12px; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; } + .el-tree-node__expand-icon.expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-tree-node__expand-icon.is-leaf { + color: transparent; + cursor: default; } + .el-tree-node__label { + font-size: 14px; } + .el-tree-node__loading-icon { + margin-right: 8px; + font-size: 14px; + color: #C0C4CC; } + .el-tree-node > .el-tree-node__children { + overflow: hidden; + background-color: transparent; } + .el-tree-node.is-expanded > .el-tree-node__children { + display: block; } + +.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content { + background-color: #f0f7ff; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-alert { + width: 100%; + padding: 8px 16px; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + position: relative; + background-color: #FFFFFF; + overflow: hidden; + opacity: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-transition: opacity .2s; + transition: opacity .2s; } + .el-alert.is-light .el-alert__closebtn { + color: #C0C4CC; } + .el-alert.is-dark .el-alert__closebtn { + color: #FFFFFF; } + .el-alert.is-dark .el-alert__description { + color: #FFFFFF; } + .el-alert.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-alert--success.is-light { + background-color: #f0f9eb; + color: #67C23A; } + .el-alert--success.is-light .el-alert__description { + color: #67C23A; } + .el-alert--success.is-dark { + background-color: #67C23A; + color: #FFFFFF; } + .el-alert--info.is-light { + background-color: #f4f4f5; + color: #909399; } + .el-alert--info.is-dark { + background-color: #909399; + color: #FFFFFF; } + .el-alert--info .el-alert__description { + color: #909399; } + .el-alert--warning.is-light { + background-color: #fdf6ec; + color: #E6A23C; } + .el-alert--warning.is-light .el-alert__description { + color: #E6A23C; } + .el-alert--warning.is-dark { + background-color: #E6A23C; + color: #FFFFFF; } + .el-alert--error.is-light { + background-color: #fef0f0; + color: #F56C6C; } + .el-alert--error.is-light .el-alert__description { + color: #F56C6C; } + .el-alert--error.is-dark { + background-color: #F56C6C; + color: #FFFFFF; } + .el-alert__content { + display: table-cell; + padding: 0 8px; } + .el-alert__icon { + font-size: 16px; + width: 16px; } + .el-alert__icon.is-big { + font-size: 28px; + width: 28px; } + .el-alert__title { + font-size: 13px; + line-height: 18px; } + .el-alert__title.is-bold { + font-weight: bold; } + .el-alert .el-alert__description { + font-size: 12px; + margin: 5px 0 0 0; } + .el-alert__closebtn { + font-size: 12px; + opacity: 1; + position: absolute; + top: 12px; + right: 15px; + cursor: pointer; } + .el-alert__closebtn.is-customed { + font-style: normal; + font-size: 13px; + top: 9px; } + +.el-alert-fade-enter, +.el-alert-fade-leave-active { + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-notification { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 330px; + padding: 14px 26px 14px 13px; + border-radius: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #EBEEF5; + position: fixed; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + overflow: hidden; } + .el-notification.right { + right: 16px; } + .el-notification.left { + left: 16px; } + .el-notification__group { + margin-left: 13px; + margin-right: 8px; } + .el-notification__title { + font-weight: bold; + font-size: 16px; + color: #303133; + margin: 0; } + .el-notification__content { + font-size: 14px; + line-height: 21px; + margin: 6px 0 0 0; + color: #606266; + text-align: justify; } + .el-notification__content p { + margin: 0; } + .el-notification__icon { + height: 24px; + width: 24px; + font-size: 24px; } + .el-notification__closeBtn { + position: absolute; + top: 18px; + right: 15px; + cursor: pointer; + color: #909399; + font-size: 16px; } + .el-notification__closeBtn:hover { + color: #606266; } + .el-notification .el-icon-success { + color: #67C23A; } + .el-notification .el-icon-error { + color: #F56C6C; } + .el-notification .el-icon-info { + color: #909399; } + .el-notification .el-icon-warning { + color: #E6A23C; } + +.el-notification-fade-enter.right { + right: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + +.el-notification-fade-enter.left { + left: 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + +.el-notification-fade-leave-active { + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-slider::before, +.el-slider::after { + display: table; + content: ""; } + +.el-slider::after { + clear: both; } + +.el-slider__runway { + width: 100%; + height: 6px; + margin: 16px 0; + background-color: #E4E7ED; + border-radius: 3px; + position: relative; + cursor: pointer; + vertical-align: middle; } + .el-slider__runway.show-input { + margin-right: 160px; + width: auto; } + .el-slider__runway.disabled { + cursor: default; } + .el-slider__runway.disabled .el-slider__bar { + background-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button { + border-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button-wrapper:hover, .el-slider__runway.disabled .el-slider__button-wrapper.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button-wrapper.dragging { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover, .el-slider__runway.disabled .el-slider__button.dragging { + -webkit-transform: scale(1); + transform: scale(1); } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button.dragging { + cursor: not-allowed; } + +.el-slider__input { + float: right; + margin-top: 3px; + width: 130px; } + .el-slider__input.el-input-number--mini { + margin-top: 5px; } + .el-slider__input.el-input-number--medium { + margin-top: 0; } + .el-slider__input.el-input-number--large { + margin-top: -2px; } + +.el-slider__bar { + height: 6px; + background-color: #409EFF; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + position: absolute; } + +.el-slider__button-wrapper { + height: 36px; + width: 36px; + position: absolute; + z-index: 1001; + top: -15px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: transparent; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + line-height: normal; } + .el-slider__button-wrapper::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-slider__button-wrapper .el-tooltip { + vertical-align: middle; + display: inline-block; } + .el-slider__button-wrapper:hover, .el-slider__button-wrapper.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button-wrapper.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__button { + width: 16px; + height: 16px; + border: solid 2px #409EFF; + background-color: #FFFFFF; + border-radius: 50%; + -webkit-transition: .2s; + transition: .2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-slider__button:hover, .el-slider__button.hover, .el-slider__button.dragging { + -webkit-transform: scale(1.2); + transform: scale(1.2); } + .el-slider__button:hover, .el-slider__button.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__stop { + position: absolute; + height: 6px; + width: 6px; + border-radius: 100%; + background-color: #FFFFFF; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.el-slider__marks { + top: 0; + left: 12px; + width: 18px; + height: 100%; } + .el-slider__marks-text { + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 14px; + color: #909399; + margin-top: 15px; } + +.el-slider.is-vertical { + position: relative; } + .el-slider.is-vertical .el-slider__runway { + width: 6px; + height: 100%; + margin: 0 16px; } + .el-slider.is-vertical .el-slider__bar { + width: 6px; + height: auto; + border-radius: 0 0 3px 3px; } + .el-slider.is-vertical .el-slider__button-wrapper { + top: auto; + left: -15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical .el-slider__stop { + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical.el-slider--with-input { + padding-bottom: 58px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input { + overflow: visible; + float: none; + position: absolute; + bottom: 22px; + width: 36px; + margin-top: 15px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner { + text-align: center; + padding-left: 5px; + padding-right: 5px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + top: 32px; + margin-top: -1px; + border: 1px solid #DCDFE6; + line-height: 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease { + width: 18px; + right: 18px; + border-bottom-left-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + width: 19px; + border-bottom-right-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase ~ .el-input .el-input__inner { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase { + border-color: #C0C4CC; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase { + border-color: #409EFF; } + .el-slider.is-vertical .el-slider__marks-text { + margin-top: 0; + left: 15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-loading-parent--relative { + position: relative !important; } + +.el-loading-parent--hidden { + overflow: hidden !important; } + +.el-loading-mask { + position: absolute; + z-index: 2000; + background-color: rgba(255, 255, 255, 0.9); + margin: 0; + top: 0; + right: 0; + bottom: 0; + left: 0; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; } + .el-loading-mask.is-fullscreen { + position: fixed; } + .el-loading-mask.is-fullscreen .el-loading-spinner { + margin-top: -25px; } + .el-loading-mask.is-fullscreen .el-loading-spinner .circular { + height: 50px; + width: 50px; } + +.el-loading-spinner { + top: 50%; + margin-top: -21px; + width: 100%; + text-align: center; + position: absolute; } + .el-loading-spinner .el-loading-text { + color: #409EFF; + margin: 3px 0; + font-size: 14px; } + .el-loading-spinner .circular { + height: 42px; + width: 42px; + -webkit-animation: loading-rotate 2s linear infinite; + animation: loading-rotate 2s linear infinite; } + .el-loading-spinner .path { + -webkit-animation: loading-dash 1.5s ease-in-out infinite; + animation: loading-dash 1.5s ease-in-out infinite; + stroke-dasharray: 90, 150; + stroke-dashoffset: 0; + stroke-width: 2; + stroke: #409EFF; + stroke-linecap: round; } + .el-loading-spinner i { + color: #409EFF; } + +.el-loading-fade-enter, +.el-loading-fade-leave-active { + opacity: 0; } + +@-webkit-keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } + +@keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-row { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-row::before, + .el-row::after { + display: table; + content: ""; } + .el-row::after { + clear: both; } + .el-row--flex { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-row--flex:before, .el-row--flex:after { + display: none; } + .el-row--flex.is-justify-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-row--flex.is-justify-end { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; } + .el-row--flex.is-justify-space-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; } + .el-row--flex.is-justify-space-around { + -ms-flex-pack: distribute; + justify-content: space-around; } + .el-row--flex.is-align-middle { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-row--flex.is-align-bottom { + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +[class*="el-col-"] { + float: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-col-0 { + display: none; } + +.el-col-0 { + width: 0%; } + +.el-col-offset-0 { + margin-left: 0%; } + +.el-col-pull-0 { + position: relative; + right: 0%; } + +.el-col-push-0 { + position: relative; + left: 0%; } + +.el-col-1 { + width: 4.16667%; } + +.el-col-offset-1 { + margin-left: 4.16667%; } + +.el-col-pull-1 { + position: relative; + right: 4.16667%; } + +.el-col-push-1 { + position: relative; + left: 4.16667%; } + +.el-col-2 { + width: 8.33333%; } + +.el-col-offset-2 { + margin-left: 8.33333%; } + +.el-col-pull-2 { + position: relative; + right: 8.33333%; } + +.el-col-push-2 { + position: relative; + left: 8.33333%; } + +.el-col-3 { + width: 12.5%; } + +.el-col-offset-3 { + margin-left: 12.5%; } + +.el-col-pull-3 { + position: relative; + right: 12.5%; } + +.el-col-push-3 { + position: relative; + left: 12.5%; } + +.el-col-4 { + width: 16.66667%; } + +.el-col-offset-4 { + margin-left: 16.66667%; } + +.el-col-pull-4 { + position: relative; + right: 16.66667%; } + +.el-col-push-4 { + position: relative; + left: 16.66667%; } + +.el-col-5 { + width: 20.83333%; } + +.el-col-offset-5 { + margin-left: 20.83333%; } + +.el-col-pull-5 { + position: relative; + right: 20.83333%; } + +.el-col-push-5 { + position: relative; + left: 20.83333%; } + +.el-col-6 { + width: 25%; } + +.el-col-offset-6 { + margin-left: 25%; } + +.el-col-pull-6 { + position: relative; + right: 25%; } + +.el-col-push-6 { + position: relative; + left: 25%; } + +.el-col-7 { + width: 29.16667%; } + +.el-col-offset-7 { + margin-left: 29.16667%; } + +.el-col-pull-7 { + position: relative; + right: 29.16667%; } + +.el-col-push-7 { + position: relative; + left: 29.16667%; } + +.el-col-8 { + width: 33.33333%; } + +.el-col-offset-8 { + margin-left: 33.33333%; } + +.el-col-pull-8 { + position: relative; + right: 33.33333%; } + +.el-col-push-8 { + position: relative; + left: 33.33333%; } + +.el-col-9 { + width: 37.5%; } + +.el-col-offset-9 { + margin-left: 37.5%; } + +.el-col-pull-9 { + position: relative; + right: 37.5%; } + +.el-col-push-9 { + position: relative; + left: 37.5%; } + +.el-col-10 { + width: 41.66667%; } + +.el-col-offset-10 { + margin-left: 41.66667%; } + +.el-col-pull-10 { + position: relative; + right: 41.66667%; } + +.el-col-push-10 { + position: relative; + left: 41.66667%; } + +.el-col-11 { + width: 45.83333%; } + +.el-col-offset-11 { + margin-left: 45.83333%; } + +.el-col-pull-11 { + position: relative; + right: 45.83333%; } + +.el-col-push-11 { + position: relative; + left: 45.83333%; } + +.el-col-12 { + width: 50%; } + +.el-col-offset-12 { + margin-left: 50%; } + +.el-col-pull-12 { + position: relative; + right: 50%; } + +.el-col-push-12 { + position: relative; + left: 50%; } + +.el-col-13 { + width: 54.16667%; } + +.el-col-offset-13 { + margin-left: 54.16667%; } + +.el-col-pull-13 { + position: relative; + right: 54.16667%; } + +.el-col-push-13 { + position: relative; + left: 54.16667%; } + +.el-col-14 { + width: 58.33333%; } + +.el-col-offset-14 { + margin-left: 58.33333%; } + +.el-col-pull-14 { + position: relative; + right: 58.33333%; } + +.el-col-push-14 { + position: relative; + left: 58.33333%; } + +.el-col-15 { + width: 62.5%; } + +.el-col-offset-15 { + margin-left: 62.5%; } + +.el-col-pull-15 { + position: relative; + right: 62.5%; } + +.el-col-push-15 { + position: relative; + left: 62.5%; } + +.el-col-16 { + width: 66.66667%; } + +.el-col-offset-16 { + margin-left: 66.66667%; } + +.el-col-pull-16 { + position: relative; + right: 66.66667%; } + +.el-col-push-16 { + position: relative; + left: 66.66667%; } + +.el-col-17 { + width: 70.83333%; } + +.el-col-offset-17 { + margin-left: 70.83333%; } + +.el-col-pull-17 { + position: relative; + right: 70.83333%; } + +.el-col-push-17 { + position: relative; + left: 70.83333%; } + +.el-col-18 { + width: 75%; } + +.el-col-offset-18 { + margin-left: 75%; } + +.el-col-pull-18 { + position: relative; + right: 75%; } + +.el-col-push-18 { + position: relative; + left: 75%; } + +.el-col-19 { + width: 79.16667%; } + +.el-col-offset-19 { + margin-left: 79.16667%; } + +.el-col-pull-19 { + position: relative; + right: 79.16667%; } + +.el-col-push-19 { + position: relative; + left: 79.16667%; } + +.el-col-20 { + width: 83.33333%; } + +.el-col-offset-20 { + margin-left: 83.33333%; } + +.el-col-pull-20 { + position: relative; + right: 83.33333%; } + +.el-col-push-20 { + position: relative; + left: 83.33333%; } + +.el-col-21 { + width: 87.5%; } + +.el-col-offset-21 { + margin-left: 87.5%; } + +.el-col-pull-21 { + position: relative; + right: 87.5%; } + +.el-col-push-21 { + position: relative; + left: 87.5%; } + +.el-col-22 { + width: 91.66667%; } + +.el-col-offset-22 { + margin-left: 91.66667%; } + +.el-col-pull-22 { + position: relative; + right: 91.66667%; } + +.el-col-push-22 { + position: relative; + left: 91.66667%; } + +.el-col-23 { + width: 95.83333%; } + +.el-col-offset-23 { + margin-left: 95.83333%; } + +.el-col-pull-23 { + position: relative; + right: 95.83333%; } + +.el-col-push-23 { + position: relative; + left: 95.83333%; } + +.el-col-24 { + width: 100%; } + +.el-col-offset-24 { + margin-left: 100%; } + +.el-col-pull-24 { + position: relative; + right: 100%; } + +.el-col-push-24 { + position: relative; + left: 100%; } + +@media only screen and (max-width: 767px) { + .el-col-xs-0 { + display: none; } + .el-col-xs-0 { + width: 0%; } + .el-col-xs-offset-0 { + margin-left: 0%; } + .el-col-xs-pull-0 { + position: relative; + right: 0%; } + .el-col-xs-push-0 { + position: relative; + left: 0%; } + .el-col-xs-1 { + width: 4.16667%; } + .el-col-xs-offset-1 { + margin-left: 4.16667%; } + .el-col-xs-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xs-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xs-2 { + width: 8.33333%; } + .el-col-xs-offset-2 { + margin-left: 8.33333%; } + .el-col-xs-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xs-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xs-3 { + width: 12.5%; } + .el-col-xs-offset-3 { + margin-left: 12.5%; } + .el-col-xs-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xs-push-3 { + position: relative; + left: 12.5%; } + .el-col-xs-4 { + width: 16.66667%; } + .el-col-xs-offset-4 { + margin-left: 16.66667%; } + .el-col-xs-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xs-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xs-5 { + width: 20.83333%; } + .el-col-xs-offset-5 { + margin-left: 20.83333%; } + .el-col-xs-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xs-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xs-6 { + width: 25%; } + .el-col-xs-offset-6 { + margin-left: 25%; } + .el-col-xs-pull-6 { + position: relative; + right: 25%; } + .el-col-xs-push-6 { + position: relative; + left: 25%; } + .el-col-xs-7 { + width: 29.16667%; } + .el-col-xs-offset-7 { + margin-left: 29.16667%; } + .el-col-xs-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xs-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xs-8 { + width: 33.33333%; } + .el-col-xs-offset-8 { + margin-left: 33.33333%; } + .el-col-xs-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xs-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xs-9 { + width: 37.5%; } + .el-col-xs-offset-9 { + margin-left: 37.5%; } + .el-col-xs-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xs-push-9 { + position: relative; + left: 37.5%; } + .el-col-xs-10 { + width: 41.66667%; } + .el-col-xs-offset-10 { + margin-left: 41.66667%; } + .el-col-xs-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xs-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xs-11 { + width: 45.83333%; } + .el-col-xs-offset-11 { + margin-left: 45.83333%; } + .el-col-xs-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xs-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xs-12 { + width: 50%; } + .el-col-xs-offset-12 { + margin-left: 50%; } + .el-col-xs-pull-12 { + position: relative; + right: 50%; } + .el-col-xs-push-12 { + position: relative; + left: 50%; } + .el-col-xs-13 { + width: 54.16667%; } + .el-col-xs-offset-13 { + margin-left: 54.16667%; } + .el-col-xs-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xs-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xs-14 { + width: 58.33333%; } + .el-col-xs-offset-14 { + margin-left: 58.33333%; } + .el-col-xs-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xs-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xs-15 { + width: 62.5%; } + .el-col-xs-offset-15 { + margin-left: 62.5%; } + .el-col-xs-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xs-push-15 { + position: relative; + left: 62.5%; } + .el-col-xs-16 { + width: 66.66667%; } + .el-col-xs-offset-16 { + margin-left: 66.66667%; } + .el-col-xs-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xs-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xs-17 { + width: 70.83333%; } + .el-col-xs-offset-17 { + margin-left: 70.83333%; } + .el-col-xs-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xs-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xs-18 { + width: 75%; } + .el-col-xs-offset-18 { + margin-left: 75%; } + .el-col-xs-pull-18 { + position: relative; + right: 75%; } + .el-col-xs-push-18 { + position: relative; + left: 75%; } + .el-col-xs-19 { + width: 79.16667%; } + .el-col-xs-offset-19 { + margin-left: 79.16667%; } + .el-col-xs-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xs-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xs-20 { + width: 83.33333%; } + .el-col-xs-offset-20 { + margin-left: 83.33333%; } + .el-col-xs-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xs-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xs-21 { + width: 87.5%; } + .el-col-xs-offset-21 { + margin-left: 87.5%; } + .el-col-xs-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xs-push-21 { + position: relative; + left: 87.5%; } + .el-col-xs-22 { + width: 91.66667%; } + .el-col-xs-offset-22 { + margin-left: 91.66667%; } + .el-col-xs-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xs-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xs-23 { + width: 95.83333%; } + .el-col-xs-offset-23 { + margin-left: 95.83333%; } + .el-col-xs-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xs-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xs-24 { + width: 100%; } + .el-col-xs-offset-24 { + margin-left: 100%; } + .el-col-xs-pull-24 { + position: relative; + right: 100%; } + .el-col-xs-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 768px) { + .el-col-sm-0 { + display: none; } + .el-col-sm-0 { + width: 0%; } + .el-col-sm-offset-0 { + margin-left: 0%; } + .el-col-sm-pull-0 { + position: relative; + right: 0%; } + .el-col-sm-push-0 { + position: relative; + left: 0%; } + .el-col-sm-1 { + width: 4.16667%; } + .el-col-sm-offset-1 { + margin-left: 4.16667%; } + .el-col-sm-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-sm-push-1 { + position: relative; + left: 4.16667%; } + .el-col-sm-2 { + width: 8.33333%; } + .el-col-sm-offset-2 { + margin-left: 8.33333%; } + .el-col-sm-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-sm-push-2 { + position: relative; + left: 8.33333%; } + .el-col-sm-3 { + width: 12.5%; } + .el-col-sm-offset-3 { + margin-left: 12.5%; } + .el-col-sm-pull-3 { + position: relative; + right: 12.5%; } + .el-col-sm-push-3 { + position: relative; + left: 12.5%; } + .el-col-sm-4 { + width: 16.66667%; } + .el-col-sm-offset-4 { + margin-left: 16.66667%; } + .el-col-sm-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-sm-push-4 { + position: relative; + left: 16.66667%; } + .el-col-sm-5 { + width: 20.83333%; } + .el-col-sm-offset-5 { + margin-left: 20.83333%; } + .el-col-sm-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-sm-push-5 { + position: relative; + left: 20.83333%; } + .el-col-sm-6 { + width: 25%; } + .el-col-sm-offset-6 { + margin-left: 25%; } + .el-col-sm-pull-6 { + position: relative; + right: 25%; } + .el-col-sm-push-6 { + position: relative; + left: 25%; } + .el-col-sm-7 { + width: 29.16667%; } + .el-col-sm-offset-7 { + margin-left: 29.16667%; } + .el-col-sm-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-sm-push-7 { + position: relative; + left: 29.16667%; } + .el-col-sm-8 { + width: 33.33333%; } + .el-col-sm-offset-8 { + margin-left: 33.33333%; } + .el-col-sm-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-sm-push-8 { + position: relative; + left: 33.33333%; } + .el-col-sm-9 { + width: 37.5%; } + .el-col-sm-offset-9 { + margin-left: 37.5%; } + .el-col-sm-pull-9 { + position: relative; + right: 37.5%; } + .el-col-sm-push-9 { + position: relative; + left: 37.5%; } + .el-col-sm-10 { + width: 41.66667%; } + .el-col-sm-offset-10 { + margin-left: 41.66667%; } + .el-col-sm-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-sm-push-10 { + position: relative; + left: 41.66667%; } + .el-col-sm-11 { + width: 45.83333%; } + .el-col-sm-offset-11 { + margin-left: 45.83333%; } + .el-col-sm-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-sm-push-11 { + position: relative; + left: 45.83333%; } + .el-col-sm-12 { + width: 50%; } + .el-col-sm-offset-12 { + margin-left: 50%; } + .el-col-sm-pull-12 { + position: relative; + right: 50%; } + .el-col-sm-push-12 { + position: relative; + left: 50%; } + .el-col-sm-13 { + width: 54.16667%; } + .el-col-sm-offset-13 { + margin-left: 54.16667%; } + .el-col-sm-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-sm-push-13 { + position: relative; + left: 54.16667%; } + .el-col-sm-14 { + width: 58.33333%; } + .el-col-sm-offset-14 { + margin-left: 58.33333%; } + .el-col-sm-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-sm-push-14 { + position: relative; + left: 58.33333%; } + .el-col-sm-15 { + width: 62.5%; } + .el-col-sm-offset-15 { + margin-left: 62.5%; } + .el-col-sm-pull-15 { + position: relative; + right: 62.5%; } + .el-col-sm-push-15 { + position: relative; + left: 62.5%; } + .el-col-sm-16 { + width: 66.66667%; } + .el-col-sm-offset-16 { + margin-left: 66.66667%; } + .el-col-sm-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-sm-push-16 { + position: relative; + left: 66.66667%; } + .el-col-sm-17 { + width: 70.83333%; } + .el-col-sm-offset-17 { + margin-left: 70.83333%; } + .el-col-sm-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-sm-push-17 { + position: relative; + left: 70.83333%; } + .el-col-sm-18 { + width: 75%; } + .el-col-sm-offset-18 { + margin-left: 75%; } + .el-col-sm-pull-18 { + position: relative; + right: 75%; } + .el-col-sm-push-18 { + position: relative; + left: 75%; } + .el-col-sm-19 { + width: 79.16667%; } + .el-col-sm-offset-19 { + margin-left: 79.16667%; } + .el-col-sm-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-sm-push-19 { + position: relative; + left: 79.16667%; } + .el-col-sm-20 { + width: 83.33333%; } + .el-col-sm-offset-20 { + margin-left: 83.33333%; } + .el-col-sm-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-sm-push-20 { + position: relative; + left: 83.33333%; } + .el-col-sm-21 { + width: 87.5%; } + .el-col-sm-offset-21 { + margin-left: 87.5%; } + .el-col-sm-pull-21 { + position: relative; + right: 87.5%; } + .el-col-sm-push-21 { + position: relative; + left: 87.5%; } + .el-col-sm-22 { + width: 91.66667%; } + .el-col-sm-offset-22 { + margin-left: 91.66667%; } + .el-col-sm-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-sm-push-22 { + position: relative; + left: 91.66667%; } + .el-col-sm-23 { + width: 95.83333%; } + .el-col-sm-offset-23 { + margin-left: 95.83333%; } + .el-col-sm-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-sm-push-23 { + position: relative; + left: 95.83333%; } + .el-col-sm-24 { + width: 100%; } + .el-col-sm-offset-24 { + margin-left: 100%; } + .el-col-sm-pull-24 { + position: relative; + right: 100%; } + .el-col-sm-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 992px) { + .el-col-md-0 { + display: none; } + .el-col-md-0 { + width: 0%; } + .el-col-md-offset-0 { + margin-left: 0%; } + .el-col-md-pull-0 { + position: relative; + right: 0%; } + .el-col-md-push-0 { + position: relative; + left: 0%; } + .el-col-md-1 { + width: 4.16667%; } + .el-col-md-offset-1 { + margin-left: 4.16667%; } + .el-col-md-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-md-push-1 { + position: relative; + left: 4.16667%; } + .el-col-md-2 { + width: 8.33333%; } + .el-col-md-offset-2 { + margin-left: 8.33333%; } + .el-col-md-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-md-push-2 { + position: relative; + left: 8.33333%; } + .el-col-md-3 { + width: 12.5%; } + .el-col-md-offset-3 { + margin-left: 12.5%; } + .el-col-md-pull-3 { + position: relative; + right: 12.5%; } + .el-col-md-push-3 { + position: relative; + left: 12.5%; } + .el-col-md-4 { + width: 16.66667%; } + .el-col-md-offset-4 { + margin-left: 16.66667%; } + .el-col-md-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-md-push-4 { + position: relative; + left: 16.66667%; } + .el-col-md-5 { + width: 20.83333%; } + .el-col-md-offset-5 { + margin-left: 20.83333%; } + .el-col-md-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-md-push-5 { + position: relative; + left: 20.83333%; } + .el-col-md-6 { + width: 25%; } + .el-col-md-offset-6 { + margin-left: 25%; } + .el-col-md-pull-6 { + position: relative; + right: 25%; } + .el-col-md-push-6 { + position: relative; + left: 25%; } + .el-col-md-7 { + width: 29.16667%; } + .el-col-md-offset-7 { + margin-left: 29.16667%; } + .el-col-md-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-md-push-7 { + position: relative; + left: 29.16667%; } + .el-col-md-8 { + width: 33.33333%; } + .el-col-md-offset-8 { + margin-left: 33.33333%; } + .el-col-md-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-md-push-8 { + position: relative; + left: 33.33333%; } + .el-col-md-9 { + width: 37.5%; } + .el-col-md-offset-9 { + margin-left: 37.5%; } + .el-col-md-pull-9 { + position: relative; + right: 37.5%; } + .el-col-md-push-9 { + position: relative; + left: 37.5%; } + .el-col-md-10 { + width: 41.66667%; } + .el-col-md-offset-10 { + margin-left: 41.66667%; } + .el-col-md-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-md-push-10 { + position: relative; + left: 41.66667%; } + .el-col-md-11 { + width: 45.83333%; } + .el-col-md-offset-11 { + margin-left: 45.83333%; } + .el-col-md-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-md-push-11 { + position: relative; + left: 45.83333%; } + .el-col-md-12 { + width: 50%; } + .el-col-md-offset-12 { + margin-left: 50%; } + .el-col-md-pull-12 { + position: relative; + right: 50%; } + .el-col-md-push-12 { + position: relative; + left: 50%; } + .el-col-md-13 { + width: 54.16667%; } + .el-col-md-offset-13 { + margin-left: 54.16667%; } + .el-col-md-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-md-push-13 { + position: relative; + left: 54.16667%; } + .el-col-md-14 { + width: 58.33333%; } + .el-col-md-offset-14 { + margin-left: 58.33333%; } + .el-col-md-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-md-push-14 { + position: relative; + left: 58.33333%; } + .el-col-md-15 { + width: 62.5%; } + .el-col-md-offset-15 { + margin-left: 62.5%; } + .el-col-md-pull-15 { + position: relative; + right: 62.5%; } + .el-col-md-push-15 { + position: relative; + left: 62.5%; } + .el-col-md-16 { + width: 66.66667%; } + .el-col-md-offset-16 { + margin-left: 66.66667%; } + .el-col-md-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-md-push-16 { + position: relative; + left: 66.66667%; } + .el-col-md-17 { + width: 70.83333%; } + .el-col-md-offset-17 { + margin-left: 70.83333%; } + .el-col-md-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-md-push-17 { + position: relative; + left: 70.83333%; } + .el-col-md-18 { + width: 75%; } + .el-col-md-offset-18 { + margin-left: 75%; } + .el-col-md-pull-18 { + position: relative; + right: 75%; } + .el-col-md-push-18 { + position: relative; + left: 75%; } + .el-col-md-19 { + width: 79.16667%; } + .el-col-md-offset-19 { + margin-left: 79.16667%; } + .el-col-md-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-md-push-19 { + position: relative; + left: 79.16667%; } + .el-col-md-20 { + width: 83.33333%; } + .el-col-md-offset-20 { + margin-left: 83.33333%; } + .el-col-md-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-md-push-20 { + position: relative; + left: 83.33333%; } + .el-col-md-21 { + width: 87.5%; } + .el-col-md-offset-21 { + margin-left: 87.5%; } + .el-col-md-pull-21 { + position: relative; + right: 87.5%; } + .el-col-md-push-21 { + position: relative; + left: 87.5%; } + .el-col-md-22 { + width: 91.66667%; } + .el-col-md-offset-22 { + margin-left: 91.66667%; } + .el-col-md-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-md-push-22 { + position: relative; + left: 91.66667%; } + .el-col-md-23 { + width: 95.83333%; } + .el-col-md-offset-23 { + margin-left: 95.83333%; } + .el-col-md-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-md-push-23 { + position: relative; + left: 95.83333%; } + .el-col-md-24 { + width: 100%; } + .el-col-md-offset-24 { + margin-left: 100%; } + .el-col-md-pull-24 { + position: relative; + right: 100%; } + .el-col-md-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1200px) { + .el-col-lg-0 { + display: none; } + .el-col-lg-0 { + width: 0%; } + .el-col-lg-offset-0 { + margin-left: 0%; } + .el-col-lg-pull-0 { + position: relative; + right: 0%; } + .el-col-lg-push-0 { + position: relative; + left: 0%; } + .el-col-lg-1 { + width: 4.16667%; } + .el-col-lg-offset-1 { + margin-left: 4.16667%; } + .el-col-lg-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-lg-push-1 { + position: relative; + left: 4.16667%; } + .el-col-lg-2 { + width: 8.33333%; } + .el-col-lg-offset-2 { + margin-left: 8.33333%; } + .el-col-lg-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-lg-push-2 { + position: relative; + left: 8.33333%; } + .el-col-lg-3 { + width: 12.5%; } + .el-col-lg-offset-3 { + margin-left: 12.5%; } + .el-col-lg-pull-3 { + position: relative; + right: 12.5%; } + .el-col-lg-push-3 { + position: relative; + left: 12.5%; } + .el-col-lg-4 { + width: 16.66667%; } + .el-col-lg-offset-4 { + margin-left: 16.66667%; } + .el-col-lg-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-lg-push-4 { + position: relative; + left: 16.66667%; } + .el-col-lg-5 { + width: 20.83333%; } + .el-col-lg-offset-5 { + margin-left: 20.83333%; } + .el-col-lg-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-lg-push-5 { + position: relative; + left: 20.83333%; } + .el-col-lg-6 { + width: 25%; } + .el-col-lg-offset-6 { + margin-left: 25%; } + .el-col-lg-pull-6 { + position: relative; + right: 25%; } + .el-col-lg-push-6 { + position: relative; + left: 25%; } + .el-col-lg-7 { + width: 29.16667%; } + .el-col-lg-offset-7 { + margin-left: 29.16667%; } + .el-col-lg-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-lg-push-7 { + position: relative; + left: 29.16667%; } + .el-col-lg-8 { + width: 33.33333%; } + .el-col-lg-offset-8 { + margin-left: 33.33333%; } + .el-col-lg-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-lg-push-8 { + position: relative; + left: 33.33333%; } + .el-col-lg-9 { + width: 37.5%; } + .el-col-lg-offset-9 { + margin-left: 37.5%; } + .el-col-lg-pull-9 { + position: relative; + right: 37.5%; } + .el-col-lg-push-9 { + position: relative; + left: 37.5%; } + .el-col-lg-10 { + width: 41.66667%; } + .el-col-lg-offset-10 { + margin-left: 41.66667%; } + .el-col-lg-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-lg-push-10 { + position: relative; + left: 41.66667%; } + .el-col-lg-11 { + width: 45.83333%; } + .el-col-lg-offset-11 { + margin-left: 45.83333%; } + .el-col-lg-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-lg-push-11 { + position: relative; + left: 45.83333%; } + .el-col-lg-12 { + width: 50%; } + .el-col-lg-offset-12 { + margin-left: 50%; } + .el-col-lg-pull-12 { + position: relative; + right: 50%; } + .el-col-lg-push-12 { + position: relative; + left: 50%; } + .el-col-lg-13 { + width: 54.16667%; } + .el-col-lg-offset-13 { + margin-left: 54.16667%; } + .el-col-lg-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-lg-push-13 { + position: relative; + left: 54.16667%; } + .el-col-lg-14 { + width: 58.33333%; } + .el-col-lg-offset-14 { + margin-left: 58.33333%; } + .el-col-lg-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-lg-push-14 { + position: relative; + left: 58.33333%; } + .el-col-lg-15 { + width: 62.5%; } + .el-col-lg-offset-15 { + margin-left: 62.5%; } + .el-col-lg-pull-15 { + position: relative; + right: 62.5%; } + .el-col-lg-push-15 { + position: relative; + left: 62.5%; } + .el-col-lg-16 { + width: 66.66667%; } + .el-col-lg-offset-16 { + margin-left: 66.66667%; } + .el-col-lg-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-lg-push-16 { + position: relative; + left: 66.66667%; } + .el-col-lg-17 { + width: 70.83333%; } + .el-col-lg-offset-17 { + margin-left: 70.83333%; } + .el-col-lg-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-lg-push-17 { + position: relative; + left: 70.83333%; } + .el-col-lg-18 { + width: 75%; } + .el-col-lg-offset-18 { + margin-left: 75%; } + .el-col-lg-pull-18 { + position: relative; + right: 75%; } + .el-col-lg-push-18 { + position: relative; + left: 75%; } + .el-col-lg-19 { + width: 79.16667%; } + .el-col-lg-offset-19 { + margin-left: 79.16667%; } + .el-col-lg-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-lg-push-19 { + position: relative; + left: 79.16667%; } + .el-col-lg-20 { + width: 83.33333%; } + .el-col-lg-offset-20 { + margin-left: 83.33333%; } + .el-col-lg-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-lg-push-20 { + position: relative; + left: 83.33333%; } + .el-col-lg-21 { + width: 87.5%; } + .el-col-lg-offset-21 { + margin-left: 87.5%; } + .el-col-lg-pull-21 { + position: relative; + right: 87.5%; } + .el-col-lg-push-21 { + position: relative; + left: 87.5%; } + .el-col-lg-22 { + width: 91.66667%; } + .el-col-lg-offset-22 { + margin-left: 91.66667%; } + .el-col-lg-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-lg-push-22 { + position: relative; + left: 91.66667%; } + .el-col-lg-23 { + width: 95.83333%; } + .el-col-lg-offset-23 { + margin-left: 95.83333%; } + .el-col-lg-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-lg-push-23 { + position: relative; + left: 95.83333%; } + .el-col-lg-24 { + width: 100%; } + .el-col-lg-offset-24 { + margin-left: 100%; } + .el-col-lg-pull-24 { + position: relative; + right: 100%; } + .el-col-lg-push-24 { + position: relative; + left: 100%; } } + +@media only screen and (min-width: 1920px) { + .el-col-xl-0 { + display: none; } + .el-col-xl-0 { + width: 0%; } + .el-col-xl-offset-0 { + margin-left: 0%; } + .el-col-xl-pull-0 { + position: relative; + right: 0%; } + .el-col-xl-push-0 { + position: relative; + left: 0%; } + .el-col-xl-1 { + width: 4.16667%; } + .el-col-xl-offset-1 { + margin-left: 4.16667%; } + .el-col-xl-pull-1 { + position: relative; + right: 4.16667%; } + .el-col-xl-push-1 { + position: relative; + left: 4.16667%; } + .el-col-xl-2 { + width: 8.33333%; } + .el-col-xl-offset-2 { + margin-left: 8.33333%; } + .el-col-xl-pull-2 { + position: relative; + right: 8.33333%; } + .el-col-xl-push-2 { + position: relative; + left: 8.33333%; } + .el-col-xl-3 { + width: 12.5%; } + .el-col-xl-offset-3 { + margin-left: 12.5%; } + .el-col-xl-pull-3 { + position: relative; + right: 12.5%; } + .el-col-xl-push-3 { + position: relative; + left: 12.5%; } + .el-col-xl-4 { + width: 16.66667%; } + .el-col-xl-offset-4 { + margin-left: 16.66667%; } + .el-col-xl-pull-4 { + position: relative; + right: 16.66667%; } + .el-col-xl-push-4 { + position: relative; + left: 16.66667%; } + .el-col-xl-5 { + width: 20.83333%; } + .el-col-xl-offset-5 { + margin-left: 20.83333%; } + .el-col-xl-pull-5 { + position: relative; + right: 20.83333%; } + .el-col-xl-push-5 { + position: relative; + left: 20.83333%; } + .el-col-xl-6 { + width: 25%; } + .el-col-xl-offset-6 { + margin-left: 25%; } + .el-col-xl-pull-6 { + position: relative; + right: 25%; } + .el-col-xl-push-6 { + position: relative; + left: 25%; } + .el-col-xl-7 { + width: 29.16667%; } + .el-col-xl-offset-7 { + margin-left: 29.16667%; } + .el-col-xl-pull-7 { + position: relative; + right: 29.16667%; } + .el-col-xl-push-7 { + position: relative; + left: 29.16667%; } + .el-col-xl-8 { + width: 33.33333%; } + .el-col-xl-offset-8 { + margin-left: 33.33333%; } + .el-col-xl-pull-8 { + position: relative; + right: 33.33333%; } + .el-col-xl-push-8 { + position: relative; + left: 33.33333%; } + .el-col-xl-9 { + width: 37.5%; } + .el-col-xl-offset-9 { + margin-left: 37.5%; } + .el-col-xl-pull-9 { + position: relative; + right: 37.5%; } + .el-col-xl-push-9 { + position: relative; + left: 37.5%; } + .el-col-xl-10 { + width: 41.66667%; } + .el-col-xl-offset-10 { + margin-left: 41.66667%; } + .el-col-xl-pull-10 { + position: relative; + right: 41.66667%; } + .el-col-xl-push-10 { + position: relative; + left: 41.66667%; } + .el-col-xl-11 { + width: 45.83333%; } + .el-col-xl-offset-11 { + margin-left: 45.83333%; } + .el-col-xl-pull-11 { + position: relative; + right: 45.83333%; } + .el-col-xl-push-11 { + position: relative; + left: 45.83333%; } + .el-col-xl-12 { + width: 50%; } + .el-col-xl-offset-12 { + margin-left: 50%; } + .el-col-xl-pull-12 { + position: relative; + right: 50%; } + .el-col-xl-push-12 { + position: relative; + left: 50%; } + .el-col-xl-13 { + width: 54.16667%; } + .el-col-xl-offset-13 { + margin-left: 54.16667%; } + .el-col-xl-pull-13 { + position: relative; + right: 54.16667%; } + .el-col-xl-push-13 { + position: relative; + left: 54.16667%; } + .el-col-xl-14 { + width: 58.33333%; } + .el-col-xl-offset-14 { + margin-left: 58.33333%; } + .el-col-xl-pull-14 { + position: relative; + right: 58.33333%; } + .el-col-xl-push-14 { + position: relative; + left: 58.33333%; } + .el-col-xl-15 { + width: 62.5%; } + .el-col-xl-offset-15 { + margin-left: 62.5%; } + .el-col-xl-pull-15 { + position: relative; + right: 62.5%; } + .el-col-xl-push-15 { + position: relative; + left: 62.5%; } + .el-col-xl-16 { + width: 66.66667%; } + .el-col-xl-offset-16 { + margin-left: 66.66667%; } + .el-col-xl-pull-16 { + position: relative; + right: 66.66667%; } + .el-col-xl-push-16 { + position: relative; + left: 66.66667%; } + .el-col-xl-17 { + width: 70.83333%; } + .el-col-xl-offset-17 { + margin-left: 70.83333%; } + .el-col-xl-pull-17 { + position: relative; + right: 70.83333%; } + .el-col-xl-push-17 { + position: relative; + left: 70.83333%; } + .el-col-xl-18 { + width: 75%; } + .el-col-xl-offset-18 { + margin-left: 75%; } + .el-col-xl-pull-18 { + position: relative; + right: 75%; } + .el-col-xl-push-18 { + position: relative; + left: 75%; } + .el-col-xl-19 { + width: 79.16667%; } + .el-col-xl-offset-19 { + margin-left: 79.16667%; } + .el-col-xl-pull-19 { + position: relative; + right: 79.16667%; } + .el-col-xl-push-19 { + position: relative; + left: 79.16667%; } + .el-col-xl-20 { + width: 83.33333%; } + .el-col-xl-offset-20 { + margin-left: 83.33333%; } + .el-col-xl-pull-20 { + position: relative; + right: 83.33333%; } + .el-col-xl-push-20 { + position: relative; + left: 83.33333%; } + .el-col-xl-21 { + width: 87.5%; } + .el-col-xl-offset-21 { + margin-left: 87.5%; } + .el-col-xl-pull-21 { + position: relative; + right: 87.5%; } + .el-col-xl-push-21 { + position: relative; + left: 87.5%; } + .el-col-xl-22 { + width: 91.66667%; } + .el-col-xl-offset-22 { + margin-left: 91.66667%; } + .el-col-xl-pull-22 { + position: relative; + right: 91.66667%; } + .el-col-xl-push-22 { + position: relative; + left: 91.66667%; } + .el-col-xl-23 { + width: 95.83333%; } + .el-col-xl-offset-23 { + margin-left: 95.83333%; } + .el-col-xl-pull-23 { + position: relative; + right: 95.83333%; } + .el-col-xl-push-23 { + position: relative; + left: 95.83333%; } + .el-col-xl-24 { + width: 100%; } + .el-col-xl-offset-24 { + margin-left: 100%; } + .el-col-xl-pull-24 { + position: relative; + right: 100%; } + .el-col-xl-push-24 { + position: relative; + left: 100%; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@-webkit-keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-upload { + display: inline-block; + text-align: center; + cursor: pointer; + outline: none; + /* 照片墙模式 */ } + .el-upload__input { + display: none; } + .el-upload__tip { + font-size: 12px; + color: #606266; + margin-top: 7px; } + .el-upload iframe { + position: absolute; + z-index: -1; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); } + .el-upload--picture-card { + background-color: #fbfdff; + border: 1px dashed #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + cursor: pointer; + line-height: 146px; + vertical-align: top; } + .el-upload--picture-card i { + font-size: 28px; + color: #8c939d; } + .el-upload--picture-card:hover { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus .el-upload-dragger { + border-color: #409EFF; } + +.el-upload-dragger { + background-color: #fff; + border: 1px dashed #d9d9d9; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 360px; + height: 180px; + text-align: center; + cursor: pointer; + position: relative; + overflow: hidden; } + .el-upload-dragger .el-icon-upload { + font-size: 67px; + color: #C0C4CC; + margin: 40px 0 16px; + line-height: 50px; } + .el-upload-dragger + .el-upload__tip { + text-align: center; } + .el-upload-dragger ~ .el-upload__files { + border-top: 1px solid #DCDFE6; + margin-top: 7px; + padding-top: 5px; } + .el-upload-dragger .el-upload__text { + color: #606266; + font-size: 14px; + text-align: center; } + .el-upload-dragger .el-upload__text em { + color: #409EFF; + font-style: normal; } + .el-upload-dragger:hover { + border-color: #409EFF; } + .el-upload-dragger.is-dragover { + background-color: rgba(32, 159, 255, 0.06); + border: 2px dashed #409EFF; } + +.el-upload-list { + margin: 0; + padding: 0; + list-style: none; } + .el-upload-list__item { + -webkit-transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + font-size: 14px; + color: #606266; + line-height: 1.8; + margin-top: 5px; + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + width: 100%; } + .el-upload-list__item .el-progress { + position: absolute; + top: 20px; + width: 100%; } + .el-upload-list__item .el-progress__text { + position: absolute; + right: 0; + top: -13px; } + .el-upload-list__item .el-progress-bar { + margin-right: 0; + padding-right: 0; } + .el-upload-list__item:first-child { + margin-top: 10px; } + .el-upload-list__item .el-icon-upload-success { + color: #67C23A; } + .el-upload-list__item .el-icon-close { + display: none; + position: absolute; + top: 5px; + right: 5px; + cursor: pointer; + opacity: .75; + color: #606266; } + .el-upload-list__item .el-icon-close:hover { + opacity: 1; } + .el-upload-list__item .el-icon-close-tip { + display: none; + position: absolute; + top: 5px; + right: 5px; + font-size: 12px; + cursor: pointer; + opacity: 1; + color: #409EFF; } + .el-upload-list__item:hover { + background-color: #F5F7FA; } + .el-upload-list__item:hover .el-icon-close { + display: inline-block; } + .el-upload-list__item:hover .el-progress__text { + display: none; } + .el-upload-list__item.is-success .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item.is-success .el-upload-list__item-name:hover, .el-upload-list__item.is-success .el-upload-list__item-name:focus { + color: #409EFF; + cursor: pointer; } + .el-upload-list__item.is-success:focus:not(:hover) { + /* 键盘focus */ } + .el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip { + display: inline-block; } + .el-upload-list__item.is-success:not(.focusing):focus, .el-upload-list__item.is-success:active { + /* click时 */ + outline-width: 0; } + .el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip, .el-upload-list__item.is-success:active .el-icon-close-tip { + display: none; } + .el-upload-list__item.is-success:hover .el-upload-list__item-status-label, .el-upload-list__item.is-success:focus .el-upload-list__item-status-label { + display: none; } + .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item-name { + color: #606266; + display: block; + margin-right: 40px; + overflow: hidden; + padding-left: 4px; + text-overflow: ellipsis; + -webkit-transition: color .3s; + transition: color .3s; + white-space: nowrap; } + .el-upload-list__item-name [class^="el-icon"] { + height: 100%; + margin-right: 7px; + color: #909399; + line-height: inherit; } + .el-upload-list__item-status-label { + position: absolute; + right: 5px; + top: 0; + line-height: inherit; + display: none; } + .el-upload-list__item-delete { + position: absolute; + right: 10px; + top: 0; + font-size: 12px; + color: #606266; + display: none; } + .el-upload-list__item-delete:hover { + color: #409EFF; } + .el-upload-list--picture-card { + margin: 0; + display: inline; + vertical-align: top; } + .el-upload-list--picture-card .el-upload-list__item { + overflow: hidden; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + margin: 0 8px 8px 0; + display: inline-block; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-check, + .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-close { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture-card .el-upload-list__item-name { + display: none; } + .el-upload-list--picture-card .el-upload-list__item-thumbnail { + width: 100%; + height: 100%; } + .el-upload-list--picture-card .el-upload-list__item-status-label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-list--picture-card .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture-card .el-upload-list__item-actions { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + cursor: default; + text-align: center; + color: #fff; + opacity: 0; + font-size: 20px; + background-color: rgba(0, 0, 0, 0.5); + -webkit-transition: opacity .3s; + transition: opacity .3s; } + .el-upload-list--picture-card .el-upload-list__item-actions::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-list--picture-card .el-upload-list__item-actions span { + display: none; + cursor: pointer; } + .el-upload-list--picture-card .el-upload-list__item-actions span + span { + margin-left: 15px; } + .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete { + position: static; + font-size: inherit; + color: inherit; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover { + opacity: 1; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover span { + display: inline-block; } + .el-upload-list--picture-card .el-progress { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + bottom: auto; + width: 126px; } + .el-upload-list--picture-card .el-progress .el-progress__text { + top: 50%; } + .el-upload-list--picture .el-upload-list__item { + overflow: hidden; + z-index: 0; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; + padding: 10px 10px 10px 90px; + height: 92px; } + .el-upload-list--picture .el-upload-list__item .el-icon-check, + .el-upload-list--picture .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label { + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + top: -2px; + right: -12px; } + .el-upload-list--picture .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name { + line-height: 70px; + margin-top: 0; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i { + display: none; } + .el-upload-list--picture .el-upload-list__item-thumbnail { + vertical-align: middle; + display: inline-block; + width: 70px; + height: 70px; + float: left; + position: relative; + z-index: 1; + margin-left: -80px; + background-color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item-name { + display: block; + margin-top: 20px; } + .el-upload-list--picture .el-upload-list__item-name i { + font-size: 70px; + line-height: 1; + position: absolute; + left: 9px; + top: 10px; } + .el-upload-list--picture .el-upload-list__item-status-label { + position: absolute; + right: -17px; + top: -7px; + width: 46px; + height: 26px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; } + .el-upload-list--picture .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 12px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture .el-progress { + position: relative; + top: -7px; } + +.el-upload-cover { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 10; + cursor: default; } + .el-upload-cover::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-cover img { + display: block; + width: 100%; + height: 100%; } + .el-upload-cover__label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-cover__label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + color: #fff; } + .el-upload-cover__progress { + display: inline-block; + vertical-align: middle; + position: static; + width: 243px; } + .el-upload-cover__progress + .el-upload__inner { + opacity: 0; } + .el-upload-cover__content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + .el-upload-cover__interact { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.72); + text-align: center; } + .el-upload-cover__interact .btn { + display: inline-block; + color: #FFFFFF; + font-size: 14px; + cursor: pointer; + vertical-align: middle; + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + margin-top: 60px; } + .el-upload-cover__interact .btn i { + margin-top: 0; } + .el-upload-cover__interact .btn span { + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear; } + .el-upload-cover__interact .btn:not(:first-child) { + margin-left: 35px; } + .el-upload-cover__interact .btn:hover { + -webkit-transform: translateY(-13px); + transform: translateY(-13px); } + .el-upload-cover__interact .btn:hover span { + opacity: 1; } + .el-upload-cover__interact .btn i { + color: #FFFFFF; + display: block; + font-size: 24px; + line-height: inherit; + margin: 0 auto 5px; } + .el-upload-cover__title { + position: absolute; + bottom: 0; + left: 0; + background-color: #FFFFFF; + height: 36px; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: normal; + text-align: left; + padding: 0 10px; + margin: 0; + line-height: 36px; + font-size: 14px; + color: #303133; } + .el-upload-cover + .el-upload__inner { + opacity: 0; + position: relative; + z-index: 1; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-time-spinner { + width: 100%; + white-space: nowrap; } + +.el-spinner { + display: inline-block; + vertical-align: middle; } + +.el-spinner-inner { + -webkit-animation: rotate 2s linear infinite; + animation: rotate 2s linear infinite; + width: 50px; + height: 50px; } + .el-spinner-inner .path { + stroke: #ececec; + stroke-linecap: round; + -webkit-animation: dash 1.5s ease-in-out infinite; + animation: dash 1.5s ease-in-out infinite; } + +@-webkit-keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } + +@keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-message { + min-width: 380px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + border-width: 1px; + border-style: solid; + border-color: #EBEEF5; + position: fixed; + left: 50%; + top: 20px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: #edf2fc; + -webkit-transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, transform .4s, top 0.4s; + transition: opacity 0.3s, transform .4s, top 0.4s, -webkit-transform .4s; + overflow: hidden; + padding: 15px 15px 15px 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-message.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message.is-closable .el-message__content { + padding-right: 16px; } + .el-message p { + margin: 0; } + .el-message--info .el-message__content { + color: #909399; } + .el-message--success { + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-message--success .el-message__content { + color: #67C23A; } + .el-message--warning { + background-color: #fdf6ec; + border-color: #faecd8; } + .el-message--warning .el-message__content { + color: #E6A23C; } + .el-message--error { + background-color: #fef0f0; + border-color: #fde2e2; } + .el-message--error .el-message__content { + color: #F56C6C; } + .el-message__icon { + margin-right: 10px; } + .el-message__content { + padding: 0; + font-size: 14px; + line-height: 1; } + .el-message__content:focus { + outline-width: 0; } + .el-message__closeBtn { + position: absolute; + top: 50%; + right: 15px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: #C0C4CC; + font-size: 16px; } + .el-message__closeBtn:focus { + outline-width: 0; } + .el-message__closeBtn:hover { + color: #909399; } + .el-message .el-icon-success { + color: #67C23A; } + .el-message .el-icon-error { + color: #F56C6C; } + .el-message .el-icon-info { + color: #909399; } + .el-message .el-icon-warning { + color: #E6A23C; } + +.el-message-fade-enter, +.el-message-fade-leave-active { + opacity: 0; + -webkit-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-badge { + position: relative; + vertical-align: middle; + display: inline-block; } + .el-badge__content { + background-color: #F56C6C; + border-radius: 10px; + color: #FFFFFF; + display: inline-block; + font-size: 12px; + height: 18px; + line-height: 18px; + padding: 0 6px; + text-align: center; + white-space: nowrap; + border: 1px solid #FFFFFF; } + .el-badge__content.is-fixed { + position: absolute; + top: 0; + right: 10px; + -webkit-transform: translateY(-50%) translateX(100%); + transform: translateY(-50%) translateX(100%); } + .el-badge__content.is-fixed.is-dot { + right: 5px; } + .el-badge__content.is-dot { + height: 8px; + width: 8px; + padding: 0; + right: 0; + border-radius: 50%; } + .el-badge__content--primary { + background-color: #409EFF; } + .el-badge__content--success { + background-color: #67C23A; } + .el-badge__content--warning { + background-color: #E6A23C; } + .el-badge__content--info { + background-color: #909399; } + .el-badge__content--danger { + background-color: #F56C6C; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-card { + border-radius: 4px; + border: 1px solid #EBEEF5; + background-color: #FFFFFF; + overflow: hidden; + color: #303133; + -webkit-transition: 0.3s; + transition: 0.3s; } + .el-card.is-always-shadow { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card.is-hover-shadow:hover, .el-card.is-hover-shadow:focus { + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-card__header { + padding: 18px 20px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-card__body { + padding: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-rate { + height: 20px; + line-height: 1; } + .el-rate:focus, .el-rate:active { + outline-width: 0; } + .el-rate__item { + display: inline-block; + position: relative; + font-size: 0; + vertical-align: middle; } + .el-rate__icon { + position: relative; + display: inline-block; + font-size: 18px; + margin-right: 6px; + color: #C0C4CC; + -webkit-transition: .3s; + transition: .3s; } + .el-rate__icon.hover { + -webkit-transform: scale(1.15); + transform: scale(1.15); } + .el-rate__icon .path2 { + position: absolute; + left: 0; + top: 0; } + .el-rate__decimal { + position: absolute; + top: 0; + left: 0; + display: inline-block; + overflow: hidden; } + .el-rate__text { + font-size: 14px; + vertical-align: middle; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-steps { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-steps--simple { + padding: 13px 8%; + border-radius: 4px; + background: #F5F7FA; } + .el-steps--horizontal { + white-space: nowrap; } + .el-steps--vertical { + height: 100%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-step { + position: relative; + -ms-flex-negative: 1; + flex-shrink: 1; } + .el-step:last-of-type .el-step__line { + display: none; } + .el-step:last-of-type.is-flex { + -ms-flex-preferred-size: auto !important; + flex-basis: auto !important; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; } + .el-step:last-of-type .el-step__main, .el-step:last-of-type .el-step__description { + padding-right: 0; } + .el-step__head { + position: relative; + width: 100%; } + .el-step__head.is-process { + color: #303133; + border-color: #303133; } + .el-step__head.is-wait { + color: #C0C4CC; + border-color: #C0C4CC; } + .el-step__head.is-success { + color: #67C23A; + border-color: #67C23A; } + .el-step__head.is-error { + color: #F56C6C; + border-color: #F56C6C; } + .el-step__head.is-finish { + color: #409EFF; + border-color: #409EFF; } + .el-step__icon { + position: relative; + z-index: 1; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: 24px; + height: 24px; + font-size: 14px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #FFFFFF; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; } + .el-step__icon.is-text { + border-radius: 50%; + border: 2px solid; + border-color: inherit; } + .el-step__icon.is-icon { + width: 40px; } + .el-step__icon-inner { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-align: center; + font-weight: bold; + line-height: 1; + color: inherit; } + .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 25px; + font-weight: normal; } + .el-step__icon-inner.is-status { + -webkit-transform: translateY(1px); + transform: translateY(1px); } + .el-step__line { + position: absolute; + border-color: inherit; + background-color: #C0C4CC; } + .el-step__line-inner { + display: block; + border-width: 1px; + border-style: solid; + border-color: inherit; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 0; + height: 0; } + .el-step__main { + white-space: normal; + text-align: left; } + .el-step__title { + font-size: 16px; + line-height: 38px; } + .el-step__title.is-process { + font-weight: bold; + color: #303133; } + .el-step__title.is-wait { + color: #C0C4CC; } + .el-step__title.is-success { + color: #67C23A; } + .el-step__title.is-error { + color: #F56C6C; } + .el-step__title.is-finish { + color: #409EFF; } + .el-step__description { + padding-right: 10%; + margin-top: -5px; + font-size: 12px; + line-height: 20px; + font-weight: normal; } + .el-step__description.is-process { + color: #303133; } + .el-step__description.is-wait { + color: #C0C4CC; } + .el-step__description.is-success { + color: #67C23A; } + .el-step__description.is-error { + color: #F56C6C; } + .el-step__description.is-finish { + color: #409EFF; } + .el-step.is-horizontal { + display: inline-block; } + .el-step.is-horizontal .el-step__line { + height: 2px; + top: 11px; + left: 0; + right: 0; } + .el-step.is-vertical { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-step.is-vertical .el-step__head { + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; + width: 24px; } + .el-step.is-vertical .el-step__main { + padding-left: 10px; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-vertical .el-step__title { + line-height: 24px; + padding-bottom: 8px; } + .el-step.is-vertical .el-step__line { + width: 2px; + top: 0; + bottom: 0; + left: 11px; } + .el-step.is-vertical .el-step__icon.is-icon { + width: 24px; } + .el-step.is-center .el-step__head { + text-align: center; } + .el-step.is-center .el-step__main { + text-align: center; } + .el-step.is-center .el-step__description { + padding-left: 20%; + padding-right: 20%; } + .el-step.is-center .el-step__line { + left: 50%; + right: -50%; } + .el-step.is-simple { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-step.is-simple .el-step__head { + width: auto; + font-size: 0; + padding-right: 10px; } + .el-step.is-simple .el-step__icon { + background: transparent; + width: 16px; + height: 16px; + font-size: 12px; } + .el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 18px; } + .el-step.is-simple .el-step__icon-inner.is-status { + -webkit-transform: scale(0.8) translateY(1px); + transform: scale(0.8) translateY(1px); } + .el-step.is-simple .el-step__main { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-simple .el-step__title { + font-size: 16px; + line-height: 20px; } + .el-step.is-simple:not(:last-of-type) .el-step__title { + max-width: 50%; + word-break: break-all; } + .el-step.is-simple .el-step__arrow { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-step.is-simple .el-step__arrow::before, .el-step.is-simple .el-step__arrow::after { + content: ''; + display: inline-block; + position: absolute; + height: 15px; + width: 1px; + background: #C0C4CC; } + .el-step.is-simple .el-step__arrow::before { + -webkit-transform: rotate(-45deg) translateY(-4px); + transform: rotate(-45deg) translateY(-4px); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; } + .el-step.is-simple .el-step__arrow::after { + -webkit-transform: rotate(45deg) translateY(4px); + transform: rotate(45deg) translateY(4px); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; } + .el-step.is-simple:last-of-type .el-step__arrow { + display: none; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel { + position: relative; } + .el-carousel--horizontal { + overflow-x: hidden; } + .el-carousel--vertical { + overflow-y: hidden; } + .el-carousel__container { + position: relative; + height: 300px; } + .el-carousel__arrow { + border: none; + outline: none; + padding: 0; + margin: 0; + height: 36px; + width: 36px; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; + border-radius: 50%; + background-color: rgba(31, 45, 61, 0.11); + color: #FFFFFF; + position: absolute; + top: 50%; + z-index: 10; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + text-align: center; + font-size: 12px; } + .el-carousel__arrow--left { + left: 16px; } + .el-carousel__arrow--right { + right: 16px; } + .el-carousel__arrow:hover { + background-color: rgba(31, 45, 61, 0.23); } + .el-carousel__arrow i { + cursor: pointer; } + .el-carousel__indicators { + position: absolute; + list-style: none; + margin: 0; + padding: 0; + z-index: 2; } + .el-carousel__indicators--horizontal { + bottom: 0; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .el-carousel__indicators--vertical { + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-carousel__indicators--outside { + bottom: 26px; + text-align: center; + position: static; + -webkit-transform: none; + transform: none; } + .el-carousel__indicators--outside .el-carousel__indicator:hover button { + opacity: 0.64; } + .el-carousel__indicators--outside button { + background-color: #C0C4CC; + opacity: 0.24; } + .el-carousel__indicators--labels { + left: 0; + right: 0; + -webkit-transform: none; + transform: none; + text-align: center; } + .el-carousel__indicators--labels .el-carousel__button { + height: auto; + width: auto; + padding: 2px 18px; + font-size: 12px; } + .el-carousel__indicators--labels .el-carousel__indicator { + padding: 6px 4px; } + .el-carousel__indicator { + background-color: transparent; + cursor: pointer; } + .el-carousel__indicator:hover button { + opacity: 0.72; } + .el-carousel__indicator--horizontal { + display: inline-block; + padding: 12px 4px; } + .el-carousel__indicator--vertical { + padding: 4px 12px; } + .el-carousel__indicator--vertical .el-carousel__button { + width: 2px; + height: 15px; } + .el-carousel__indicator.is-active button { + opacity: 1; } + .el-carousel__button { + display: block; + opacity: 0.48; + width: 30px; + height: 2px; + background-color: #FFFFFF; + border: none; + outline: none; + padding: 0; + margin: 0; + cursor: pointer; + -webkit-transition: .3s; + transition: .3s; } + +.carousel-arrow-left-enter, +.carousel-arrow-left-leave-active { + -webkit-transform: translateY(-50%) translateX(-10px); + transform: translateY(-50%) translateX(-10px); + opacity: 0; } + +.carousel-arrow-right-enter, +.carousel-arrow-right-leave-active { + -webkit-transform: translateY(-50%) translateX(10px); + transform: translateY(-50%) translateX(10px); + opacity: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-carousel__item { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: inline-block; + overflow: hidden; + z-index: 0; } + .el-carousel__item.is-active { + z-index: 2; } + .el-carousel__item.is-animating { + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card { + width: 50%; + -webkit-transition: -webkit-transform .4s ease-in-out; + transition: -webkit-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; } + .el-carousel__item--card.is-in-stage { + cursor: pointer; + z-index: 1; } + .el-carousel__item--card.is-in-stage:hover .el-carousel__mask, + .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask { + opacity: 0.12; } + .el-carousel__item--card.is-active { + z-index: 2; } + +.el-carousel__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: #FFFFFF; + opacity: 0.24; + -webkit-transition: .2s; + transition: .2s; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-collapse { + border-top: 1px solid #EBEEF5; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item.is-disabled .el-collapse-item__header { + color: #bbb; + cursor: not-allowed; } + +.el-collapse-item__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 48px; + line-height: 48px; + background-color: #FFFFFF; + color: #303133; + cursor: pointer; + border-bottom: 1px solid #EBEEF5; + font-size: 13px; + font-weight: 500; + -webkit-transition: border-bottom-color .3s; + transition: border-bottom-color .3s; + outline: none; } + .el-collapse-item__arrow { + margin: 0 8px 0 auto; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-weight: 300; } + .el-collapse-item__arrow.is-active { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-collapse-item__header.focusing:focus:not(:hover) { + color: #409EFF; } + .el-collapse-item__header.is-active { + border-bottom-color: transparent; } + +.el-collapse-item__wrap { + will-change: height; + background-color: #FFFFFF; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-bottom: 1px solid #EBEEF5; } + +.el-collapse-item__content { + padding-bottom: 25px; + font-size: 13px; + color: #303133; + line-height: 1.769230769230769; } + +.el-collapse-item:last-child { + margin-bottom: -1px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } + +.el-cascader { + display: inline-block; + position: relative; + font-size: 14px; + line-height: 40px; } + .el-cascader:not(.is-disabled):hover .el-input__inner { + cursor: pointer; + border-color: #C0C4CC; } + .el-cascader .el-input { + cursor: pointer; } + .el-cascader .el-input .el-input__inner { + text-overflow: ellipsis; } + .el-cascader .el-input .el-input__inner:focus { + border-color: #409EFF; } + .el-cascader .el-input .el-icon-arrow-down { + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 14px; } + .el-cascader .el-input .el-icon-arrow-down.is-reverse { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-cascader .el-input .el-icon-circle-close:hover { + color: #909399; } + .el-cascader .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-cascader--medium { + font-size: 14px; + line-height: 36px; } + .el-cascader--small { + font-size: 13px; + line-height: 32px; } + .el-cascader--mini { + font-size: 12px; + line-height: 28px; } + .el-cascader.is-disabled .el-cascader__label { + z-index: 2; + color: #C0C4CC; } + .el-cascader__dropdown { + margin: 5px 0; + font-size: 14px; + background: #FFFFFF; + border: solid 1px #E4E7ED; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-cascader__tags { + position: absolute; + left: 0; + right: 30px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + line-height: normal; + text-align: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__tags .el-tag { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + max-width: 100%; + margin: 2px 0 2px 6px; + text-overflow: ellipsis; + background: #f0f2f5; } + .el-cascader__tags .el-tag:not(.is-hit) { + border-color: transparent; } + .el-cascader__tags .el-tag > span { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader__tags .el-tag .el-icon-close { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + background-color: #C0C4CC; + color: #FFFFFF; } + .el-cascader__tags .el-tag .el-icon-close:hover { + background-color: #909399; } + .el-cascader__suggestion-panel { + border-radius: 4px; } + .el-cascader__suggestion-list { + max-height: 204px; + margin: 0; + padding: 6px 0; + font-size: 14px; + color: #606266; + text-align: center; } + .el-cascader__suggestion-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + padding: 0 15px; + text-align: left; + outline: none; + cursor: pointer; } + .el-cascader__suggestion-item:hover, .el-cascader__suggestion-item:focus { + background: #F5F7FA; } + .el-cascader__suggestion-item.is-checked { + color: #409EFF; + font-weight: bold; } + .el-cascader__suggestion-item > span { + margin-right: 10px; } + .el-cascader__empty-text { + margin: 10px 0; + color: #C0C4CC; } + .el-cascader__search-input { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + height: 24px; + min-width: 60px; + margin: 2px 0 2px 15px; + padding: 0; + color: #606266; + border: none; + outline: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader__search-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-moz-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-cascader__search-input::placeholder { + color: #C0C4CC; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-color-predefine { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 12px; + margin-top: 8px; + width: 280px; } + .el-color-predefine__colors { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-color-predefine__color-selector { + margin: 0 0 8px 8px; + width: 20px; + height: 20px; + border-radius: 4px; + cursor: pointer; } + .el-color-predefine__color-selector:nth-child(10n + 1) { + margin-left: 0; } + .el-color-predefine__color-selector.selected { + -webkit-box-shadow: 0 0 3px 2px #409EFF; + box-shadow: 0 0 3px 2px #409EFF; } + .el-color-predefine__color-selector > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 100%; + border-radius: 3px; } + .el-color-predefine__color-selector.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + +.el-color-hue-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background-color: #f00; + padding: 0 2px; } + .el-color-hue-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); + height: 100%; } + .el-color-hue-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-hue-slider.is-vertical { + width: 12px; + height: 180px; + padding: 2px 0; } + .el-color-hue-slider.is-vertical .el-color-hue-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(#f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00)); + background: linear-gradient(to bottom, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); } + .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-svpanel { + position: relative; + width: 280px; + height: 180px; } + .el-color-svpanel__white, .el-color-svpanel__black { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; } + .el-color-svpanel__white { + background: -webkit-gradient(linear, left top, right top, from(#fff), to(rgba(255, 255, 255, 0))); + background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0)); } + .el-color-svpanel__black { + background: -webkit-gradient(linear, left bottom, left top, from(#000), to(rgba(0, 0, 0, 0))); + background: linear-gradient(to top, #000, rgba(0, 0, 0, 0)); } + .el-color-svpanel__cursor { + position: absolute; } + .el-color-svpanel__cursor > div { + cursor: head; + width: 4px; + height: 4px; + -webkit-box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3), 0 0 1px 2px rgba(0, 0, 0, 0.4); + border-radius: 50%; + -webkit-transform: translate(-2px, -2px); + transform: translate(-2px, -2px); } + +.el-color-alpha-slider { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 280px; + height: 12px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-alpha-slider__bar { + position: relative; + background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, white 100%); + height: 100%; } + .el-color-alpha-slider__thumb { + position: absolute; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + left: 0; + top: 0; + width: 4px; + height: 100%; + border-radius: 1px; + background: #fff; + border: 1px solid #f0f0f0; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + z-index: 1; } + .el-color-alpha-slider.is-vertical { + width: 20px; + height: 180px; } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar { + background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white)); + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, white 100%); } + .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb { + left: 0; + top: 0; + width: 100%; + height: 4px; } + +.el-color-dropdown { + width: 300px; } + .el-color-dropdown__main-wrapper { + margin-bottom: 6px; } + .el-color-dropdown__main-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-color-dropdown__btns { + margin-top: 6px; + text-align: right; } + .el-color-dropdown__value { + float: left; + line-height: 26px; + font-size: 12px; + color: #000000; + width: 160px; } + .el-color-dropdown__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-color-dropdown__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-color-dropdown__btn:hover { + color: #409EFF; + border-color: #409EFF; } + .el-color-dropdown__link-btn { + cursor: pointer; + color: #409EFF; + text-decoration: none; + padding: 15px; + font-size: 12px; } + .el-color-dropdown__link-btn:hover { + color: tint(#409EFF, 20%); } + +.el-color-picker { + display: inline-block; + position: relative; + line-height: normal; + height: 40px; } + .el-color-picker.is-disabled .el-color-picker__trigger { + cursor: not-allowed; } + .el-color-picker--medium { + height: 36px; } + .el-color-picker--medium .el-color-picker__trigger { + height: 36px; + width: 36px; } + .el-color-picker--medium .el-color-picker__mask { + height: 34px; + width: 34px; } + .el-color-picker--small { + height: 32px; } + .el-color-picker--small .el-color-picker__trigger { + height: 32px; + width: 32px; } + .el-color-picker--small .el-color-picker__mask { + height: 30px; + width: 30px; } + .el-color-picker--small .el-color-picker__icon, + .el-color-picker--small .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker--mini { + height: 28px; } + .el-color-picker--mini .el-color-picker__trigger { + height: 28px; + width: 28px; } + .el-color-picker--mini .el-color-picker__mask { + height: 26px; + width: 26px; } + .el-color-picker--mini .el-color-picker__icon, + .el-color-picker--mini .el-color-picker__empty { + -webkit-transform: translate3d(-50%, -50%, 0) scale(0.8); + transform: translate3d(-50%, -50%, 0) scale(0.8); } + .el-color-picker__mask { + height: 38px; + width: 38px; + border-radius: 4px; + position: absolute; + top: 1px; + left: 1px; + z-index: 1; + cursor: not-allowed; + background-color: rgba(255, 255, 255, 0.7); } + .el-color-picker__trigger { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; + width: 40px; + padding: 4px; + border: 1px solid #e6e6e6; + border-radius: 4px; + font-size: 0; + position: relative; + cursor: pointer; } + .el-color-picker__color { + position: relative; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #999; + border-radius: 2px; + width: 100%; + height: 100%; + text-align: center; } + .el-color-picker__color.is-alpha { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } + .el-color-picker__color-inner { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; } + .el-color-picker__empty { + font-size: 12px; + color: #999; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); } + .el-color-picker__icon { + display: inline-block; + position: absolute; + width: 100%; + top: 50%; + left: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); + color: #FFFFFF; + text-align: center; + font-size: 12px; } + .el-color-picker__panel { + position: absolute; + z-index: 10; + padding: 6px; + -webkit-box-sizing: content-box; + box-sizing: content-box; + background-color: #FFFFFF; + border: 1px solid #EBEEF5; + border-radius: 4px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-transfer { + font-size: 14px; } + .el-transfer__buttons { + display: inline-block; + vertical-align: middle; + padding: 0 30px; } + .el-transfer__button { + display: block; + margin: 0 auto; + padding: 10px; + border-radius: 50%; + color: #FFFFFF; + background-color: #409EFF; + font-size: 0; } + .el-transfer__button.is-with-texts { + border-radius: 4px; } + .el-transfer__button.is-disabled { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button.is-disabled:hover { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button:first-child { + margin-bottom: 10px; } + .el-transfer__button:nth-child(2) { + margin: 0; } + .el-transfer__button i, .el-transfer__button span { + font-size: 14px; } + .el-transfer__button [class*="el-icon-"] + span { + margin-left: 0; } + +.el-transfer-panel { + border: 1px solid #EBEEF5; + border-radius: 4px; + overflow: hidden; + background: #FFFFFF; + display: inline-block; + vertical-align: middle; + width: 200px; + max-height: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; } + .el-transfer-panel__body { + height: 246px; } + .el-transfer-panel__body.is-with-footer { + padding-bottom: 40px; } + .el-transfer-panel__list { + margin: 0; + padding: 6px 0; + list-style: none; + height: 246px; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-transfer-panel__list.is-filterable { + height: 194px; + padding-top: 0; } + .el-transfer-panel__item { + height: 30px; + line-height: 30px; + padding-left: 15px; + display: block !important; } + .el-transfer-panel__item + .el-transfer-panel__item { + margin-left: 0; } + .el-transfer-panel__item.el-checkbox { + color: #606266; } + .el-transfer-panel__item:hover { + color: #409EFF; } + .el-transfer-panel__item.el-checkbox .el-checkbox__label { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-left: 24px; + line-height: 30px; } + .el-transfer-panel__item .el-checkbox__input { + position: absolute; + top: 8px; } + .el-transfer-panel__filter { + text-align: center; + margin: 15px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: block; + width: auto; } + .el-transfer-panel__filter .el-input__inner { + height: 32px; + width: 100%; + font-size: 12px; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 16px; + padding-right: 10px; + padding-left: 30px; } + .el-transfer-panel__filter .el-input__icon { + margin-left: 5px; } + .el-transfer-panel__filter .el-icon-circle-close { + cursor: pointer; } + .el-transfer-panel .el-transfer-panel__header { + height: 40px; + line-height: 40px; + background: #F5F7FA; + margin: 0; + padding-left: 15px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #000000; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox { + display: block; + line-height: 40px; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label { + font-size: 16px; + color: #303133; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span { + position: absolute; + right: 15px; + color: #909399; + font-size: 12px; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__footer { + height: 40px; + background: #FFFFFF; + margin: 0; + padding: 0; + border-top: 1px solid #EBEEF5; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 1; } + .el-transfer-panel .el-transfer-panel__footer::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-transfer-panel .el-transfer-panel__footer .el-checkbox { + padding-left: 20px; + color: #606266; } + .el-transfer-panel .el-transfer-panel__empty { + margin: 0; + height: 30px; + line-height: 30px; + padding: 6px 15px 0; + color: #909399; + text-align: center; } + .el-transfer-panel .el-checkbox__label { + padding-left: 8px; } + .el-transfer-panel .el-checkbox__inner { + height: 14px; + width: 14px; + border-radius: 3px; } + .el-transfer-panel .el-checkbox__inner::after { + height: 6px; + width: 3px; + left: 4px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + min-width: 0; } + .el-container.is-vertical { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-header { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-aside { + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-main { + display: block; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-footer { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -ms-flex-negative: 0; + flex-shrink: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline { + margin: 0; + font-size: 14px; + list-style: none; } + .el-timeline .el-timeline-item:last-child .el-timeline-item__tail { + display: none; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline-item { + position: relative; + padding-bottom: 20px; } + .el-timeline-item__wrapper { + position: relative; + padding-left: 28px; + top: -3px; } + .el-timeline-item__tail { + position: absolute; + left: 4px; + height: 100%; + border-left: 2px solid #E4E7ED; } + .el-timeline-item__icon { + color: #FFFFFF; + font-size: 13px; } + .el-timeline-item__node { + position: absolute; + background-color: #E4E7ED; + border-radius: 50%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__node--normal { + left: -1px; + width: 12px; + height: 12px; } + .el-timeline-item__node--large { + left: -2px; + width: 14px; + height: 14px; } + .el-timeline-item__node--primary { + background-color: #409EFF; } + .el-timeline-item__node--success { + background-color: #67C23A; } + .el-timeline-item__node--warning { + background-color: #E6A23C; } + .el-timeline-item__node--danger { + background-color: #F56C6C; } + .el-timeline-item__node--info { + background-color: #909399; } + .el-timeline-item__dot { + position: absolute; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__content { + color: #303133; } + .el-timeline-item__timestamp { + color: #909399; + line-height: 1; + font-size: 13px; } + .el-timeline-item__timestamp.is-top { + margin-bottom: 8px; + padding-top: 4px; } + .el-timeline-item__timestamp.is-bottom { + margin-top: 8px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-link { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + vertical-align: middle; + position: relative; + text-decoration: none; + outline: none; + cursor: pointer; + padding: 0; + font-size: 14px; + font-weight: 500; } + .el-link.is-underline:hover:after { + content: ""; + position: absolute; + left: 0; + right: 0; + height: 0; + bottom: 0; + border-bottom: 1px solid #409EFF; } + .el-link.is-disabled { + cursor: not-allowed; } + .el-link [class*="el-icon-"] + span { + margin-left: 5px; } + .el-link.el-link--default { + color: #606266; } + .el-link.el-link--default:hover { + color: #409EFF; } + .el-link.el-link--default:after { + border-color: #409EFF; } + .el-link.el-link--default.is-disabled { + color: #C0C4CC; } + .el-link.el-link--primary { + color: #409EFF; } + .el-link.el-link--primary:hover { + color: #66b1ff; } + .el-link.el-link--primary:after { + border-color: #409EFF; } + .el-link.el-link--primary.is-disabled { + color: #a0cfff; } + .el-link.el-link--primary.is-underline:hover:after { + border-color: #409EFF; } + .el-link.el-link--danger { + color: #F56C6C; } + .el-link.el-link--danger:hover { + color: #f78989; } + .el-link.el-link--danger:after { + border-color: #F56C6C; } + .el-link.el-link--danger.is-disabled { + color: #fab6b6; } + .el-link.el-link--danger.is-underline:hover:after { + border-color: #F56C6C; } + .el-link.el-link--success { + color: #67C23A; } + .el-link.el-link--success:hover { + color: #85ce61; } + .el-link.el-link--success:after { + border-color: #67C23A; } + .el-link.el-link--success.is-disabled { + color: #b3e19d; } + .el-link.el-link--success.is-underline:hover:after { + border-color: #67C23A; } + .el-link.el-link--warning { + color: #E6A23C; } + .el-link.el-link--warning:hover { + color: #ebb563; } + .el-link.el-link--warning:after { + border-color: #E6A23C; } + .el-link.el-link--warning.is-disabled { + color: #f3d19e; } + .el-link.el-link--warning.is-underline:hover:after { + border-color: #E6A23C; } + .el-link.el-link--info { + color: #909399; } + .el-link.el-link--info:hover { + color: #a6a9ad; } + .el-link.el-link--info:after { + border-color: #909399; } + .el-link.el-link--info.is-disabled { + color: #c8c9cc; } + .el-link.el-link--info.is-underline:hover:after { + border-color: #909399; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-divider { + background-color: #DCDFE6; + position: relative; } + .el-divider--horizontal { + display: block; + height: 1px; + width: 100%; + margin: 24px 0; } + .el-divider--vertical { + display: inline-block; + width: 1px; + height: 1em; + margin: 0 8px; + vertical-align: middle; + position: relative; } + .el-divider__text { + position: absolute; + background-color: #FFFFFF; + padding: 0 20px; + font-weight: 500; + color: #303133; + font-size: 14px; } + .el-divider__text.is-left { + left: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + .el-divider__text.is-center { + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + .el-divider__text.is-right { + right: 20px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-image__inner, .el-image__placeholder, .el-image__error { + width: 100%; + height: 100%; } + +.el-image { + position: relative; + display: inline-block; + overflow: hidden; } + .el-image__inner { + vertical-align: top; } + .el-image__inner--center { + position: relative; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + display: block; } + .el-image__placeholder { + background: #F5F7FA; } + .el-image__error { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 14px; + background: #F5F7FA; + color: #C0C4CC; + vertical-align: middle; } + .el-image__preview { + cursor: pointer; } + +.el-image-viewer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; } + +.el-image-viewer__btn { + position: absolute; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 50%; + opacity: .8; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.el-image-viewer__close { + top: 40px; + right: 40px; + width: 40px; + height: 40px; + font-size: 40px; } + +.el-image-viewer__canvas { + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-image-viewer__actions { + left: 50%; + bottom: 30px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: 282px; + height: 44px; + padding: 0 23px; + background-color: #606266; + border-color: #fff; + border-radius: 22px; } + .el-image-viewer__actions__inner { + width: 100%; + height: 100%; + text-align: justify; + cursor: default; + font-size: 23px; + color: #fff; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: distribute; + justify-content: space-around; } + +.el-image-viewer__prev { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + left: 40px; } + +.el-image-viewer__next { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 44px; + height: 44px; + font-size: 24px; + color: #fff; + background-color: #606266; + border-color: #fff; + right: 40px; + text-indent: 2px; } + +.el-image-viewer__mask { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + opacity: .5; + background: #000; } + +.viewer-fade-enter-active { + -webkit-animation: viewer-fade-in .3s; + animation: viewer-fade-in .3s; } + +.viewer-fade-leave-active { + -webkit-animation: viewer-fade-out .3s; + animation: viewer-fade-out .3s; } + +@-webkit-keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes viewer-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes viewer-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +.el-calendar { + background-color: #fff; } + .el-calendar__header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 12px 20px; + border-bottom: 1px solid #EBEEF5; } + .el-calendar__title { + color: #000000; + -ms-flex-item-align: center; + align-self: center; } + .el-calendar__body { + padding: 12px 20px 35px; } + +.el-calendar-table { + table-layout: fixed; + width: 100%; } + .el-calendar-table thead th { + padding: 12px 0; + color: #606266; + font-weight: normal; } + .el-calendar-table:not(.is-range) td.prev, + .el-calendar-table:not(.is-range) td.next { + color: #C0C4CC; } + .el-calendar-table td { + border-bottom: 1px solid #EBEEF5; + border-right: 1px solid #EBEEF5; + vertical-align: top; + -webkit-transition: background-color 0.2s ease; + transition: background-color 0.2s ease; } + .el-calendar-table td.is-selected { + background-color: #F2F8FE; } + .el-calendar-table td.is-today { + color: #409EFF; } + .el-calendar-table tr:first-child td { + border-top: 1px solid #EBEEF5; } + .el-calendar-table tr td:first-child { + border-left: 1px solid #EBEEF5; } + .el-calendar-table tr.el-calendar-table__row--hide-border td { + border-top: none; } + .el-calendar-table .el-calendar-day { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 8px; + height: 85px; } + .el-calendar-table .el-calendar-day:hover { + cursor: pointer; + background-color: #F2F8FE; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-backtop { + position: fixed; + background-color: #FFFFFF; + width: 40px; + height: 40px; + border-radius: 50%; + color: #409EFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 20px; + -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 6px rgba(0, 0, 0, 0.12); + cursor: pointer; + z-index: 5; } + .el-backtop:hover { + background-color: #F2F6FC; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-page-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + line-height: 24px; } + .el-page-header__left { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + cursor: pointer; + margin-right: 40px; + position: relative; } + .el-page-header__left::after { + content: ""; + position: absolute; + width: 1px; + height: 16px; + right: -20px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + background-color: #DCDFE6; } + .el-page-header__left .el-icon-back { + font-size: 18px; + margin-right: 6px; + -ms-flex-item-align: center; + align-self: center; } + .el-page-header__title { + font-size: 14px; + font-weight: 500; } + .el-page-header__content { + font-size: 18px; + color: #303133; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-cascader-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + border-radius: 4px; + font-size: 14px; } + .el-cascader-panel.is-bordered { + border: solid 1px #E4E7ED; + border-radius: 4px; } + +.el-cascader-menu { + min-width: 180px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + border-right: solid 1px #E4E7ED; } + .el-cascader-menu:last-child { + border-right: none; } + .el-cascader-menu:last-child .el-cascader-node { + padding-right: 20px; } + .el-cascader-menu__wrap { + height: 204px; } + .el-cascader-menu__list { + position: relative; + min-height: 100%; + margin: 0; + padding: 6px 0; + list-style: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-cascader-menu__hover-zone { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; } + .el-cascader-menu__empty-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + color: #C0C4CC; } + +.el-cascader-node { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 30px 0 20px; + height: 34px; + line-height: 34px; + outline: none; } + .el-cascader-node.is-selectable.in-active-path { + color: #606266; } + .el-cascader-node.in-active-path, .el-cascader-node.is-selectable.in-checked-path, .el-cascader-node.is-active { + color: #409EFF; + font-weight: bold; } + .el-cascader-node:not(.is-disabled) { + cursor: pointer; } + .el-cascader-node:not(.is-disabled):hover, .el-cascader-node:not(.is-disabled):focus { + background: #F5F7FA; } + .el-cascader-node.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-cascader-node__prefix { + position: absolute; + left: 10px; } + .el-cascader-node__postfix { + position: absolute; + right: 10px; } + .el-cascader-node__label { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .el-cascader-node > .el-radio { + margin-right: 0; } + .el-cascader-node > .el-radio .el-radio__label { + padding-left: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-avatar { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; + color: #fff; + background: #C0C4CC; + width: 40px; + height: 40px; + line-height: 40px; + font-size: 14px; } + .el-avatar > img { + display: block; + height: 100%; + vertical-align: middle; } + .el-avatar--circle { + border-radius: 50%; } + .el-avatar--square { + border-radius: 4px; } + .el-avatar--icon { + font-size: 18px; } + .el-avatar--large { + width: 40px; + height: 40px; + line-height: 40px; } + .el-avatar--medium { + width: 36px; + height: 36px; + line-height: 36px; } + .el-avatar--small { + width: 28px; + height: 28px; + line-height: 28px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +@-webkit-keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } +@keyframes el-drawer-fade-in { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +@-webkit-keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes rtl-drawer-in { + 0% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@keyframes rtl-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(100%, 0px); + transform: translate(100%, 0px); } } + +@-webkit-keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ltr-drawer-in { + 0% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@keyframes ltr-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(-100%, 0px); + transform: translate(-100%, 0px); } } + +@-webkit-keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes ttb-drawer-in { + 0% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@keyframes ttb-drawer-out { + 0% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } + 100% { + -webkit-transform: translate(0px, -100%); + transform: translate(0px, -100%); } } + +@-webkit-keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@keyframes btt-drawer-in { + 0% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } + 100% { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); } } + +@-webkit-keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +@keyframes btt-drawer-out { + 0% { + -webkit-transform: translate(0px, 0); + transform: translate(0px, 0); } + 100% { + -webkit-transform: translate(0px, 100%); + transform: translate(0px, 100%); } } + +.el-drawer { + position: absolute; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background-color: #FFFFFF; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12); + overflow: hidden; } + .el-drawer.rtl { + -webkit-animation: rtl-drawer-out 0.3s; + animation: rtl-drawer-out 0.3s; } + .el-drawer__open .el-drawer.rtl { + -webkit-animation: rtl-drawer-in 0.3s 1ms; + animation: rtl-drawer-in 0.3s 1ms; } + .el-drawer.ltr { + -webkit-animation: ltr-drawer-out 0.3s; + animation: ltr-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ltr { + -webkit-animation: ltr-drawer-in 0.3s 1ms; + animation: ltr-drawer-in 0.3s 1ms; } + .el-drawer.ttb { + -webkit-animation: ttb-drawer-out 0.3s; + animation: ttb-drawer-out 0.3s; } + .el-drawer__open .el-drawer.ttb { + -webkit-animation: ttb-drawer-in 0.3s 1ms; + animation: ttb-drawer-in 0.3s 1ms; } + .el-drawer.btt { + -webkit-animation: btt-drawer-out 0.3s; + animation: btt-drawer-out 0.3s; } + .el-drawer__open .el-drawer.btt { + -webkit-animation: btt-drawer-in 0.3s 1ms; + animation: btt-drawer-in 0.3s 1ms; } + .el-drawer__wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + margin: 0; } + .el-drawer__header { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #72767b; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-bottom: 32px; + padding: 20px; + padding-bottom: 0; } + .el-drawer__header > :first-child { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__title { + margin: 0; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + line-height: inherit; + font-size: 1rem; } + .el-drawer__close-btn { + border: none; + cursor: pointer; + font-size: 20px; + color: inherit; + background-color: transparent; } + .el-drawer__body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; } + .el-drawer__body > * { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-drawer.ltr, .el-drawer.rtl { + height: 100%; + top: 0; + bottom: 0; } + .el-drawer.ttb, .el-drawer.btt { + width: 100%; + left: 0; + right: 0; } + .el-drawer.ltr { + left: 0; } + .el-drawer.rtl { + right: 0; } + .el-drawer.ttb { + top: 0; } + .el-drawer.btt { + bottom: 0; } + +.el-drawer__container { + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + height: 100%; + width: 100%; } + +.el-drawer-fade-enter-active { + -webkit-animation: el-drawer-fade-in .3s; + animation: el-drawer-fade-in .3s; } + +.el-drawer-fade-leave-active { + animation: el-drawer-fade-in .3s reverse; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popconfirm__main { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-popconfirm__icon { + margin-right: 5px; } + +.el-popconfirm__action { + text-align: right; + margin: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/infinite-scroll.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/infinite-scroll.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/infiniteScroll.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/infiniteScroll.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/input-number.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/input-number.css new file mode 100644 index 00000000..fc3fd524 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/input-number.css @@ -0,0 +1,891 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/input.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/input.css new file mode 100644 index 00000000..70bc38f3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/input.css @@ -0,0 +1,534 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/link.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/link.css new file mode 100644 index 00000000..2e69c87c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/link.css @@ -0,0 +1,342 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-link { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + vertical-align: middle; + position: relative; + text-decoration: none; + outline: none; + cursor: pointer; + padding: 0; + font-size: 14px; + font-weight: 500; } + .el-link.is-underline:hover:after { + content: ""; + position: absolute; + left: 0; + right: 0; + height: 0; + bottom: 0; + border-bottom: 1px solid #409EFF; } + .el-link.is-disabled { + cursor: not-allowed; } + .el-link [class*="el-icon-"] + span { + margin-left: 5px; } + .el-link.el-link--default { + color: #606266; } + .el-link.el-link--default:hover { + color: #409EFF; } + .el-link.el-link--default:after { + border-color: #409EFF; } + .el-link.el-link--default.is-disabled { + color: #C0C4CC; } + .el-link.el-link--primary { + color: #409EFF; } + .el-link.el-link--primary:hover { + color: #66b1ff; } + .el-link.el-link--primary:after { + border-color: #409EFF; } + .el-link.el-link--primary.is-disabled { + color: #a0cfff; } + .el-link.el-link--primary.is-underline:hover:after { + border-color: #409EFF; } + .el-link.el-link--danger { + color: #F56C6C; } + .el-link.el-link--danger:hover { + color: #f78989; } + .el-link.el-link--danger:after { + border-color: #F56C6C; } + .el-link.el-link--danger.is-disabled { + color: #fab6b6; } + .el-link.el-link--danger.is-underline:hover:after { + border-color: #F56C6C; } + .el-link.el-link--success { + color: #67C23A; } + .el-link.el-link--success:hover { + color: #85ce61; } + .el-link.el-link--success:after { + border-color: #67C23A; } + .el-link.el-link--success.is-disabled { + color: #b3e19d; } + .el-link.el-link--success.is-underline:hover:after { + border-color: #67C23A; } + .el-link.el-link--warning { + color: #E6A23C; } + .el-link.el-link--warning:hover { + color: #ebb563; } + .el-link.el-link--warning:after { + border-color: #E6A23C; } + .el-link.el-link--warning.is-disabled { + color: #f3d19e; } + .el-link.el-link--warning.is-underline:hover:after { + border-color: #E6A23C; } + .el-link.el-link--info { + color: #909399; } + .el-link.el-link--info:hover { + color: #a6a9ad; } + .el-link.el-link--info:after { + border-color: #909399; } + .el-link.el-link--info.is-disabled { + color: #c8c9cc; } + .el-link.el-link--info.is-underline:hover:after { + border-color: #909399; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/loading.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/loading.css new file mode 100644 index 00000000..5d4f9dae --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/loading.css @@ -0,0 +1,336 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-loading-parent--relative { + position: relative !important; } + +.el-loading-parent--hidden { + overflow: hidden !important; } + +.el-loading-mask { + position: absolute; + z-index: 2000; + background-color: rgba(255, 255, 255, 0.9); + margin: 0; + top: 0; + right: 0; + bottom: 0; + left: 0; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; } + .el-loading-mask.is-fullscreen { + position: fixed; } + .el-loading-mask.is-fullscreen .el-loading-spinner { + margin-top: -25px; } + .el-loading-mask.is-fullscreen .el-loading-spinner .circular { + height: 50px; + width: 50px; } + +.el-loading-spinner { + top: 50%; + margin-top: -21px; + width: 100%; + text-align: center; + position: absolute; } + .el-loading-spinner .el-loading-text { + color: #409EFF; + margin: 3px 0; + font-size: 14px; } + .el-loading-spinner .circular { + height: 42px; + width: 42px; + -webkit-animation: loading-rotate 2s linear infinite; + animation: loading-rotate 2s linear infinite; } + .el-loading-spinner .path { + -webkit-animation: loading-dash 1.5s ease-in-out infinite; + animation: loading-dash 1.5s ease-in-out infinite; + stroke-dasharray: 90, 150; + stroke-dashoffset: 0; + stroke-width: 2; + stroke: #409EFF; + stroke-linecap: round; } + .el-loading-spinner i { + color: #409EFF; } + +.el-loading-fade-enter, +.el-loading-fade-leave-active { + opacity: 0; } + +@-webkit-keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes loading-rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } + +@keyframes loading-dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40px; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120px; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/main.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/main.css new file mode 100644 index 00000000..c792e5aa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/main.css @@ -0,0 +1,261 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-main { + display: block; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + -ms-flex-preferred-size: auto; + flex-basis: auto; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 20px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/menu-item-group.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/menu-item-group.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/menu-item.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/menu-item.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/menu.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/menu.css new file mode 100644 index 00000000..07fe584e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/menu.css @@ -0,0 +1,719 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-menu { + border-right: solid 1px #e6e6e6; + list-style: none; + position: relative; + margin: 0; + padding-left: 0; + background-color: #272C34; } + .el-menu::before, + .el-menu::after { + display: table; + content: ""; } + .el-menu::after { + clear: both; } + .el-menu.el-menu--horizontal { + border-bottom: solid 1px #e6e6e6; } + .el-menu--horizontal { + border-right: none; } + .el-menu--horizontal > .el-menu-item { + float: left; + height: 60px; + line-height: 60px; + margin: 0; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-menu-item a, + .el-menu--horizontal > .el-menu-item a:hover { + color: inherit; } + .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus { + background-color: #fff; } + .el-menu--horizontal > .el-submenu { + float: left; } + .el-menu--horizontal > .el-submenu:focus, .el-menu--horizontal > .el-submenu:hover { + outline: none; } + .el-menu--horizontal > .el-submenu:focus .el-submenu__title, .el-menu--horizontal > .el-submenu:hover .el-submenu__title { + color: #303133; } + .el-menu--horizontal > .el-submenu.is-active .el-submenu__title { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--horizontal > .el-submenu .el-submenu__title { + height: 60px; + line-height: 60px; + border-bottom: 2px solid transparent; + color: #909399; } + .el-menu--horizontal > .el-submenu .el-submenu__title:hover { + background-color: #fff; } + .el-menu--horizontal > .el-submenu .el-submenu__icon-arrow { + position: static; + vertical-align: middle; + margin-left: 8px; + margin-top: -3px; } + .el-menu--horizontal .el-menu .el-menu-item, + .el-menu--horizontal .el-menu .el-submenu__title { + background-color: #FFFFFF; + float: none; + height: 36px; + line-height: 36px; + padding: 0 10px; + color: #909399; } + .el-menu--horizontal .el-menu .el-menu-item.is-active, + .el-menu--horizontal .el-menu .el-submenu.is-active > .el-submenu__title { + color: #303133; } + .el-menu--horizontal .el-menu-item:not(.is-disabled):hover, + .el-menu--horizontal .el-menu-item:not(.is-disabled):focus { + outline: none; + color: #303133; } + .el-menu--horizontal > .el-menu-item.is-active { + border-bottom: 2px solid #409EFF; + color: #303133; } + .el-menu--collapse { + width: 64px; } + .el-menu--collapse > .el-menu-item [class^="el-icon-"], + .el-menu--collapse > .el-submenu > .el-submenu__title [class^="el-icon-"] { + margin: 0; + vertical-align: middle; + width: 24px; + text-align: center; } + .el-menu--collapse > .el-menu-item .el-submenu__icon-arrow, + .el-menu--collapse > .el-submenu > .el-submenu__title .el-submenu__icon-arrow { + display: none; } + .el-menu--collapse > .el-menu-item span, + .el-menu--collapse > .el-submenu > .el-submenu__title span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; } + .el-menu--collapse > .el-menu-item.is-active i { + color: inherit; } + .el-menu--collapse .el-menu .el-submenu { + min-width: 200px; } + .el-menu--collapse .el-submenu { + position: relative; } + .el-menu--collapse .el-submenu .el-menu { + position: absolute; + margin-left: 5px; + top: 0; + left: 100%; + z-index: 10; + border: 1px solid #E4E7ED; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--collapse .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: none; + transform: none; } + .el-menu--popup { + z-index: 100; + min-width: 200px; + border: none; + padding: 5px 0; + border-radius: 2px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } + .el-menu--popup-bottom-start { + margin-top: 5px; } + .el-menu--popup-right-start { + margin-left: 5px; + margin-right: 5px; } + +.el-menu-item { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-menu-item * { + vertical-align: middle; } + .el-menu-item i { + color: #909399; } + .el-menu-item:hover, .el-menu-item:focus { + outline: none; + background-color: #409EFF; } + .el-menu-item.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-menu-item [class^="el-icon-"] { + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; + vertical-align: middle; } + .el-menu-item.is-active { + color: #409EFF; } + .el-menu-item.is-active i { + color: inherit; } + +.el-submenu { + list-style: none; + margin: 0; + padding-left: 0; } + .el-submenu__title { + height: 56px; + line-height: 56px; + font-size: 14px; + color: #FFFFFF; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color .3s, background-color .3s, color .3s; + transition: border-color .3s, background-color .3s, color .3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-submenu__title * { + vertical-align: middle; } + .el-submenu__title i { + color: #909399; } + .el-submenu__title:hover, .el-submenu__title:focus { + outline: none; + background-color: #409EFF; } + .el-submenu__title.is-disabled { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu__title:hover { + background-color: #409EFF; } + .el-submenu .el-menu { + border: none; } + .el-submenu .el-menu-item { + height: 50px; + line-height: 50px; + padding: 0 45px; + min-width: 200px; } + .el-submenu__icon-arrow { + position: absolute; + top: 50%; + right: 20px; + margin-top: -7px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + font-size: 12px; } + .el-submenu.is-active .el-submenu__title { + border-bottom-color: #409EFF; } + .el-submenu.is-opened > .el-submenu__title .el-submenu__icon-arrow { + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); } + .el-submenu.is-disabled .el-submenu__title, + .el-submenu.is-disabled .el-menu-item { + opacity: 0.25; + cursor: not-allowed; + background: none !important; } + .el-submenu [class^="el-icon-"] { + vertical-align: middle; + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; } + +.el-menu-item-group > ul { + padding: 0; } + +.el-menu-item-group__title { + padding: 7px 0 7px 20px; + line-height: normal; + font-size: 12px; + color: #909399; } + +.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow { + -webkit-transition: .2s; + transition: .2s; + opacity: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/message-box.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/message-box.css new file mode 100644 index 00000000..65b237d3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/message-box.css @@ -0,0 +1,2018 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.v-modal-enter { + -webkit-animation: v-modal-in .2s ease; + animation: v-modal-in .2s ease; } + +.v-modal-leave { + -webkit-animation: v-modal-out .2s ease forwards; + animation: v-modal-out .2s ease forwards; } + +@-webkit-keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@keyframes v-modal-in { + 0% { + opacity: 0; } + 100% { } } + +@-webkit-keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +@keyframes v-modal-out { + 0% { } + 100% { + opacity: 0; } } + +.v-modal { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.5; + background: #000000; } + +.el-popup-parent--hidden { + overflow: hidden; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-message-box { + display: inline-block; + width: 420px; + padding-bottom: 10px; + vertical-align: middle; + background-color: #FFFFFF; + border-radius: 4px; + border: 1px solid #EBEEF5; + font-size: 18px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + text-align: left; + overflow: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .el-message-box__wrapper { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + text-align: center; } + .el-message-box__wrapper::after { + content: ""; + display: inline-block; + height: 100%; + width: 0; + vertical-align: middle; } + .el-message-box__header { + position: relative; + padding: 15px; + padding-bottom: 10px; } + .el-message-box__title { + padding-left: 0; + margin-bottom: 0; + font-size: 18px; + line-height: 1; + color: #303133; } + .el-message-box__headerbtn { + position: absolute; + top: 15px; + right: 15px; + padding: 0; + border: none; + outline: none; + background: transparent; + font-size: 16px; + cursor: pointer; } + .el-message-box__headerbtn .el-message-box__close { + color: #909399; } + .el-message-box__headerbtn:focus .el-message-box__close, .el-message-box__headerbtn:hover .el-message-box__close { + color: #409EFF; } + .el-message-box__content { + padding: 10px 15px; + color: #606266; + font-size: 14px; } + .el-message-box__container { + position: relative; } + .el-message-box__input { + padding-top: 15px; } + .el-message-box__input input.invalid { + border-color: #F56C6C; } + .el-message-box__input input.invalid:focus { + border-color: #F56C6C; } + .el-message-box__status { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: 24px !important; } + .el-message-box__status::before { + padding-left: 1px; } + .el-message-box__status + .el-message-box__message { + padding-left: 36px; + padding-right: 12px; } + .el-message-box__status.el-icon-success { + color: #67C23A; } + .el-message-box__status.el-icon-info { + color: #909399; } + .el-message-box__status.el-icon-warning { + color: #E6A23C; } + .el-message-box__status.el-icon-error { + color: #F56C6C; } + .el-message-box__message { + margin: 0; } + .el-message-box__message p { + margin: 0; + line-height: 24px; } + .el-message-box__errormsg { + color: #F56C6C; + font-size: 12px; + min-height: 18px; + margin-top: 2px; } + .el-message-box__btns { + padding: 5px 15px 0; + text-align: right; } + .el-message-box__btns button:nth-child(2) { + margin-left: 10px; } + .el-message-box__btns-reverse { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .el-message-box--center { + padding-bottom: 30px; } + .el-message-box--center .el-message-box__header { + padding-top: 30px; } + .el-message-box--center .el-message-box__title { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message-box--center .el-message-box__status { + position: relative; + top: auto; + padding-right: 5px; + text-align: center; + -webkit-transform: translateY(-1px); + transform: translateY(-1px); } + .el-message-box--center .el-message-box__message { + margin-left: 0; } + .el-message-box--center .el-message-box__btns, .el-message-box--center .el-message-box__content { + text-align: center; } + .el-message-box--center .el-message-box__content { + padding-left: 27px; + padding-right: 27px; } + +.msgbox-fade-enter-active { + -webkit-animation: msgbox-fade-in .3s; + animation: msgbox-fade-in .3s; } + +.msgbox-fade-leave-active { + -webkit-animation: msgbox-fade-out .3s; + animation: msgbox-fade-out .3s; } + +@-webkit-keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@keyframes msgbox-fade-in { + 0% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } } + +@-webkit-keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } + +@keyframes msgbox-fade-out { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; } + 100% { + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + opacity: 0; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/message.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/message.css new file mode 100644 index 00000000..184ec4a3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/message.css @@ -0,0 +1,336 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-message { + min-width: 380px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + border-width: 1px; + border-style: solid; + border-color: #EBEEF5; + position: fixed; + left: 50%; + top: 20px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: #edf2fc; + -webkit-transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, top 0.4s, -webkit-transform .4s; + transition: opacity 0.3s, transform .4s, top 0.4s; + transition: opacity 0.3s, transform .4s, top 0.4s, -webkit-transform .4s; + overflow: hidden; + padding: 15px 15px 15px 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-message.is-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-message.is-closable .el-message__content { + padding-right: 16px; } + .el-message p { + margin: 0; } + .el-message--info .el-message__content { + color: #909399; } + .el-message--success { + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-message--success .el-message__content { + color: #67C23A; } + .el-message--warning { + background-color: #fdf6ec; + border-color: #faecd8; } + .el-message--warning .el-message__content { + color: #E6A23C; } + .el-message--error { + background-color: #fef0f0; + border-color: #fde2e2; } + .el-message--error .el-message__content { + color: #F56C6C; } + .el-message__icon { + margin-right: 10px; } + .el-message__content { + padding: 0; + font-size: 14px; + line-height: 1; } + .el-message__content:focus { + outline-width: 0; } + .el-message__closeBtn { + position: absolute; + top: 50%; + right: 15px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: #C0C4CC; + font-size: 16px; } + .el-message__closeBtn:focus { + outline-width: 0; } + .el-message__closeBtn:hover { + color: #909399; } + .el-message .el-icon-success { + color: #67C23A; } + .el-message .el-icon-error { + color: #F56C6C; } + .el-message .el-icon-info { + color: #909399; } + .el-message .el-icon-warning { + color: #E6A23C; } + +.el-message-fade-enter, +.el-message-fade-leave-active { + opacity: 0; + -webkit-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/notification.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/notification.css new file mode 100644 index 00000000..eb914e4d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/notification.css @@ -0,0 +1,323 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-notification { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 330px; + padding: 14px 26px 14px 13px; + border-radius: 8px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #EBEEF5; + position: fixed; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s; + transition: opacity .3s, transform .3s, left .3s, right .3s, top 0.4s, bottom .3s, -webkit-transform .3s; + overflow: hidden; } + .el-notification.right { + right: 16px; } + .el-notification.left { + left: 16px; } + .el-notification__group { + margin-left: 13px; + margin-right: 8px; } + .el-notification__title { + font-weight: bold; + font-size: 16px; + color: #303133; + margin: 0; } + .el-notification__content { + font-size: 14px; + line-height: 21px; + margin: 6px 0 0 0; + color: #606266; + text-align: justify; } + .el-notification__content p { + margin: 0; } + .el-notification__icon { + height: 24px; + width: 24px; + font-size: 24px; } + .el-notification__closeBtn { + position: absolute; + top: 18px; + right: 15px; + cursor: pointer; + color: #909399; + font-size: 16px; } + .el-notification__closeBtn:hover { + color: #606266; } + .el-notification .el-icon-success { + color: #67C23A; } + .el-notification .el-icon-error { + color: #F56C6C; } + .el-notification .el-icon-info { + color: #909399; } + .el-notification .el-icon-warning { + color: #E6A23C; } + +.el-notification-fade-enter.right { + right: 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + +.el-notification-fade-enter.left { + left: 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + +.el-notification-fade-leave-active { + opacity: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/option-group.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/option-group.css new file mode 100644 index 00000000..ebbe7d4c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/option-group.css @@ -0,0 +1,276 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/option.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/option.css new file mode 100644 index 00000000..7ea10207 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/option.css @@ -0,0 +1,273 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/page-header.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/page-header.css new file mode 100644 index 00000000..f73ce3da --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/page-header.css @@ -0,0 +1,283 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-page-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + line-height: 24px; } + .el-page-header__left { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + cursor: pointer; + margin-right: 40px; + position: relative; } + .el-page-header__left::after { + content: ""; + position: absolute; + width: 1px; + height: 16px; + right: -20px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + background-color: #DCDFE6; } + .el-page-header__left .el-icon-back { + font-size: 18px; + margin-right: 6px; + -ms-flex-item-align: center; + align-self: center; } + .el-page-header__title { + font-size: 14px; + font-weight: 500; } + .el-page-header__content { + font-size: 18px; + color: #303133; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/pagination.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/pagination.css new file mode 100644 index 00000000..2c612471 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/pagination.css @@ -0,0 +1,3275 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags +> span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } + +.el-pagination { + white-space: nowrap; + padding: 2px 5px; + color: #303133; + font-weight: bold; } + .el-pagination::before, + .el-pagination::after { + display: table; + content: ""; } + .el-pagination::after { + clear: both; } + .el-pagination span:not([class*=suffix]), + .el-pagination button { + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + vertical-align: top; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-pagination .el-input__inner { + text-align: center; + -moz-appearance: textfield; + line-height: normal; } + .el-pagination .el-input__suffix { + right: 0; + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-pagination .el-select .el-input { + width: 100px; + margin: 0 5px; } + .el-pagination .el-select .el-input .el-input__inner { + padding-right: 25px; + border-radius: 3px; } + .el-pagination button { + border: none; + padding: 0 6px; + background: transparent; } + .el-pagination button:focus { + outline: none; } + .el-pagination button:hover { + color: #409EFF; } + .el-pagination button:disabled { + color: #C0C4CC; + background-color: #FFFFFF; + cursor: not-allowed; } + .el-pagination .btn-prev, + .el-pagination .btn-next { + background: center center no-repeat; + background-size: 16px; + background-color: #FFFFFF; + cursor: pointer; + margin: 0; + color: #303133; } + .el-pagination .btn-prev .el-icon, + .el-pagination .btn-next .el-icon { + display: block; + font-size: 12px; + font-weight: bold; } + .el-pagination .btn-prev { + padding-right: 12px; } + .el-pagination .btn-next { + padding-left: 12px; } + .el-pagination .el-pager li.disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-pagination--small .btn-prev, + .el-pagination--small .btn-next, + .el-pagination--small .el-pager li, + .el-pagination--small .el-pager li.btn-quicknext, + .el-pagination--small .el-pager li.btn-quickprev, + .el-pagination--small .el-pager li:last-child { + border-color: transparent; + font-size: 12px; + line-height: 22px; + height: 22px; + min-width: 22px; } + .el-pagination--small .arrow.disabled { + visibility: hidden; } + .el-pagination--small .more::before, + .el-pagination--small li.more::before { + line-height: 24px; } + .el-pagination--small span:not([class*=suffix]), + .el-pagination--small button { + height: 22px; + line-height: 22px; } + .el-pagination--small .el-pagination__editor { + height: 22px; } + .el-pagination--small .el-pagination__editor.el-input .el-input__inner { + height: 22px; } + .el-pagination__sizes { + margin: 0 10px 0 0; + font-weight: normal; + color: #606266; } + .el-pagination__sizes .el-input .el-input__inner { + font-size: 13px; + padding-left: 8px; } + .el-pagination__sizes .el-input .el-input__inner:hover { + border-color: #409EFF; } + .el-pagination__total { + margin-right: 10px; + font-weight: normal; + color: #606266; } + .el-pagination__jump { + margin-left: 24px; + font-weight: normal; + color: #606266; } + .el-pagination__jump .el-input__inner { + padding: 0 3px; } + .el-pagination__rightwrapper { + float: right; } + .el-pagination__editor { + line-height: 18px; + padding: 0 2px; + height: 28px; + text-align: center; + margin: 0 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; } + .el-pagination__editor.el-input { + width: 50px; } + .el-pagination__editor.el-input .el-input__inner { + height: 28px; } + .el-pagination__editor .el-input__inner::-webkit-inner-spin-button, + .el-pagination__editor .el-input__inner::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; } + .el-pagination.is-background .btn-prev, + .el-pagination.is-background .btn-next, + .el-pagination.is-background .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; } + .el-pagination.is-background .btn-prev.disabled, + .el-pagination.is-background .btn-next.disabled, + .el-pagination.is-background .el-pager li.disabled { + color: #C0C4CC; } + .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next { + padding: 0; } + .el-pagination.is-background .btn-prev:disabled, .el-pagination.is-background .btn-next:disabled { + color: #C0C4CC; } + .el-pagination.is-background .el-pager li:not(.disabled):hover { + color: #409EFF; } + .el-pagination.is-background .el-pager li:not(.disabled).active { + background-color: #409EFF; + color: #FFFFFF; } + .el-pagination.is-background.el-pagination--small .btn-prev, + .el-pagination.is-background.el-pagination--small .btn-next, + .el-pagination.is-background.el-pagination--small .el-pager li { + margin: 0 3px; + min-width: 22px; } + +.el-pager { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + list-style: none; + display: inline-block; + vertical-align: top; + font-size: 0; + padding: 0; + margin: 0; } + .el-pager .more::before { + line-height: 30px; } + .el-pager li { + padding: 0 4px; + background: #FFFFFF; + vertical-align: top; + display: inline-block; + font-size: 13px; + min-width: 35.5px; + height: 28px; + line-height: 28px; + cursor: pointer; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + margin: 0; } + .el-pager li.btn-quicknext, .el-pager li.btn-quickprev { + line-height: 28px; + color: #303133; } + .el-pager li.btn-quicknext.disabled, .el-pager li.btn-quickprev.disabled { + color: #C0C4CC; } + .el-pager li.btn-quickprev:hover { + cursor: pointer; } + .el-pager li.btn-quicknext:hover { + cursor: pointer; } + .el-pager li.active + li { + border-left: 0; } + .el-pager li:hover { + color: #409EFF; } + .el-pager li.active { + color: #409EFF; + cursor: default; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popconfirm.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popconfirm.css new file mode 100644 index 00000000..709445cd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popconfirm.css @@ -0,0 +1,264 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popconfirm__main { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + +.el-popconfirm__icon { + margin-right: 5px; } + +.el-popconfirm__action { + text-align: right; + margin: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popover.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popover.css new file mode 100644 index 00000000..75610a0a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popover.css @@ -0,0 +1,605 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-popover { + position: absolute; + background: #FFFFFF; + min-width: 150px; + border-radius: 4px; + border: 1px solid #EBEEF5; + padding: 12px; + z-index: 2000; + color: #606266; + line-height: 1.4; + text-align: justify; + font-size: 14px; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + word-break: break-all; } + .el-popover--plain { + padding: 18px 20px; } + .el-popover__title { + color: #303133; + font-size: 16px; + line-height: 1; + margin-bottom: 12px; } + .el-popover__reference:focus:not(.focusing), .el-popover__reference:focus:hover { + outline-width: 0; } + .el-popover:focus:active, .el-popover:focus { + outline-width: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popper.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popper.css new file mode 100644 index 00000000..52a7e32f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/popper.css @@ -0,0 +1,328 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/progress.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/progress.css new file mode 100644 index 00000000..18649262 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/progress.css @@ -0,0 +1,349 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@-webkit-keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio-button.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio-button.css new file mode 100644 index 00000000..26afe478 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio-button.css @@ -0,0 +1,458 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-button { + position: relative; + display: inline-block; + outline: none; } + .el-radio-button__inner { + display: inline-block; + line-height: 1; + white-space: nowrap; + vertical-align: middle; + background: #FFFFFF; + border: 1px solid #DCDFE6; + font-weight: 500; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + cursor: pointer; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button__inner.is-round { + padding: 12px 20px; } + .el-radio-button__inner:hover { + color: #409EFF; } + .el-radio-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-radio-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-radio-button:first-child .el-radio-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-radio-button__orig-radio { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; } + .el-radio-button__orig-radio:checked + .el-radio-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #409EFF; + box-shadow: -1px 0 0 0 #409EFF; } + .el-radio-button__orig-radio:disabled + .el-radio-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-radio-button__orig-radio:disabled:checked + .el-radio-button__inner { + background-color: #F2F6FC; } + .el-radio-button:last-child .el-radio-button__inner { + border-radius: 0 4px 4px 0; } + .el-radio-button:first-child:last-child .el-radio-button__inner { + border-radius: 4px; } + .el-radio-button--medium .el-radio-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-radio-button--medium .el-radio-button__inner.is-round { + padding: 10px 20px; } + .el-radio-button--small .el-radio-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--small .el-radio-button__inner.is-round { + padding: 9px 15px; } + .el-radio-button--mini .el-radio-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-radio-button--mini .el-radio-button__inner.is-round { + padding: 7px 15px; } + .el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio-group.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio-group.css new file mode 100644 index 00000000..f492eac0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio-group.css @@ -0,0 +1,255 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio-group { + display: inline-block; + line-height: 1; + vertical-align: middle; + font-size: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio.css new file mode 100644 index 00000000..06fa228c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/radio.css @@ -0,0 +1,509 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-radio { + color: #606266; + font-weight: 500; + line-height: 1; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + outline: none; + font-size: 14px; + margin-right: 30px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } + .el-radio.is-bordered { + padding: 12px 20px 0 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 40px; } + .el-radio.is-bordered.is-checked { + border-color: #409EFF; } + .el-radio.is-bordered.is-disabled { + cursor: not-allowed; + border-color: #EBEEF5; } + .el-radio.is-bordered + .el-radio.is-bordered { + margin-left: 10px; } + .el-radio--medium.is-bordered { + padding: 10px 20px 0 10px; + border-radius: 4px; + height: 36px; } + .el-radio--medium.is-bordered .el-radio__label { + font-size: 14px; } + .el-radio--medium.is-bordered .el-radio__inner { + height: 14px; + width: 14px; } + .el-radio--small.is-bordered { + padding: 8px 15px 0 10px; + border-radius: 3px; + height: 32px; } + .el-radio--small.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--small.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio--mini.is-bordered { + padding: 6px 15px 0 10px; + border-radius: 3px; + height: 28px; } + .el-radio--mini.is-bordered .el-radio__label { + font-size: 12px; } + .el-radio--mini.is-bordered .el-radio__inner { + height: 12px; + width: 12px; } + .el-radio:last-child { + margin-right: 0; } + .el-radio__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-radio__input.is-disabled .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + cursor: not-allowed; } + .el-radio__input.is-disabled .el-radio__inner::after { + cursor: not-allowed; + background-color: #F5F7FA; } + .el-radio__input.is-disabled .el-radio__inner + .el-radio__label { + cursor: not-allowed; } + .el-radio__input.is-disabled.is-checked .el-radio__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; } + .el-radio__input.is-disabled.is-checked .el-radio__inner::after { + background-color: #C0C4CC; } + .el-radio__input.is-disabled + span.el-radio__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-radio__input.is-checked .el-radio__inner { + border-color: #409EFF; + background: #409EFF; } + .el-radio__input.is-checked .el-radio__inner::after { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); } + .el-radio__input.is-checked + .el-radio__label { + color: #409EFF; } + .el-radio__input.is-focus .el-radio__inner { + border-color: #409EFF; } + .el-radio__inner { + border: 1px solid #DCDFE6; + border-radius: 100%; + width: 14px; + height: 14px; + background-color: #FFFFFF; + position: relative; + cursor: pointer; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-radio__inner:hover { + border-color: #409EFF; } + .el-radio__inner::after { + width: 4px; + height: 4px; + border-radius: 100%; + background-color: #FFFFFF; + content: ""; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + -webkit-transition: -webkit-transform .15s ease-in; + transition: -webkit-transform .15s ease-in; + transition: transform .15s ease-in; + transition: transform .15s ease-in, -webkit-transform .15s ease-in; } + .el-radio__original { + opacity: 0; + outline: none; + position: absolute; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) { + /*获得焦点时 样式提醒*/ } + .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner { + -webkit-box-shadow: 0 0 2px 2px #409EFF; + box-shadow: 0 0 2px 2px #409EFF; } + .el-radio__label { + font-size: 14px; + padding-left: 10px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/rate.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/rate.css new file mode 100644 index 00000000..8129949b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/rate.css @@ -0,0 +1,284 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-rate { + height: 20px; + line-height: 1; } + .el-rate:focus, .el-rate:active { + outline-width: 0; } + .el-rate__item { + display: inline-block; + position: relative; + font-size: 0; + vertical-align: middle; } + .el-rate__icon { + position: relative; + display: inline-block; + font-size: 18px; + margin-right: 6px; + color: #C0C4CC; + -webkit-transition: .3s; + transition: .3s; } + .el-rate__icon.hover { + -webkit-transform: scale(1.15); + transform: scale(1.15); } + .el-rate__icon .path2 { + position: absolute; + left: 0; + top: 0; } + .el-rate__decimal { + position: absolute; + top: 0; + left: 0; + display: inline-block; + overflow: hidden; } + .el-rate__text { + font-size: 14px; + vertical-align: middle; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/reset.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/reset.css new file mode 100644 index 00000000..e3e1b15f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/reset.css @@ -0,0 +1,174 @@ +@charset "UTF-8"; +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +body { + font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; + font-weight: 400; + font-size: 14px; + color: #000000; + -webkit-font-smoothing: antialiased; } + +a { + color: #409EFF; + text-decoration: none; } + a:hover, a:focus { + color: #66b1ff; } + a:active { + color: #3a8ee6; } + +h1, h2, h3, h4, h5, h6 { + color: #606266; + font-weight: inherit; } + h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child { + margin-top: 0; } + h1:last-child, h2:last-child, h3:last-child, h4:last-child, h5:last-child, h6:last-child { + margin-bottom: 0; } + +h1 { + font-size: 20px; } + +h2 { + font-size: 18px; } + +h3 { + font-size: 16px; } + +h4, h5, h6, p { + font-size: inherit; } + +p { + line-height: 1.8; } + p:first-child { + margin-top: 0; } + p:last-child { + margin-bottom: 0; } + +sup, sub { + font-size: 13px; } + +small { + font-size: 12px; } + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/row.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/row.css new file mode 100644 index 00000000..6818788b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/row.css @@ -0,0 +1,289 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-row { + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-row::before, + .el-row::after { + display: table; + content: ""; } + .el-row::after { + clear: both; } + .el-row--flex { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-row--flex:before, .el-row--flex:after { + display: none; } + .el-row--flex.is-justify-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-row--flex.is-justify-end { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; } + .el-row--flex.is-justify-space-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; } + .el-row--flex.is-justify-space-around { + -ms-flex-pack: distribute; + justify-content: space-around; } + .el-row--flex.is-align-middle { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-row--flex.is-align-bottom { + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/scrollbar.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/scrollbar.css new file mode 100644 index 00000000..f73b67ef --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/scrollbar.css @@ -0,0 +1,296 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/select-dropdown.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/select-dropdown.css new file mode 100644 index 00000000..50a907da --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/select-dropdown.css @@ -0,0 +1,623 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/select.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/select.css new file mode 100644 index 00000000..58a426d7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/select.css @@ -0,0 +1,2825 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.el-select-dropdown { + position: absolute; + z-index: 1001; + border: solid 1px #E4E7ED; + border-radius: 4px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 5px 0; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected { + color: #409EFF; + background-color: #FFFFFF; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover { + background-color: #F5F7FA; } + .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + position: absolute; + right: 20px; + font-family: 'element-icons'; + content: "\e6da"; + font-size: 12px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list { + padding: 0; } + +.el-select-dropdown__empty { + padding: 10px 0; + margin: 0; + text-align: center; + color: #999; + font-size: 14px; } + +.el-select-dropdown__wrap { + max-height: 274px; } + +.el-select-dropdown__list { + list-style: none; + padding: 6px 0; + margin: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-dropdown__item { + font-size: 14px; + padding: 0 20px; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #606266; + height: 34px; + line-height: 34px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; } + .el-select-dropdown__item.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-select-dropdown__item.is-disabled:hover { + background-color: #FFFFFF; } + .el-select-dropdown__item.hover, .el-select-dropdown__item:hover { + background-color: #F5F7FA; } + .el-select-dropdown__item.selected { + color: #409EFF; + font-weight: bold; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-select-group { + margin: 0; + padding: 0; } + .el-select-group__wrap { + position: relative; + list-style: none; + margin: 0; + padding: 0; } + .el-select-group__wrap:not(:last-of-type) { + padding-bottom: 24px; } + .el-select-group__wrap:not(:last-of-type)::after { + content: ''; + position: absolute; + display: block; + left: 20px; + right: 20px; + bottom: 12px; + height: 1px; + background: #E4E7ED; } + .el-select-group__title { + padding-left: 20px; + font-size: 12px; + color: #909399; + line-height: 30px; } + .el-select-group .el-select-dropdown__item { + padding-left: 20px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +.el-select { + display: inline-block; + position: relative; } + .el-select .el-select__tags +> span { + display: contents; } + .el-select:hover .el-input__inner { + border-color: #C0C4CC; } + .el-select .el-input__inner { + cursor: pointer; + padding-right: 35px; } + .el-select .el-input__inner:focus { + border-color: #409EFF; } + .el-select .el-input .el-select__caret { + color: #C0C4CC; + font-size: 14px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + cursor: pointer; } + .el-select .el-input .el-select__caret.is-reverse { + -webkit-transform: rotateZ(0deg); + transform: rotateZ(0deg); } + .el-select .el-input .el-select__caret.is-show-close { + font-size: 14px; + text-align: center; + -webkit-transform: rotateZ(180deg); + transform: rotateZ(180deg); + border-radius: 100%; + color: #C0C4CC; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-select .el-input .el-select__caret.is-show-close:hover { + color: #909399; } + .el-select .el-input.is-disabled .el-input__inner { + cursor: not-allowed; } + .el-select .el-input.is-disabled .el-input__inner:hover { + border-color: #E4E7ED; } + .el-select .el-input.is-focus .el-input__inner { + border-color: #409EFF; } + .el-select > .el-input { + display: block; } + .el-select__input { + border: none; + outline: none; + padding: 0; + margin-left: 15px; + color: #666; + font-size: 14px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 28px; + background-color: transparent; } + .el-select__input.is-mini { + height: 14px; } + .el-select__close { + cursor: pointer; + position: absolute; + top: 8px; + z-index: 1000; + right: 25px; + color: #C0C4CC; + line-height: 18px; + font-size: 14px; } + .el-select__close:hover { + color: #909399; } + .el-select__tags { + position: absolute; + line-height: normal; + white-space: normal; + z-index: 1; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .el-select .el-tag__close { + margin-top: -2px; } + .el-select .el-tag { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-color: transparent; + margin: 2px 0 2px 6px; + background-color: #f0f2f5; } + .el-select .el-tag__close.el-icon-close { + background-color: #C0C4CC; + right: -7px; + top: 0; + color: #FFFFFF; } + .el-select .el-tag__close.el-icon-close:hover { + background-color: #909399; } + .el-select .el-tag__close.el-icon-close::before { + display: block; + -webkit-transform: translate(0, 0.5px); + transform: translate(0, 0.5px); } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/slider.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/slider.css new file mode 100644 index 00000000..2f30e55a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/slider.css @@ -0,0 +1,1677 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +.el-input-number { + position: relative; + display: inline-block; + width: 180px; + line-height: 38px; } + .el-input-number .el-input { + display: block; } + .el-input-number .el-input__inner { + -webkit-appearance: none; + padding-left: 50px; + padding-right: 50px; + text-align: center; } + .el-input-number__increase, .el-input-number__decrease { + position: absolute; + z-index: 1; + top: 1px; + width: 40px; + height: auto; + text-align: center; + background: #F5F7FA; + color: #606266; + cursor: pointer; + font-size: 13px; } + .el-input-number__increase:hover, .el-input-number__decrease:hover { + color: #409EFF; } + .el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled), .el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) { + border-color: #409EFF; } + .el-input-number__increase.is-disabled, .el-input-number__decrease.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-input-number__increase { + right: 1px; + border-radius: 0 4px 4px 0; + border-left: 1px solid #DCDFE6; } + .el-input-number__decrease { + left: 1px; + border-radius: 4px 0 0 4px; + border-right: 1px solid #DCDFE6; } + .el-input-number.is-disabled .el-input-number__increase, .el-input-number.is-disabled .el-input-number__decrease { + border-color: #E4E7ED; + color: #E4E7ED; } + .el-input-number.is-disabled .el-input-number__increase:hover, .el-input-number.is-disabled .el-input-number__decrease:hover { + color: #E4E7ED; + cursor: not-allowed; } + .el-input-number--medium { + width: 200px; + line-height: 34px; } + .el-input-number--medium .el-input-number__increase, .el-input-number--medium .el-input-number__decrease { + width: 36px; + font-size: 14px; } + .el-input-number--medium .el-input__inner { + padding-left: 43px; + padding-right: 43px; } + .el-input-number--small { + width: 130px; + line-height: 30px; } + .el-input-number--small .el-input-number__increase, .el-input-number--small .el-input-number__decrease { + width: 32px; + font-size: 13px; } + .el-input-number--small .el-input-number__increase [class*=el-icon], .el-input-number--small .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.9); + transform: scale(0.9); } + .el-input-number--small .el-input__inner { + padding-left: 39px; + padding-right: 39px; } + .el-input-number--mini { + width: 130px; + line-height: 26px; } + .el-input-number--mini .el-input-number__increase, .el-input-number--mini .el-input-number__decrease { + width: 28px; + font-size: 12px; } + .el-input-number--mini .el-input-number__increase [class*=el-icon], .el-input-number--mini .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number--mini .el-input__inner { + padding-left: 35px; + padding-right: 35px; } + .el-input-number.is-without-controls .el-input__inner { + padding-left: 15px; + padding-right: 15px; } + .el-input-number.is-controls-right .el-input__inner { + padding-left: 15px; + padding-right: 50px; } + .el-input-number.is-controls-right .el-input-number__increase, .el-input-number.is-controls-right .el-input-number__decrease { + height: auto; + line-height: 19px; } + .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon], .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon] { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-input-number.is-controls-right .el-input-number__increase { + border-radius: 0 4px 0 0; + border-bottom: 1px solid #DCDFE6; } + .el-input-number.is-controls-right .el-input-number__decrease { + right: 1px; + bottom: 1px; + top: auto; + left: auto; + border-right: none; + border-left: 1px solid #DCDFE6; + border-radius: 0 0 4px 0; } + .el-input-number.is-controls-right[class*=medium] [class*=increase], .el-input-number.is-controls-right[class*=medium] [class*=decrease] { + line-height: 17px; } + .el-input-number.is-controls-right[class*=small] [class*=increase], .el-input-number.is-controls-right[class*=small] [class*=decrease] { + line-height: 15px; } + .el-input-number.is-controls-right[class*=mini] [class*=increase], .el-input-number.is-controls-right[class*=mini] [class*=decrease] { + line-height: 13px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-slider::before, +.el-slider::after { + display: table; + content: ""; } + +.el-slider::after { + clear: both; } + +.el-slider__runway { + width: 100%; + height: 6px; + margin: 16px 0; + background-color: #E4E7ED; + border-radius: 3px; + position: relative; + cursor: pointer; + vertical-align: middle; } + .el-slider__runway.show-input { + margin-right: 160px; + width: auto; } + .el-slider__runway.disabled { + cursor: default; } + .el-slider__runway.disabled .el-slider__bar { + background-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button { + border-color: #C0C4CC; } + .el-slider__runway.disabled .el-slider__button-wrapper:hover, .el-slider__runway.disabled .el-slider__button-wrapper.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button-wrapper.dragging { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover, .el-slider__runway.disabled .el-slider__button.dragging { + -webkit-transform: scale(1); + transform: scale(1); } + .el-slider__runway.disabled .el-slider__button:hover, .el-slider__runway.disabled .el-slider__button.hover { + cursor: not-allowed; } + .el-slider__runway.disabled .el-slider__button.dragging { + cursor: not-allowed; } + +.el-slider__input { + float: right; + margin-top: 3px; + width: 130px; } + .el-slider__input.el-input-number--mini { + margin-top: 5px; } + .el-slider__input.el-input-number--medium { + margin-top: 0; } + .el-slider__input.el-input-number--large { + margin-top: -2px; } + +.el-slider__bar { + height: 6px; + background-color: #409EFF; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + position: absolute; } + +.el-slider__button-wrapper { + height: 36px; + width: 36px; + position: absolute; + z-index: 1001; + top: -15px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background-color: transparent; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + line-height: normal; } + .el-slider__button-wrapper::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-slider__button-wrapper .el-tooltip { + vertical-align: middle; + display: inline-block; } + .el-slider__button-wrapper:hover, .el-slider__button-wrapper.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button-wrapper.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__button { + width: 16px; + height: 16px; + border: solid 2px #409EFF; + background-color: #FFFFFF; + border-radius: 50%; + -webkit-transition: .2s; + transition: .2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .el-slider__button:hover, .el-slider__button.hover, .el-slider__button.dragging { + -webkit-transform: scale(1.2); + transform: scale(1.2); } + .el-slider__button:hover, .el-slider__button.hover { + cursor: -webkit-grab; + cursor: grab; } + .el-slider__button.dragging { + cursor: -webkit-grabbing; + cursor: grabbing; } + +.el-slider__stop { + position: absolute; + height: 6px; + width: 6px; + border-radius: 100%; + background-color: #FFFFFF; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.el-slider__marks { + top: 0; + left: 12px; + width: 18px; + height: 100%; } + .el-slider__marks-text { + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 14px; + color: #909399; + margin-top: 15px; } + +.el-slider.is-vertical { + position: relative; } + .el-slider.is-vertical .el-slider__runway { + width: 6px; + height: 100%; + margin: 0 16px; } + .el-slider.is-vertical .el-slider__bar { + width: 6px; + height: auto; + border-radius: 0 0 3px 3px; } + .el-slider.is-vertical .el-slider__button-wrapper { + top: auto; + left: -15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical .el-slider__stop { + -webkit-transform: translateY(50%); + transform: translateY(50%); } + .el-slider.is-vertical.el-slider--with-input { + padding-bottom: 58px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input { + overflow: visible; + float: none; + position: absolute; + bottom: 22px; + width: 36px; + margin-top: 15px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner { + text-align: center; + padding-left: 5px; + padding-right: 5px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + top: 32px; + margin-top: -1px; + border: 1px solid #DCDFE6; + line-height: 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease { + width: 18px; + right: 18px; + border-bottom-left-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase { + width: 19px; + border-bottom-right-radius: 4px; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase ~ .el-input .el-input__inner { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase { + border-color: #C0C4CC; } + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease, + .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase { + border-color: #409EFF; } + .el-slider.is-vertical .el-slider__marks-text { + margin-top: 0; + left: 15px; + -webkit-transform: translateY(50%); + transform: translateY(50%); } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/spinner.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/spinner.css new file mode 100644 index 00000000..c8567104 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/spinner.css @@ -0,0 +1,180 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-time-spinner { + width: 100%; + white-space: nowrap; } + +.el-spinner { + display: inline-block; + vertical-align: middle; } + +.el-spinner-inner { + -webkit-animation: rotate 2s linear infinite; + animation: rotate 2s linear infinite; + width: 50px; + height: 50px; } + .el-spinner-inner .path { + stroke: #ececec; + stroke-linecap: round; + -webkit-animation: dash 1.5s ease-in-out infinite; + animation: dash 1.5s ease-in-out infinite; } + +@-webkit-keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes rotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-webkit-keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } + +@keyframes dash { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; } + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -35; } + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -124; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/step.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/step.css new file mode 100644 index 00000000..c154e2f4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/step.css @@ -0,0 +1,485 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-step { + position: relative; + -ms-flex-negative: 1; + flex-shrink: 1; } + .el-step:last-of-type .el-step__line { + display: none; } + .el-step:last-of-type.is-flex { + -ms-flex-preferred-size: auto !important; + flex-basis: auto !important; + -ms-flex-negative: 0; + flex-shrink: 0; + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; } + .el-step:last-of-type .el-step__main, .el-step:last-of-type .el-step__description { + padding-right: 0; } + .el-step__head { + position: relative; + width: 100%; } + .el-step__head.is-process { + color: #303133; + border-color: #303133; } + .el-step__head.is-wait { + color: #C0C4CC; + border-color: #C0C4CC; } + .el-step__head.is-success { + color: #67C23A; + border-color: #67C23A; } + .el-step__head.is-error { + color: #F56C6C; + border-color: #F56C6C; } + .el-step__head.is-finish { + color: #409EFF; + border-color: #409EFF; } + .el-step__icon { + position: relative; + z-index: 1; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: 24px; + height: 24px; + font-size: 14px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #FFFFFF; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; } + .el-step__icon.is-text { + border-radius: 50%; + border: 2px solid; + border-color: inherit; } + .el-step__icon.is-icon { + width: 40px; } + .el-step__icon-inner { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-align: center; + font-weight: bold; + line-height: 1; + color: inherit; } + .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 25px; + font-weight: normal; } + .el-step__icon-inner.is-status { + -webkit-transform: translateY(1px); + transform: translateY(1px); } + .el-step__line { + position: absolute; + border-color: inherit; + background-color: #C0C4CC; } + .el-step__line-inner { + display: block; + border-width: 1px; + border-style: solid; + border-color: inherit; + -webkit-transition: .15s ease-out; + transition: .15s ease-out; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 0; + height: 0; } + .el-step__main { + white-space: normal; + text-align: left; } + .el-step__title { + font-size: 16px; + line-height: 38px; } + .el-step__title.is-process { + font-weight: bold; + color: #303133; } + .el-step__title.is-wait { + color: #C0C4CC; } + .el-step__title.is-success { + color: #67C23A; } + .el-step__title.is-error { + color: #F56C6C; } + .el-step__title.is-finish { + color: #409EFF; } + .el-step__description { + padding-right: 10%; + margin-top: -5px; + font-size: 12px; + line-height: 20px; + font-weight: normal; } + .el-step__description.is-process { + color: #303133; } + .el-step__description.is-wait { + color: #C0C4CC; } + .el-step__description.is-success { + color: #67C23A; } + .el-step__description.is-error { + color: #F56C6C; } + .el-step__description.is-finish { + color: #409EFF; } + .el-step.is-horizontal { + display: inline-block; } + .el-step.is-horizontal .el-step__line { + height: 2px; + top: 11px; + left: 0; + right: 0; } + .el-step.is-vertical { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-step.is-vertical .el-step__head { + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; + width: 24px; } + .el-step.is-vertical .el-step__main { + padding-left: 10px; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-vertical .el-step__title { + line-height: 24px; + padding-bottom: 8px; } + .el-step.is-vertical .el-step__line { + width: 2px; + top: 0; + bottom: 0; + left: 11px; } + .el-step.is-vertical .el-step__icon.is-icon { + width: 24px; } + .el-step.is-center .el-step__head { + text-align: center; } + .el-step.is-center .el-step__main { + text-align: center; } + .el-step.is-center .el-step__description { + padding-left: 20%; + padding-right: 20%; } + .el-step.is-center .el-step__line { + left: 50%; + right: -50%; } + .el-step.is-simple { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-step.is-simple .el-step__head { + width: auto; + font-size: 0; + padding-right: 10px; } + .el-step.is-simple .el-step__icon { + background: transparent; + width: 16px; + height: 16px; + font-size: 12px; } + .el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status) { + font-size: 18px; } + .el-step.is-simple .el-step__icon-inner.is-status { + -webkit-transform: scale(0.8) translateY(1px); + transform: scale(0.8) translateY(1px); } + .el-step.is-simple .el-step__main { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .el-step.is-simple .el-step__title { + font-size: 16px; + line-height: 20px; } + .el-step.is-simple:not(:last-of-type) .el-step__title { + max-width: 50%; + word-break: break-all; } + .el-step.is-simple .el-step__arrow { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; } + .el-step.is-simple .el-step__arrow::before, .el-step.is-simple .el-step__arrow::after { + content: ''; + display: inline-block; + position: absolute; + height: 15px; + width: 1px; + background: #C0C4CC; } + .el-step.is-simple .el-step__arrow::before { + -webkit-transform: rotate(-45deg) translateY(-4px); + transform: rotate(-45deg) translateY(-4px); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; } + .el-step.is-simple .el-step__arrow::after { + -webkit-transform: rotate(45deg) translateY(4px); + transform: rotate(45deg) translateY(4px); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; } + .el-step.is-simple:last-of-type .el-step__arrow { + display: none; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/steps.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/steps.css new file mode 100644 index 00000000..85c0bb55 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/steps.css @@ -0,0 +1,146 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-steps { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-steps--simple { + padding: 13px 8%; + border-radius: 4px; + background: #F5F7FA; } + .el-steps--horizontal { + white-space: nowrap; } + .el-steps--vertical { + height: 100%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column; + flex-flow: column; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/submenu.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/submenu.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/switch.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/switch.css new file mode 100644 index 00000000..e52e42d5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/switch.css @@ -0,0 +1,333 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-switch { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + font-size: 14px; + line-height: 20px; + height: 20px; + vertical-align: middle; } + .el-switch.is-disabled .el-switch__core, + .el-switch.is-disabled .el-switch__label { + cursor: not-allowed; } + .el-switch__label { + -webkit-transition: .2s; + transition: .2s; + height: 20px; + display: inline-block; + font-size: 14px; + font-weight: 500; + cursor: pointer; + vertical-align: middle; + color: #303133; } + .el-switch__label.is-active { + color: #409EFF; } + .el-switch__label--left { + margin-right: 10px; } + .el-switch__label--right { + margin-left: 10px; } + .el-switch__label * { + line-height: 1; + font-size: 14px; + display: inline-block; } + .el-switch__input { + position: absolute; + width: 0; + height: 0; + opacity: 0; + margin: 0; } + .el-switch__core { + margin: 0; + display: inline-block; + position: relative; + width: 40px; + height: 20px; + border: 1px solid #DCDFE6; + outline: none; + border-radius: 10px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #DCDFE6; + cursor: pointer; + -webkit-transition: border-color .3s, background-color .3s; + transition: border-color .3s, background-color .3s; + vertical-align: middle; } + .el-switch__core:after { + content: ""; + position: absolute; + top: 1px; + left: 1px; + border-radius: 100%; + -webkit-transition: all .3s; + transition: all .3s; + width: 16px; + height: 16px; + background-color: #FFFFFF; } + .el-switch.is-checked .el-switch__core { + border-color: #409EFF; + background-color: #409EFF; } + .el-switch.is-checked .el-switch__core::after { + left: 100%; + margin-left: -17px; } + .el-switch.is-disabled { + opacity: 0.6; } + .el-switch--wide .el-switch__label.el-switch__label--left span { + left: 10px; } + .el-switch--wide .el-switch__label.el-switch__label--right span { + right: 10px; } + .el-switch .label-fade-enter, + .el-switch .label-fade-leave-active { + opacity: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tab-pane.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tab-pane.css new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/table-column.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/table-column.css new file mode 100644 index 00000000..d1d98ede --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/table-column.css @@ -0,0 +1,1410 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table-column--selection .cell { + padding-left: 14px; + padding-right: 14px; } + +.el-table-filter { + border: solid 1px #EBEEF5; + border-radius: 2px; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 2px 0; + /** used for dropdown mode */ } + .el-table-filter__list { + padding: 5px 0; + margin: 0; + list-style: none; + min-width: 100px; } + .el-table-filter__list-item { + line-height: 36px; + padding: 0 10px; + cursor: pointer; + font-size: 14px; } + .el-table-filter__list-item:hover { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__list-item.is-active { + background-color: #409EFF; + color: #FFFFFF; } + .el-table-filter__content { + min-width: 100px; } + .el-table-filter__bottom { + border-top: 1px solid #EBEEF5; + padding: 8px; } + .el-table-filter__bottom button { + background: transparent; + border: none; + color: #606266; + cursor: pointer; + font-size: 13px; + padding: 0 3px; } + .el-table-filter__bottom button:hover { + color: #409EFF; } + .el-table-filter__bottom button:focus { + outline: none; } + .el-table-filter__bottom button.is-disabled { + color: #C0C4CC; + cursor: not-allowed; } + .el-table-filter__wrap { + max-height: 280px; } + .el-table-filter__checkbox-group { + padding: 10px; } + .el-table-filter__checkbox-group label.el-checkbox { + display: block; + margin-right: 5px; + margin-bottom: 8px; + margin-left: 5px; } + .el-table-filter__checkbox-group .el-checkbox:last-child { + margin-bottom: 0; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/table.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/table.css new file mode 100644 index 00000000..71ca3219 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/table.css @@ -0,0 +1,2047 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-table { + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; + max-width: 100%; + background-color: #FFFFFF; + font-size: 14px; + color: #606266; } + .el-table__empty-block { + min-height: 60px; + text-align: center; + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-table__empty-text { + line-height: 60px; + width: 50%; + color: #909399; } + .el-table__expand-column .cell { + padding: 0; + text-align: center; } + .el-table__expand-icon { + position: relative; + cursor: pointer; + color: #666; + font-size: 12px; + -webkit-transition: -webkit-transform 0.2s ease-in-out; + transition: -webkit-transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out; + height: 20px; } + .el-table__expand-icon--expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-table__expand-icon > .el-icon { + position: absolute; + left: 50%; + top: 50%; + margin-left: -5px; + margin-top: -5px; } + .el-table__expanded-cell { + background-color: #FFFFFF; } + .el-table__expanded-cell[class*=cell] { + padding: 20px 50px; } + .el-table__expanded-cell:hover { + background-color: transparent !important; } + .el-table__placeholder { + display: inline-block; + width: 20px; } + .el-table__append-wrapper { + overflow: hidden; } + .el-table--fit { + border-right: 0; + border-bottom: 0; } + .el-table--fit th.gutter, .el-table--fit td.gutter { + border-right-width: 1px; } + .el-table--scrollable-x .el-table__body-wrapper { + overflow-x: auto; } + .el-table--scrollable-y .el-table__body-wrapper { + overflow-y: auto; } + .el-table thead { + color: #909399; + font-weight: 500; } + .el-table thead.is-group th { + background: #F5F7FA; } + .el-table th, .el-table td { + padding: 12px 0; + min-width: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + vertical-align: middle; + position: relative; + text-align: left; } + .el-table th.is-center, .el-table td.is-center { + text-align: center; } + .el-table th.is-right, .el-table td.is-right { + text-align: right; } + .el-table th.gutter, .el-table td.gutter { + width: 15px; + border-right-width: 0; + border-bottom-width: 0; + padding: 0; } + .el-table th.is-hidden > *, .el-table td.is-hidden > * { + visibility: hidden; } + .el-table--medium th, .el-table--medium td { + padding: 10px 0; } + .el-table--small { + font-size: 12px; } + .el-table--small th, .el-table--small td { + padding: 8px 0; } + .el-table--mini { + font-size: 12px; } + .el-table--mini th, .el-table--mini td { + padding: 6px 0; } + .el-table tr { + background-color: #FFFFFF; } + .el-table tr input[type="checkbox"] { + margin: 0; } + .el-table th.is-leaf, .el-table td { + border-bottom: 1px solid #EBEEF5; } + .el-table th.is-sortable { + cursor: pointer; } + .el-table th { + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #FFFFFF; } + .el-table th > .cell { + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; + vertical-align: middle; + padding-left: 10px; + padding-right: 10px; + width: 100%; } + .el-table th > .cell.highlight { + color: #409EFF; } + .el-table th.required > div::before { + display: inline-block; + content: ""; + width: 8px; + height: 8px; + border-radius: 50%; + background: #ff4d51; + margin-right: 5px; + vertical-align: middle; } + .el-table td div { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-table td.gutter { + width: 0; } + .el-table .cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; + word-break: break-all; + line-height: 23px; + padding-left: 10px; + padding-right: 10px; } + .el-table .cell.el-tooltip { + white-space: nowrap; + min-width: 50px; } + .el-table--group, .el-table--border { + border: 1px solid #EBEEF5; } + .el-table--group::after, .el-table--border::after, .el-table::before { + content: ''; + position: absolute; + background-color: #EBEEF5; + z-index: 1; } + .el-table--group::after, .el-table--border::after { + top: 0; + right: 0; + width: 1px; + height: 100%; } + .el-table::before { + left: 0; + bottom: 0; + width: 100%; + height: 1px; } + .el-table--border { + border-right: none; + border-bottom: none; } + .el-table--border.el-loading-parent--relative { + border-color: transparent; } + .el-table--border th, .el-table--border td { + border-right: 1px solid #EBEEF5; } + .el-table--border th:first-child .cell, .el-table--border td:first-child .cell { + padding-left: 10px; } + .el-table--border th.gutter:last-of-type { + border-bottom: 1px solid #EBEEF5; + border-bottom-width: 1px; } + .el-table--border th { + border-bottom: 1px solid #EBEEF5; } + .el-table--hidden { + visibility: hidden; } + .el-table__fixed, .el-table__fixed-right { + position: absolute; + top: 0; + left: 0; + overflow-x: hidden; + overflow-y: hidden; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.12); } + .el-table__fixed::before, .el-table__fixed-right::before { + content: ''; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 1px; + background-color: #EBEEF5; + z-index: 4; } + .el-table__fixed-right-patch { + position: absolute; + top: -1px; + right: 0; + background-color: #FFFFFF; + border-bottom: 1px solid #EBEEF5; } + .el-table__fixed-right { + top: 0; + left: auto; + right: 0; } + .el-table__fixed-right .el-table__fixed-header-wrapper, + .el-table__fixed-right .el-table__fixed-body-wrapper, + .el-table__fixed-right .el-table__fixed-footer-wrapper { + left: auto; + right: 0; } + .el-table__fixed-header-wrapper { + position: absolute; + left: 0; + top: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper { + position: absolute; + left: 0; + bottom: 0; + z-index: 3; } + .el-table__fixed-footer-wrapper tbody td { + border-top: 1px solid #EBEEF5; + background-color: #F5F7FA; + color: #606266; } + .el-table__fixed-body-wrapper { + position: absolute; + left: 0; + top: 37px; + overflow: hidden; + z-index: 3; } + .el-table__header-wrapper, .el-table__body-wrapper, .el-table__footer-wrapper { + width: 100%; } + .el-table__footer-wrapper { + margin-top: -1px; } + .el-table__footer-wrapper td { + border-top: 1px solid #EBEEF5; } + .el-table__header, .el-table__body, .el-table__footer { + table-layout: fixed; + border-collapse: separate; } + .el-table__header-wrapper, .el-table__footer-wrapper { + overflow: hidden; } + .el-table__header-wrapper tbody td, .el-table__footer-wrapper tbody td { + background-color: #F5F7FA; + color: #606266; } + .el-table__body-wrapper { + overflow: hidden; + position: relative; } + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed, + .el-table__body-wrapper.is-scrolling-none ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-left ~ .el-table__fixed { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper.is-scrolling-right ~ .el-table__fixed-right { + -webkit-box-shadow: none; + box-shadow: none; } + .el-table__body-wrapper .el-table--border.is-scrolling-right ~ .el-table__fixed-right { + border-left: 1px solid #EBEEF5; } + .el-table__body-wrapper .el-table--border.is-scrolling-left ~ .el-table__fixed { + border-right: 1px solid #EBEEF5; } + .el-table .caret-wrapper { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 34px; + width: 24px; + vertical-align: middle; + cursor: pointer; + overflow: initial; + position: relative; } + .el-table .sort-caret { + width: 0; + height: 0; + border: solid 5px transparent; + position: absolute; + left: 7px; } + .el-table .sort-caret.ascending { + border-bottom-color: #C0C4CC; + top: 5px; } + .el-table .sort-caret.descending { + border-top-color: #C0C4CC; + bottom: 7px; } + .el-table .ascending .sort-caret.ascending { + border-bottom-color: #409EFF; } + .el-table .descending .sort-caret.descending { + border-top-color: #409EFF; } + .el-table .hidden-columns { + visibility: hidden; + position: absolute; + z-index: -1; } + .el-table--striped .el-table__body tr.el-table__row--striped td { + background: #FAFAFA; } + .el-table--striped .el-table__body tr.el-table__row--striped.current-row td { + background-color: #ecf5ff; } + .el-table__body tr.hover-row > td, .el-table__body tr.hover-row.current-row > td, .el-table__body tr.hover-row.el-table__row--striped > td, .el-table__body tr.hover-row.el-table__row--striped.current-row > td { + background-color: #F5F7FA; } + .el-table__body tr.current-row > td { + background-color: #ecf5ff; } + .el-table__column-resize-proxy { + position: absolute; + left: 200px; + top: 0; + bottom: 0; + width: 0; + border-left: 1px solid #EBEEF5; + z-index: 10; } + .el-table__column-filter-trigger { + display: inline-block; + line-height: 34px; + cursor: pointer; } + .el-table__column-filter-trigger i { + color: #909399; + font-size: 12px; + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .el-table--enable-row-transition .el-table__body td { + -webkit-transition: background-color .25s ease; + transition: background-color .25s ease; } + .el-table--enable-row-hover .el-table__body tr:hover > td { + background-color: #F5F7FA; } + .el-table--fluid-height .el-table__fixed, + .el-table--fluid-height .el-table__fixed-right { + bottom: 0; + overflow: hidden; } + .el-table [class*=el-table__row--level] .el-table__expand-icon { + display: inline-block; + width: 20px; + line-height: 20px; + height: 20px; + text-align: center; + margin-right: 3px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tabs.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tabs.css new file mode 100644 index 00000000..32b99d6c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tabs.css @@ -0,0 +1,831 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tabs__header { + padding: 0; + position: relative; + margin: 0 0 15px; } + +.el-tabs__active-bar { + position: absolute; + bottom: 0; + left: 0; + height: 2px; + background-color: #409EFF; + z-index: 1; + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + list-style: none; } + +.el-tabs__new-tab { + float: right; + border: 1px solid #d3dce6; + height: 18px; + width: 18px; + line-height: 18px; + margin: 12px 0 9px 10px; + border-radius: 3px; + text-align: center; + font-size: 12px; + color: #d3dce6; + cursor: pointer; + -webkit-transition: all .15s; + transition: all .15s; } + .el-tabs__new-tab .el-icon-plus { + -webkit-transform: scale(0.8, 0.8); + transform: scale(0.8, 0.8); } + .el-tabs__new-tab:hover { + color: #409EFF; } + +.el-tabs__nav-wrap { + overflow: hidden; + margin-bottom: -1px; + position: relative; } + .el-tabs__nav-wrap::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 2px; + background-color: #E4E7ED; + z-index: 1; } + .el-tabs__nav-wrap.is-scrollable { + padding: 0 20px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs__nav-scroll { + overflow: hidden; } + +.el-tabs__nav-next, .el-tabs__nav-prev { + position: absolute; + cursor: pointer; + line-height: 44px; + font-size: 12px; + color: #909399; } + +.el-tabs__nav-next { + right: 0; } + +.el-tabs__nav-prev { + left: 0; } + +.el-tabs__nav { + white-space: nowrap; + position: relative; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + float: left; + z-index: 2; } + .el-tabs__nav.is-stretch { + min-width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; } + .el-tabs__nav.is-stretch > * { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + text-align: center; } + +.el-tabs__item { + padding: 0 20px; + height: 40px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: 40px; + display: inline-block; + list-style: none; + font-size: 14px; + font-weight: 500; + color: #303133; + position: relative; } + .el-tabs__item:focus, .el-tabs__item:focus:active { + outline: none; } + .el-tabs__item:focus.is-active.is-focus:not(:active) { + -webkit-box-shadow: 0 0 2px 2px #409EFF inset; + box-shadow: 0 0 2px 2px #409EFF inset; + border-radius: 3px; } + .el-tabs__item .el-icon-close { + border-radius: 50%; + text-align: center; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + margin-left: 5px; } + .el-tabs__item .el-icon-close:before { + -webkit-transform: scale(0.9); + transform: scale(0.9); + display: inline-block; } + .el-tabs__item .el-icon-close:hover { + background-color: #C0C4CC; + color: #FFFFFF; } + .el-tabs__item.is-active { + color: #409EFF; } + .el-tabs__item:hover { + color: #409EFF; + cursor: pointer; } + .el-tabs__item.is-disabled { + color: #C0C4CC; + cursor: default; } + +.el-tabs__content { + overflow: hidden; + position: relative; } + +.el-tabs--card > .el-tabs__header { + border-bottom: 1px solid #E4E7ED; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__nav { + border: 1px solid #E4E7ED; + border-bottom: none; + border-radius: 4px 4px 0 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.el-tabs--card > .el-tabs__header .el-tabs__active-bar { + display: none; } + +.el-tabs--card > .el-tabs__header .el-tabs__item .el-icon-close { + position: relative; + font-size: 12px; + width: 0; + height: 14px; + vertical-align: middle; + line-height: 15px; + overflow: hidden; + top: -1px; + right: -2px; + -webkit-transform-origin: 100% 50%; + transform-origin: 100% 50%; } + +.el-tabs--card > .el-tabs__header .el-tabs__item { + border-bottom: 1px solid transparent; + border-left: 1px solid #E4E7ED; + -webkit-transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-tabs--card > .el-tabs__header .el-tabs__item:first-child { + border-left: none; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover { + padding-left: 13px; + padding-right: 13px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close { + width: 14px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active { + border-bottom-color: #FFFFFF; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable { + padding-left: 20px; + padding-right: 20px; } + .el-tabs--card > .el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close { + width: 14px; } + +.el-tabs--border-card { + background: #FFFFFF; + border: 1px solid #DCDFE6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); } + .el-tabs--border-card > .el-tabs__content { + padding: 15px; } + .el-tabs--border-card > .el-tabs__header { + background-color: #F5F7FA; + border-bottom: 1px solid #E4E7ED; + margin: 0; } + .el-tabs--border-card > .el-tabs__header .el-tabs__nav-wrap::after { + content: none; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item { + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + border: 1px solid transparent; + margin-top: -1px; + color: #909399; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:first-child { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item + .el-tabs__item { + margin-left: -1px; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + color: #409EFF; + background-color: #FFFFFF; + border-right-color: #DCDFE6; + border-left-color: #DCDFE6; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-disabled):hover { + color: #409EFF; } + .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-disabled { + color: #C0C4CC; } + .el-tabs--border-card > .el-tabs__header .is-scrollable .el-tabs__item:first-child { + margin-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:nth-child(2), +.el-tabs--top .el-tabs__item.is-bottom:nth-child(2), .el-tabs--bottom .el-tabs__item.is-top:nth-child(2), +.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2) { + padding-left: 0; } + +.el-tabs--top .el-tabs__item.is-top:last-child, +.el-tabs--top .el-tabs__item.is-bottom:last-child, .el-tabs--bottom .el-tabs__item.is-top:last-child, +.el-tabs--bottom .el-tabs__item.is-bottom:last-child { + padding-right: 0; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:nth-child(2), +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:nth-child(2), .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:nth-child(2) { + padding-left: 20px; } + +.el-tabs--top.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--top .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--top .el-tabs--right > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--border-card > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom.el-tabs--card > .el-tabs__header .el-tabs__item:last-child, +.el-tabs--bottom .el-tabs--left > .el-tabs__header .el-tabs__item:last-child, .el-tabs--bottom .el-tabs--right > .el-tabs__header .el-tabs__item:last-child { + padding-right: 20px; } + +.el-tabs--bottom .el-tabs__header.is-bottom { + margin-bottom: 0; + margin-top: 10px; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom { + border-bottom: 0; + border-top: 1px solid #DCDFE6; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom { + margin-top: -1px; + margin-bottom: 0; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active) { + border: 1px solid transparent; } + +.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom { + margin: 0 -1px -1px -1px; } + +.el-tabs--left, .el-tabs--right { + overflow: hidden; } + .el-tabs--left .el-tabs__header.is-left, + .el-tabs--left .el-tabs__header.is-right, + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, + .el-tabs--left .el-tabs__nav-scroll, .el-tabs--right .el-tabs__header.is-left, + .el-tabs--right .el-tabs__header.is-right, + .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right, + .el-tabs--right .el-tabs__nav-scroll { + height: 100%; } + .el-tabs--left .el-tabs__active-bar.is-left, + .el-tabs--left .el-tabs__active-bar.is-right, .el-tabs--right .el-tabs__active-bar.is-left, + .el-tabs--right .el-tabs__active-bar.is-right { + top: 0; + bottom: auto; + width: 2px; + height: auto; } + .el-tabs--left .el-tabs__nav-wrap.is-left, + .el-tabs--left .el-tabs__nav-wrap.is-right, .el-tabs--right .el-tabs__nav-wrap.is-left, + .el-tabs--right .el-tabs__nav-wrap.is-right { + margin-bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + height: 30px; + line-height: 30px; + width: 100%; + text-align: center; + cursor: pointer; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev i, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next i { + -webkit-transform: rotateZ(90deg); + transform: rotateZ(90deg); } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-prev, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-prev { + left: auto; + top: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--left .el-tabs__nav-wrap.is-right > .el-tabs__nav-next, .el-tabs--right .el-tabs__nav-wrap.is-left > .el-tabs__nav-next, + .el-tabs--right .el-tabs__nav-wrap.is-right > .el-tabs__nav-next { + right: auto; + bottom: 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable, .el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable, + .el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable { + padding: 30px 0; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after, + .el-tabs--left .el-tabs__nav-wrap.is-right::after, .el-tabs--right .el-tabs__nav-wrap.is-left::after, + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + height: 100%; + width: 2px; + bottom: auto; + top: 0; } + .el-tabs--left .el-tabs__nav.is-left, + .el-tabs--left .el-tabs__nav.is-right, .el-tabs--right .el-tabs__nav.is-left, + .el-tabs--right .el-tabs__nav.is-right { + float: none; } + .el-tabs--left .el-tabs__item.is-left, + .el-tabs--left .el-tabs__item.is-right, .el-tabs--right .el-tabs__item.is-left, + .el-tabs--right .el-tabs__item.is-right { + display: block; } + +.el-tabs--left .el-tabs__header.is-left { + float: left; + margin-bottom: 0; + margin-right: 10px; } + +.el-tabs--left .el-tabs__nav-wrap.is-left { + margin-right: -1px; } + .el-tabs--left .el-tabs__nav-wrap.is-left::after { + left: auto; + right: 0; } + +.el-tabs--left .el-tabs__active-bar.is-left { + right: 0; + left: auto; } + +.el-tabs--left .el-tabs__item.is-left { + text-align: right; } + +.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left { + display: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left { + border-left: none; + border-right: 1px solid #E4E7ED; + border-bottom: none; + border-top: 1px solid #E4E7ED; + text-align: left; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child { + border-right: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active { + border: 1px solid #E4E7ED; + border-right-color: #fff; + border-left: none; + border-bottom: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child { + border-top: none; } + .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child { + border-bottom: none; } + +.el-tabs--left.el-tabs--card .el-tabs__nav { + border-radius: 4px 0 0 4px; + border-bottom: 1px solid #E4E7ED; + border-right: none; } + +.el-tabs--left.el-tabs--card .el-tabs__new-tab { + float: none; } + +.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left { + border-right: 1px solid #dfe4ed; } + +.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left { + border: 1px solid transparent; + margin: -1px 0 -1px -1px; } + .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.el-tabs--right .el-tabs__header.is-right { + float: right; + margin-bottom: 0; + margin-left: 10px; } + +.el-tabs--right .el-tabs__nav-wrap.is-right { + margin-left: -1px; } + .el-tabs--right .el-tabs__nav-wrap.is-right::after { + left: 0; + right: auto; } + +.el-tabs--right .el-tabs__active-bar.is-right { + left: 0; } + +.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right { + display: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right { + border-bottom: none; + border-top: 1px solid #E4E7ED; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child { + border-left: 1px solid #E4E7ED; + border-top: none; } + +.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active { + border: 1px solid #E4E7ED; + border-left-color: #fff; + border-right: none; + border-bottom: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child { + border-top: none; } + .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child { + border-bottom: none; } + +.el-tabs--right.el-tabs--card .el-tabs__nav { + border-radius: 0 4px 4px 0; + border-bottom: 1px solid #E4E7ED; + border-left: none; } + +.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right { + border-left: 1px solid #dfe4ed; } + +.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right { + border: 1px solid transparent; + margin: -1px -1px -1px 0; } + .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active { + border-color: transparent; + border-top-color: #d1dbe5; + border-bottom-color: #d1dbe5; } + +.slideInRight-transition, +.slideInLeft-transition { + display: inline-block; } + +.slideInRight-enter { + -webkit-animation: slideInRight-enter .3s; + animation: slideInRight-enter .3s; } + +.slideInRight-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInRight-leave .3s; + animation: slideInRight-leave .3s; } + +.slideInLeft-enter { + -webkit-animation: slideInLeft-enter .3s; + animation: slideInLeft-enter .3s; } + +.slideInLeft-leave { + position: absolute; + left: 0; + right: 0; + -webkit-animation: slideInLeft-leave .3s; + animation: slideInLeft-leave .3s; } + +@-webkit-keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInRight-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@keyframes slideInRight-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(100%); + transform: translateX(100%); + opacity: 0; } } + +@-webkit-keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes slideInLeft-enter { + 0% { + opacity: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + to { + opacity: 1; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@-webkit-keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } + +@keyframes slideInLeft-leave { + 0% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; } + 100% { + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + opacity: 0; } } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tag.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tag.css new file mode 100644 index 00000000..b037ffab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tag.css @@ -0,0 +1,462 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tag { + background-color: #ecf5ff; + border-color: #d9ecff; + color: #409eff; + display: inline-block; + height: 32px; + padding: 0 10px; + line-height: 30px; + font-size: 12px; + color: #409EFF; + border-width: 1px; + border-style: solid; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; } + .el-tag.is-hit { + border-color: #409EFF; } + .el-tag .el-tag__close { + color: #409eff; } + .el-tag .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag.el-tag--info { + background-color: #f4f4f5; + border-color: #e9e9eb; + color: #909399; } + .el-tag.el-tag--info.is-hit { + border-color: #909399; } + .el-tag.el-tag--info .el-tag__close { + color: #909399; } + .el-tag.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag.el-tag--success { + background-color: #f0f9eb; + border-color: #e1f3d8; + color: #67c23a; } + .el-tag.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag.el-tag--warning { + background-color: #fdf6ec; + border-color: #faecd8; + color: #e6a23c; } + .el-tag.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag.el-tag--danger { + background-color: #fef0f0; + border-color: #fde2e2; + color: #f56c6c; } + .el-tag.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag .el-icon-close { + border-radius: 50%; + text-align: center; + position: relative; + cursor: pointer; + font-size: 12px; + height: 16px; + width: 16px; + line-height: 16px; + vertical-align: middle; + top: -1px; + right: -5px; } + .el-tag .el-icon-close::before { + display: block; } + .el-tag--dark { + background-color: #409eff; + border-color: #409eff; + color: white; } + .el-tag--dark.is-hit { + border-color: #409EFF; } + .el-tag--dark .el-tag__close { + color: white; } + .el-tag--dark .el-tag__close:hover { + color: #FFFFFF; + background-color: #66b1ff; } + .el-tag--dark.el-tag--info { + background-color: #909399; + border-color: #909399; + color: white; } + .el-tag--dark.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--dark.el-tag--info .el-tag__close { + color: white; } + .el-tag--dark.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #a6a9ad; } + .el-tag--dark.el-tag--success { + background-color: #67c23a; + border-color: #67c23a; + color: white; } + .el-tag--dark.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--dark.el-tag--success .el-tag__close { + color: white; } + .el-tag--dark.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #85ce61; } + .el-tag--dark.el-tag--warning { + background-color: #e6a23c; + border-color: #e6a23c; + color: white; } + .el-tag--dark.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--dark.el-tag--warning .el-tag__close { + color: white; } + .el-tag--dark.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #ebb563; } + .el-tag--dark.el-tag--danger { + background-color: #f56c6c; + border-color: #f56c6c; + color: white; } + .el-tag--dark.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--dark.el-tag--danger .el-tag__close { + color: white; } + .el-tag--dark.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f78989; } + .el-tag--plain { + background-color: white; + border-color: #b3d8ff; + color: #409eff; } + .el-tag--plain.is-hit { + border-color: #409EFF; } + .el-tag--plain .el-tag__close { + color: #409eff; } + .el-tag--plain .el-tag__close:hover { + color: #FFFFFF; + background-color: #409eff; } + .el-tag--plain.el-tag--info { + background-color: white; + border-color: #d3d4d6; + color: #909399; } + .el-tag--plain.el-tag--info.is-hit { + border-color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close { + color: #909399; } + .el-tag--plain.el-tag--info .el-tag__close:hover { + color: #FFFFFF; + background-color: #909399; } + .el-tag--plain.el-tag--success { + background-color: white; + border-color: #c2e7b0; + color: #67c23a; } + .el-tag--plain.el-tag--success.is-hit { + border-color: #67C23A; } + .el-tag--plain.el-tag--success .el-tag__close { + color: #67c23a; } + .el-tag--plain.el-tag--success .el-tag__close:hover { + color: #FFFFFF; + background-color: #67c23a; } + .el-tag--plain.el-tag--warning { + background-color: white; + border-color: #f5dab1; + color: #e6a23c; } + .el-tag--plain.el-tag--warning.is-hit { + border-color: #E6A23C; } + .el-tag--plain.el-tag--warning .el-tag__close { + color: #e6a23c; } + .el-tag--plain.el-tag--warning .el-tag__close:hover { + color: #FFFFFF; + background-color: #e6a23c; } + .el-tag--plain.el-tag--danger { + background-color: white; + border-color: #fbc4c4; + color: #f56c6c; } + .el-tag--plain.el-tag--danger.is-hit { + border-color: #F56C6C; } + .el-tag--plain.el-tag--danger .el-tag__close { + color: #f56c6c; } + .el-tag--plain.el-tag--danger .el-tag__close:hover { + color: #FFFFFF; + background-color: #f56c6c; } + .el-tag--medium { + height: 28px; + line-height: 26px; } + .el-tag--medium .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--small { + height: 24px; + padding: 0 8px; + line-height: 22px; } + .el-tag--small .el-icon-close { + -webkit-transform: scale(0.8); + transform: scale(0.8); } + .el-tag--mini { + height: 20px; + padding: 0 5px; + line-height: 19px; } + .el-tag--mini .el-icon-close { + margin-left: -3px; + -webkit-transform: scale(0.7); + transform: scale(0.7); } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/time-picker.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/time-picker.css new file mode 100644 index 00000000..e5c85a0d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/time-picker.css @@ -0,0 +1,2523 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-spinner.has-seconds .el-time-spinner__wrapper { + width: 33.3%; } + +.el-time-spinner__wrapper { + max-height: 190px; + overflow: auto; + display: inline-block; + width: 50%; + vertical-align: top; + position: relative; } + .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) { + padding-bottom: 15px; } + .el-time-spinner__wrapper.is-arrow { + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + overflow: hidden; } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__list { + -webkit-transform: translateY(-32px); + transform: translateY(-32px); } + .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #FFFFFF; + cursor: default; } + +.el-time-spinner__arrow { + font-size: 12px; + color: #909399; + position: absolute; + left: 0; + width: 100%; + z-index: 1; + text-align: center; + height: 30px; + line-height: 30px; + cursor: pointer; } + .el-time-spinner__arrow:hover { + color: #409EFF; } + .el-time-spinner__arrow.el-icon-arrow-up { + top: 10px; } + .el-time-spinner__arrow.el-icon-arrow-down { + bottom: 10px; } + +.el-time-spinner__input.el-input { + width: 70%; } + .el-time-spinner__input.el-input .el-input__inner { + padding: 0; + text-align: center; } + +.el-time-spinner__list { + padding: 0; + margin: 0; + list-style: none; + text-align: center; } + .el-time-spinner__list::after, .el-time-spinner__list::before { + content: ''; + display: block; + width: 100%; + height: 80px; } + +.el-time-spinner__item { + height: 32px; + line-height: 32px; + font-size: 12px; + color: #606266; } + .el-time-spinner__item:hover:not(.disabled):not(.active) { + background: #F5F7FA; + cursor: pointer; } + .el-time-spinner__item.active:not(.disabled) { + color: #303133; + font-weight: bold; } + .el-time-spinner__item.disabled { + color: #C0C4CC; + cursor: not-allowed; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-panel { + margin: 5px 0; + border: solid 1px #E4E7ED; + background-color: #FFFFFF; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + border-radius: 2px; + position: absolute; + width: 180px; + left: 0; + z-index: 1000; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .el-time-panel__content { + font-size: 0; + position: relative; + overflow: hidden; } + .el-time-panel__content::after, .el-time-panel__content::before { + content: ""; + top: 50%; + position: absolute; + margin-top: -15px; + height: 32px; + z-index: -1; + left: 0; + right: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + text-align: left; + border-top: 1px solid #E4E7ED; + border-bottom: 1px solid #E4E7ED; } + .el-time-panel__content::after { + left: 50%; + margin-left: 12%; + margin-right: 12%; } + .el-time-panel__content::before { + padding-left: 50%; + margin-right: 12%; + margin-left: 12%; } + .el-time-panel__content.has-seconds::after { + left: calc(100% / 3 * 2); } + .el-time-panel__content.has-seconds::before { + padding-left: calc(100% / 3); } + .el-time-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + height: 36px; + line-height: 25px; + text-align: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-time-panel__btn { + border: none; + line-height: 28px; + padding: 0 5px; + margin: 0 5px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; + color: #303133; } + .el-time-panel__btn.confirm { + font-weight: 800; + color: #409EFF; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-time-range-picker { + width: 354px; + overflow: visible; } + .el-time-range-picker__content { + position: relative; + text-align: center; + padding: 10px; } + .el-time-range-picker__cell { + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 4px 7px 7px; + width: 50%; + display: inline-block; } + .el-time-range-picker__header { + margin-bottom: 5px; + text-align: center; + font-size: 14px; } + .el-time-range-picker__body { + border-radius: 2px; + border: 1px solid #E4E7ED; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/time-select.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/time-select.css new file mode 100644 index 00000000..c80f5c05 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/time-select.css @@ -0,0 +1,1918 @@ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-date-editor { + position: relative; + display: inline-block; + text-align: left; } + .el-date-editor.el-input, .el-date-editor.el-input__inner { + width: 220px; } + .el-date-editor--monthrange.el-input, .el-date-editor--monthrange.el-input__inner { + width: 300px; } + .el-date-editor--daterange.el-input, .el-date-editor--daterange.el-input__inner, .el-date-editor--timerange.el-input, .el-date-editor--timerange.el-input__inner { + width: 350px; } + .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner { + width: 400px; } + .el-date-editor--dates .el-input__inner { + text-overflow: ellipsis; + white-space: nowrap; } + .el-date-editor .el-icon-circle-close { + cursor: pointer; } + .el-date-editor .el-range__icon { + font-size: 14px; + margin-left: -5px; + color: #C0C4CC; + float: left; + line-height: 32px; } + .el-date-editor .el-range-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: none; + outline: none; + display: inline-block; + height: 100%; + margin: 0; + padding: 0; + width: 39%; + text-align: center; + font-size: 14px; + color: #606266; } + .el-date-editor .el-range-input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-moz-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::-ms-input-placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-input::placeholder { + color: #C0C4CC; } + .el-date-editor .el-range-separator { + display: inline-block; + height: 100%; + padding: 0 5px; + margin: 0; + text-align: center; + line-height: 32px; + font-size: 14px; + width: 5%; + color: #303133; } + .el-date-editor .el-range__close-icon { + font-size: 14px; + color: #C0C4CC; + width: 25px; + display: inline-block; + float: right; + line-height: 32px; } + +.el-range-editor.el-input__inner { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 3px 10px; } + +.el-range-editor .el-range-input { + line-height: 1; } + +.el-range-editor.is-active { + border-color: #409EFF; } + .el-range-editor.is-active:hover { + border-color: #409EFF; } + +.el-range-editor--medium.el-input__inner { + height: 36px; } + +.el-range-editor--medium .el-range-separator { + line-height: 28px; + font-size: 14px; } + +.el-range-editor--medium .el-range-input { + font-size: 14px; } + +.el-range-editor--medium .el-range__icon, +.el-range-editor--medium .el-range__close-icon { + line-height: 28px; } + +.el-range-editor--small.el-input__inner { + height: 32px; } + +.el-range-editor--small .el-range-separator { + line-height: 24px; + font-size: 13px; } + +.el-range-editor--small .el-range-input { + font-size: 13px; } + +.el-range-editor--small .el-range__icon, +.el-range-editor--small .el-range__close-icon { + line-height: 24px; } + +.el-range-editor--mini.el-input__inner { + height: 28px; } + +.el-range-editor--mini .el-range-separator { + line-height: 20px; + font-size: 12px; } + +.el-range-editor--mini .el-range-input { + font-size: 12px; } + +.el-range-editor--mini .el-range__icon, +.el-range-editor--mini .el-range__close-icon { + line-height: 20px; } + +.el-range-editor.is-disabled { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled:hover, .el-range-editor.is-disabled:focus { + border-color: #E4E7ED; } + .el-range-editor.is-disabled input { + background-color: #F5F7FA; + color: #C0C4CC; + cursor: not-allowed; } + .el-range-editor.is-disabled input::-webkit-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-moz-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::-ms-input-placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled input::placeholder { + color: #C0C4CC; } + .el-range-editor.is-disabled .el-range-separator { + color: #C0C4CC; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-picker-panel { + color: #606266; + border: 1px solid #E4E7ED; + -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + background: #FFFFFF; + border-radius: 4px; + line-height: 30px; + margin: 5px 0; } + .el-picker-panel__body::after, .el-picker-panel__body-wrapper::after { + content: ""; + display: table; + clear: both; } + .el-picker-panel__content { + position: relative; + margin: 15px; } + .el-picker-panel__footer { + border-top: 1px solid #e4e4e4; + padding: 4px; + text-align: right; + background-color: #FFFFFF; + position: relative; + font-size: 0; } + .el-picker-panel__shortcut { + display: block; + width: 100%; + border: 0; + background-color: transparent; + line-height: 28px; + font-size: 14px; + color: #606266; + padding-left: 12px; + text-align: left; + outline: none; + cursor: pointer; } + .el-picker-panel__shortcut:hover { + color: #409EFF; } + .el-picker-panel__shortcut.active { + background-color: #e6f1fe; + color: #409EFF; } + .el-picker-panel__btn { + border: 1px solid #dcdcdc; + color: #333; + line-height: 24px; + border-radius: 2px; + padding: 0 20px; + cursor: pointer; + background-color: transparent; + outline: none; + font-size: 12px; } + .el-picker-panel__btn[disabled] { + color: #cccccc; + cursor: not-allowed; } + .el-picker-panel__icon-btn { + font-size: 12px; + color: #303133; + border: 0; + background: transparent; + cursor: pointer; + outline: none; + margin-top: 8px; } + .el-picker-panel__icon-btn:hover { + color: #409EFF; } + .el-picker-panel__icon-btn.is-disabled { + color: #bbb; } + .el-picker-panel__icon-btn.is-disabled:hover { + cursor: not-allowed; } + .el-picker-panel__link-btn { + vertical-align: middle; } + +.el-picker-panel *[slot=sidebar], +.el-picker-panel__sidebar { + position: absolute; + top: 0; + bottom: 0; + width: 110px; + border-right: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-top: 6px; + background-color: #FFFFFF; + overflow: auto; } + +.el-picker-panel *[slot=sidebar] + .el-picker-panel__body, +.el-picker-panel__sidebar + .el-picker-panel__body { + margin-left: 110px; } + +.el-date-picker { + width: 322px; } + .el-date-picker.has-sidebar.has-time { + width: 434px; } + .el-date-picker.has-sidebar { + width: 438px; } + .el-date-picker.has-time .el-picker-panel__body-wrapper { + position: relative; } + .el-date-picker .el-picker-panel__content { + width: 292px; } + .el-date-picker table { + table-layout: fixed; + width: 100%; } + .el-date-picker__editor-wrap { + position: relative; + display: table-cell; + padding: 0 5px; } + .el-date-picker__time-header { + position: relative; + border-bottom: 1px solid #e4e4e4; + font-size: 12px; + padding: 8px 5px 5px 5px; + display: table; + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-date-picker__header { + margin: 12px; + text-align: center; } + .el-date-picker__header--bordered { + margin-bottom: 0; + padding-bottom: 12px; + border-bottom: solid 1px #EBEEF5; } + .el-date-picker__header--bordered + .el-picker-panel__content { + margin-top: 0; } + .el-date-picker__header-label { + font-size: 16px; + font-weight: 500; + padding: 0 5px; + line-height: 22px; + text-align: center; + cursor: pointer; + color: #606266; } + .el-date-picker__header-label:hover { + color: #409EFF; } + .el-date-picker__header-label.active { + color: #409EFF; } + .el-date-picker__prev-btn { + float: left; } + .el-date-picker__next-btn { + float: right; } + .el-date-picker__time-wrap { + padding: 10px; + text-align: center; } + .el-date-picker__time-label { + float: left; + cursor: pointer; + line-height: 30px; + margin-left: 10px; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-scrollbar { + overflow: hidden; + position: relative; } + .el-scrollbar:hover > .el-scrollbar__bar, .el-scrollbar:active > .el-scrollbar__bar, .el-scrollbar:focus > .el-scrollbar__bar { + opacity: 1; + -webkit-transition: opacity 340ms ease-out; + transition: opacity 340ms ease-out; } + .el-scrollbar__wrap { + overflow: scroll; + height: 100%; } + .el-scrollbar__wrap--hidden-default { + scrollbar-width: none; } + .el-scrollbar__wrap--hidden-default::-webkit-scrollbar { + width: 0; + height: 0; } + .el-scrollbar__thumb { + position: relative; + display: block; + width: 0; + height: 0; + cursor: pointer; + border-radius: inherit; + background-color: rgba(144, 147, 153, 0.3); + -webkit-transition: .3s background-color; + transition: .3s background-color; } + .el-scrollbar__thumb:hover { + background-color: rgba(144, 147, 153, 0.5); } + .el-scrollbar__bar { + position: absolute; + right: 2px; + bottom: 2px; + z-index: 1; + border-radius: 4px; + opacity: 0; + -webkit-transition: opacity 120ms ease-out; + transition: opacity 120ms ease-out; } + .el-scrollbar__bar.is-vertical { + width: 6px; + top: 2px; } + .el-scrollbar__bar.is-vertical > div { + width: 100%; } + .el-scrollbar__bar.is-horizontal { + height: 6px; + left: 2px; } + .el-scrollbar__bar.is-horizontal > div { + height: 100%; } + +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-popper .popper__arrow, +.el-popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.el-popper .popper__arrow { + border-width: 6px; + -webkit-filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); + filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03)); } + +.el-popper .popper__arrow::after { + content: " "; + border-width: 6px; } + +.el-popper[x-placement^="top"] { + margin-bottom: 12px; } + +.el-popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + left: 50%; + margin-right: 3px; + border-top-color: #EBEEF5; + border-bottom-width: 0; } + .el-popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -6px; + border-top-color: #FFFFFF; + border-bottom-width: 0; } + +.el-popper[x-placement^="bottom"] { + margin-top: 12px; } + +.el-popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + left: 50%; + margin-right: 3px; + border-top-width: 0; + border-bottom-color: #EBEEF5; } + .el-popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -6px; + border-top-width: 0; + border-bottom-color: #FFFFFF; } + +.el-popper[x-placement^="right"] { + margin-left: 12px; } + +.el-popper[x-placement^="right"] .popper__arrow { + top: 50%; + left: -6px; + margin-bottom: 3px; + border-right-color: #EBEEF5; + border-left-width: 0; } + .el-popper[x-placement^="right"] .popper__arrow::after { + bottom: -6px; + left: 1px; + border-right-color: #FFFFFF; + border-left-width: 0; } + +.el-popper[x-placement^="left"] { + margin-right: 12px; } + +.el-popper[x-placement^="left"] .popper__arrow { + top: 50%; + right: -6px; + margin-bottom: 3px; + border-right-width: 0; + border-left-color: #EBEEF5; } + .el-popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -6px; + margin-left: -6px; + border-right-width: 0; + border-left-color: #FFFFFF; } + +.time-select { + margin: 5px 0; + min-width: 0; } + +.time-select .el-picker-panel__content { + max-height: 200px; + margin: 0; } + +.time-select-item { + padding: 8px 10px; + font-size: 14px; + line-height: 20px; } + +.time-select-item.selected:not(.disabled) { + color: #409EFF; + font-weight: bold; } + +.time-select-item.disabled { + color: #E4E7ED; + cursor: not-allowed; } + +.time-select-item:hover { + background-color: #F5F7FA; + font-weight: bold; + cursor: pointer; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/timeline-item.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/timeline-item.css new file mode 100644 index 00000000..5a52cd66 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/timeline-item.css @@ -0,0 +1,318 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline-item { + position: relative; + padding-bottom: 20px; } + .el-timeline-item__wrapper { + position: relative; + padding-left: 28px; + top: -3px; } + .el-timeline-item__tail { + position: absolute; + left: 4px; + height: 100%; + border-left: 2px solid #E4E7ED; } + .el-timeline-item__icon { + color: #FFFFFF; + font-size: 13px; } + .el-timeline-item__node { + position: absolute; + background-color: #E4E7ED; + border-radius: 50%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__node--normal { + left: -1px; + width: 12px; + height: 12px; } + .el-timeline-item__node--large { + left: -2px; + width: 14px; + height: 14px; } + .el-timeline-item__node--primary { + background-color: #409EFF; } + .el-timeline-item__node--success { + background-color: #67C23A; } + .el-timeline-item__node--warning { + background-color: #E6A23C; } + .el-timeline-item__node--danger { + background-color: #F56C6C; } + .el-timeline-item__node--info { + background-color: #909399; } + .el-timeline-item__dot { + position: absolute; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; } + .el-timeline-item__content { + color: #303133; } + .el-timeline-item__timestamp { + color: #909399; + line-height: 1; + font-size: 13px; } + .el-timeline-item__timestamp.is-top { + margin-bottom: 8px; + padding-top: 4px; } + .el-timeline-item__timestamp.is-bottom { + margin-top: 8px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/timeline.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/timeline.css new file mode 100644 index 00000000..0456b063 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/timeline.css @@ -0,0 +1,256 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-timeline { + margin: 0; + font-size: 14px; + list-style: none; } + .el-timeline .el-timeline-item:last-child .el-timeline-item__tail { + display: none; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tooltip.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tooltip.css new file mode 100644 index 00000000..876f42ed --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tooltip.css @@ -0,0 +1,342 @@ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-tooltip:focus:not(.focusing), .el-tooltip:focus:hover { + outline-width: 0; } + +.el-tooltip__popper { + position: absolute; + border-radius: 4px; + padding: 10px; + z-index: 2000; + font-size: 12px; + line-height: 1.2; + min-width: 10px; + word-wrap: break-word; } + .el-tooltip__popper .popper__arrow, + .el-tooltip__popper .popper__arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .el-tooltip__popper .popper__arrow { + border-width: 6px; } + .el-tooltip__popper .popper__arrow::after { + content: " "; + border-width: 5px; } + .el-tooltip__popper[x-placement^="top"] { + margin-bottom: 12px; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow { + bottom: -6px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="top"] .popper__arrow::after { + bottom: 1px; + margin-left: -5px; + border-top-color: #303133; + border-bottom-width: 0; } + .el-tooltip__popper[x-placement^="bottom"] { + margin-top: 12px; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow { + top: -6px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after { + top: 1px; + margin-left: -5px; + border-top-width: 0; + border-bottom-color: #303133; } + .el-tooltip__popper[x-placement^="right"] { + margin-left: 12px; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow { + left: -6px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="right"] .popper__arrow::after { + bottom: -5px; + left: 1px; + border-right-color: #303133; + border-left-width: 0; } + .el-tooltip__popper[x-placement^="left"] { + margin-right: 12px; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow { + right: -6px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper[x-placement^="left"] .popper__arrow::after { + right: 1px; + bottom: -5px; + margin-left: -5px; + border-right-width: 0; + border-left-color: #303133; } + .el-tooltip__popper.is-dark { + background: #303133; + color: #FFFFFF; } + .el-tooltip__popper.is-light { + background: #FFFFFF; + border: 1px solid #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow { + border-top-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow::after { + border-top-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow { + border-bottom-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow { + border-left-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow::after { + border-left-color: #FFFFFF; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow { + border-right-color: #303133; } + .el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow::after { + border-right-color: #FFFFFF; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/transfer.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/transfer.css new file mode 100644 index 00000000..458fde82 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/transfer.css @@ -0,0 +1,2349 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-textarea { + position: relative; + display: inline-block; + width: 100%; + vertical-align: bottom; + font-size: 14px; } + .el-textarea__inner { + display: block; + resize: vertical; + padding: 5px 15px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + font-size: inherit; + color: #606266; + background-color: #FFFFFF; + background-image: none; + border: 1px solid #DCDFE6; + border-radius: 4px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea__inner:hover { + border-color: #C0C4CC; } + .el-textarea__inner:focus { + outline: none; + border-color: #409EFF; } + .el-textarea .el-input__count { + color: #909399; + background: #FFFFFF; + position: absolute; + font-size: 12px; + bottom: 5px; + right: 10px; } + .el-textarea.is-disabled .el-textarea__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-moz-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-textarea.is-disabled .el-textarea__inner::placeholder { + color: #C0C4CC; } + .el-textarea.is-exceed .el-textarea__inner { + border-color: #F56C6C; } + .el-textarea.is-exceed .el-input__count { + color: #F56C6C; } + +.el-input { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; } + .el-input::-webkit-scrollbar { + z-index: 11; + width: 6px; } + .el-input::-webkit-scrollbar:horizontal { + height: 6px; } + .el-input::-webkit-scrollbar-thumb { + border-radius: 5px; + width: 6px; + background: #b4bccc; } + .el-input::-webkit-scrollbar-corner { + background: #fff; } + .el-input::-webkit-scrollbar-track { + background: #fff; } + .el-input::-webkit-scrollbar-track-piece { + background: #fff; + width: 6px; } + .el-input .el-input__clear { + color: #C0C4CC; + font-size: 14px; + cursor: pointer; + -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); } + .el-input .el-input__clear:hover { + color: #909399; } + .el-input .el-input__count { + height: 100%; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + color: #909399; + font-size: 12px; } + .el-input .el-input__count .el-input__count-inner { + background: #FFFFFF; + line-height: initial; + display: inline-block; + padding: 0 5px; } + .el-input__inner { + -webkit-appearance: none; + background-color: #FFFFFF; + background-image: none; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #606266; + display: inline-block; + font-size: inherit; + height: 40px; + line-height: 40px; + outline: none; + padding: 0 15px; + -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + width: 100%; } + .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input__inner:hover { + border-color: #C0C4CC; } + .el-input__inner:focus { + outline: none; + border-color: #409EFF; } + .el-input__suffix { + position: absolute; + height: 100%; + right: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; + pointer-events: none; } + .el-input__suffix-inner { + pointer-events: all; } + .el-input__prefix { + position: absolute; + height: 100%; + left: 5px; + top: 0; + text-align: center; + color: #C0C4CC; + -webkit-transition: all .3s; + transition: all .3s; } + .el-input__icon { + height: 100%; + width: 25px; + text-align: center; + -webkit-transition: all .3s; + transition: all .3s; + line-height: 40px; } + .el-input__icon:after { + content: ''; + height: 100%; + width: 0; + display: inline-block; + vertical-align: middle; } + .el-input__validateIcon { + pointer-events: none; } + .el-input.is-active .el-input__inner { + outline: none; + border-color: #409EFF; } + .el-input.is-disabled .el-input__inner { + background-color: #F5F7FA; + border-color: #E4E7ED; + color: #C0C4CC; + cursor: not-allowed; } + .el-input.is-disabled .el-input__inner::-webkit-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-moz-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::-ms-input-placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__inner::placeholder { + color: #C0C4CC; } + .el-input.is-disabled .el-input__icon { + cursor: not-allowed; } + .el-input.is-exceed .el-input__inner { + border-color: #F56C6C; } + .el-input.is-exceed .el-input__suffix .el-input__count { + color: #F56C6C; } + .el-input--suffix .el-input__inner { + padding-right: 30px; } + .el-input--prefix .el-input__inner { + padding-left: 30px; } + .el-input--medium { + font-size: 14px; } + .el-input--medium .el-input__inner { + height: 36px; + line-height: 36px; } + .el-input--medium .el-input__icon { + line-height: 36px; } + .el-input--small { + font-size: 13px; } + .el-input--small .el-input__inner { + height: 32px; + line-height: 32px; } + .el-input--small .el-input__icon { + line-height: 32px; } + .el-input--mini { + font-size: 12px; } + .el-input--mini .el-input__inner { + height: 28px; + line-height: 28px; } + .el-input--mini .el-input__icon { + line-height: 28px; } + +.el-input-group { + line-height: normal; + display: inline-table; + width: 100%; + border-collapse: separate; + border-spacing: 0; } + .el-input-group > .el-input__inner { + vertical-align: middle; + display: table-cell; } + .el-input-group__append, .el-input-group__prepend { + background-color: #F5F7FA; + color: #909399; + vertical-align: middle; + display: table-cell; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 4px; + padding: 0 20px; + width: 1px; + white-space: nowrap; } + .el-input-group__append:focus, .el-input-group__prepend:focus { + outline: none; } + .el-input-group__append .el-select, + .el-input-group__append .el-button, .el-input-group__prepend .el-select, + .el-input-group__prepend .el-button { + display: inline-block; + margin: -10px -20px; } + .el-input-group__append button.el-button, + .el-input-group__append div.el-select .el-input__inner, + .el-input-group__append div.el-select:hover .el-input__inner, .el-input-group__prepend button.el-button, + .el-input-group__prepend div.el-select .el-input__inner, + .el-input-group__prepend div.el-select:hover .el-input__inner { + border-color: transparent; + background-color: transparent; + color: inherit; + border-top: 0; + border-bottom: 0; } + .el-input-group__append .el-button, + .el-input-group__append .el-input, .el-input-group__prepend .el-button, + .el-input-group__prepend .el-input { + font-size: inherit; } + .el-input-group__prepend { + border-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group__append { + border-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-input__inner { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + .el-input-group--append .el-input__inner { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-input-group--append .el-select .el-input.is-focus .el-input__inner { + border-color: transparent; } + +/** disalbe default clear on IE */ +.el-input__inner::-ms-clear { + display: none; + width: 0; + height: 0; } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +.el-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-color: #DCDFE6; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + -webkit-transition: .1s; + transition: .1s; + font-weight: 500; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button + .el-button { + margin-left: 10px; } + .el-button.is-round { + padding: 12px 20px; } + .el-button:hover, .el-button:focus { + color: #409EFF; + border-color: #c6e2ff; + background-color: #ecf5ff; } + .el-button:active { + color: #3a8ee6; + border-color: #3a8ee6; + outline: none; } + .el-button::-moz-focus-inner { + border: 0; } + .el-button [class*="el-icon-"] + span { + margin-left: 5px; } + .el-button.is-plain:hover, .el-button.is-plain:focus { + background: #FFFFFF; + border-color: #409EFF; + color: #409EFF; } + .el-button.is-plain:active { + background: #FFFFFF; + border-color: #3a8ee6; + color: #3a8ee6; + outline: none; } + .el-button.is-active { + color: #3a8ee6; + border-color: #3a8ee6; } + .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; } + .el-button.is-disabled.el-button--text { + background-color: transparent; } + .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus { + background-color: #FFFFFF; + border-color: #EBEEF5; + color: #C0C4CC; } + .el-button.is-loading { + position: relative; + pointer-events: none; } + .el-button.is-loading:before { + pointer-events: none; + content: ''; + position: absolute; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + border-radius: inherit; + background-color: rgba(255, 255, 255, 0.35); } + .el-button.is-round { + border-radius: 20px; + padding: 12px 23px; } + .el-button.is-circle { + border-radius: 50%; + padding: 12px; } + .el-button--primary { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; } + .el-button--primary:hover, .el-button--primary:focus { + background: #66b1ff; + border-color: #66b1ff; + color: #FFFFFF; } + .el-button--primary:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; } + .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active { + color: #FFFFFF; + background-color: #a0cfff; + border-color: #a0cfff; } + .el-button--primary.is-plain { + color: #409EFF; + background: #ecf5ff; + border-color: #b3d8ff; } + .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus { + background: #409EFF; + border-color: #409EFF; + color: #FFFFFF; } + .el-button--primary.is-plain:active { + background: #3a8ee6; + border-color: #3a8ee6; + color: #FFFFFF; + outline: none; } + .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active { + color: #8cc5ff; + background-color: #ecf5ff; + border-color: #d9ecff; } + .el-button--success { + color: #FFFFFF; + background-color: #67C23A; + border-color: #67C23A; } + .el-button--success:hover, .el-button--success:focus { + background: #85ce61; + border-color: #85ce61; + color: #FFFFFF; } + .el-button--success:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; } + .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active { + color: #FFFFFF; + background-color: #b3e19d; + border-color: #b3e19d; } + .el-button--success.is-plain { + color: #67C23A; + background: #f0f9eb; + border-color: #c2e7b0; } + .el-button--success.is-plain:hover, .el-button--success.is-plain:focus { + background: #67C23A; + border-color: #67C23A; + color: #FFFFFF; } + .el-button--success.is-plain:active { + background: #5daf34; + border-color: #5daf34; + color: #FFFFFF; + outline: none; } + .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active { + color: #a4da89; + background-color: #f0f9eb; + border-color: #e1f3d8; } + .el-button--warning { + color: #FFFFFF; + background-color: #E6A23C; + border-color: #E6A23C; } + .el-button--warning:hover, .el-button--warning:focus { + background: #ebb563; + border-color: #ebb563; + color: #FFFFFF; } + .el-button--warning:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; } + .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active { + color: #FFFFFF; + background-color: #f3d19e; + border-color: #f3d19e; } + .el-button--warning.is-plain { + color: #E6A23C; + background: #fdf6ec; + border-color: #f5dab1; } + .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus { + background: #E6A23C; + border-color: #E6A23C; + color: #FFFFFF; } + .el-button--warning.is-plain:active { + background: #cf9236; + border-color: #cf9236; + color: #FFFFFF; + outline: none; } + .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active { + color: #f0c78a; + background-color: #fdf6ec; + border-color: #faecd8; } + .el-button--danger { + color: #FFFFFF; + background-color: #F56C6C; + border-color: #F56C6C; } + .el-button--danger:hover, .el-button--danger:focus { + background: #f78989; + border-color: #f78989; + color: #FFFFFF; } + .el-button--danger:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; } + .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active { + color: #FFFFFF; + background-color: #fab6b6; + border-color: #fab6b6; } + .el-button--danger.is-plain { + color: #F56C6C; + background: #fef0f0; + border-color: #fbc4c4; } + .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus { + background: #F56C6C; + border-color: #F56C6C; + color: #FFFFFF; } + .el-button--danger.is-plain:active { + background: #dd6161; + border-color: #dd6161; + color: #FFFFFF; + outline: none; } + .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active { + color: #f9a7a7; + background-color: #fef0f0; + border-color: #fde2e2; } + .el-button--info { + color: #FFFFFF; + background-color: #909399; + border-color: #909399; } + .el-button--info:hover, .el-button--info:focus { + background: #a6a9ad; + border-color: #a6a9ad; + color: #FFFFFF; } + .el-button--info:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; } + .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active { + color: #FFFFFF; + background-color: #c8c9cc; + border-color: #c8c9cc; } + .el-button--info.is-plain { + color: #909399; + background: #f4f4f5; + border-color: #d3d4d6; } + .el-button--info.is-plain:hover, .el-button--info.is-plain:focus { + background: #909399; + border-color: #909399; + color: #FFFFFF; } + .el-button--info.is-plain:active { + background: #82848a; + border-color: #82848a; + color: #FFFFFF; + outline: none; } + .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active { + color: #bcbec2; + background-color: #f4f4f5; + border-color: #e9e9eb; } + .el-button--medium { + padding: 10px 20px; + font-size: 14px; + border-radius: 4px; } + .el-button--medium.is-round { + padding: 10px 20px; } + .el-button--medium.is-circle { + padding: 10px; } + .el-button--small { + padding: 9px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--small.is-round { + padding: 9px 15px; } + .el-button--small.is-circle { + padding: 9px; } + .el-button--mini { + padding: 7px 15px; + font-size: 12px; + border-radius: 3px; } + .el-button--mini.is-round { + padding: 7px 15px; } + .el-button--mini.is-circle { + padding: 7px; } + .el-button--text { + border-color: transparent; + color: #409EFF; + background: transparent; + padding-left: 0; + padding-right: 0; } + .el-button--text:hover, .el-button--text:focus { + color: #66b1ff; + border-color: transparent; + background-color: transparent; } + .el-button--text:active { + color: #3a8ee6; + border-color: transparent; + background-color: transparent; } + .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus { + border-color: transparent; } + +.el-button-group { + display: inline-block; + vertical-align: middle; } + .el-button-group::before, + .el-button-group::after { + display: table; + content: ""; } + .el-button-group::after { + clear: both; } + .el-button-group > .el-button { + float: left; + position: relative; } + .el-button-group > .el-button + .el-button { + margin-left: 0; } + .el-button-group > .el-button.is-disabled { + z-index: 1; } + .el-button-group > .el-button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .el-button-group > .el-button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .el-button-group > .el-button:first-child:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .el-button-group > .el-button:first-child:last-child.is-round { + border-radius: 20px; } + .el-button-group > .el-button:first-child:last-child.is-circle { + border-radius: 50%; } + .el-button-group > .el-button:not(:first-child):not(:last-child) { + border-radius: 0; } + .el-button-group > .el-button:not(:last-child) { + margin-right: -1px; } + .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active { + z-index: 1; } + .el-button-group > .el-button.is-active { + z-index: 1; } + .el-button-group > .el-dropdown > .el-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--primary:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--success:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--warning:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--danger:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:first-child { + border-right-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:last-child { + border-left-color: rgba(255, 255, 255, 0.5); } + .el-button-group .el-button--info:not(:first-child):not(:last-child) { + border-left-color: rgba(255, 255, 255, 0.5); + border-right-color: rgba(255, 255, 255, 0.5); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-transfer { + font-size: 14px; } + .el-transfer__buttons { + display: inline-block; + vertical-align: middle; + padding: 0 30px; } + .el-transfer__button { + display: block; + margin: 0 auto; + padding: 10px; + border-radius: 50%; + color: #FFFFFF; + background-color: #409EFF; + font-size: 0; } + .el-transfer__button.is-with-texts { + border-radius: 4px; } + .el-transfer__button.is-disabled { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button.is-disabled:hover { + border: 1px solid #DCDFE6; + background-color: #F5F7FA; + color: #C0C4CC; } + .el-transfer__button:first-child { + margin-bottom: 10px; } + .el-transfer__button:nth-child(2) { + margin: 0; } + .el-transfer__button i, .el-transfer__button span { + font-size: 14px; } + .el-transfer__button [class*="el-icon-"] + span { + margin-left: 0; } + +.el-transfer-panel { + border: 1px solid #EBEEF5; + border-radius: 4px; + overflow: hidden; + background: #FFFFFF; + display: inline-block; + vertical-align: middle; + width: 200px; + max-height: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; } + .el-transfer-panel__body { + height: 246px; } + .el-transfer-panel__body.is-with-footer { + padding-bottom: 40px; } + .el-transfer-panel__list { + margin: 0; + padding: 6px 0; + list-style: none; + height: 246px; + overflow: auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-transfer-panel__list.is-filterable { + height: 194px; + padding-top: 0; } + .el-transfer-panel__item { + height: 30px; + line-height: 30px; + padding-left: 15px; + display: block !important; } + .el-transfer-panel__item + .el-transfer-panel__item { + margin-left: 0; } + .el-transfer-panel__item.el-checkbox { + color: #606266; } + .el-transfer-panel__item:hover { + color: #409EFF; } + .el-transfer-panel__item.el-checkbox .el-checkbox__label { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-left: 24px; + line-height: 30px; } + .el-transfer-panel__item .el-checkbox__input { + position: absolute; + top: 8px; } + .el-transfer-panel__filter { + text-align: center; + margin: 15px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: block; + width: auto; } + .el-transfer-panel__filter .el-input__inner { + height: 32px; + width: 100%; + font-size: 12px; + display: inline-block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 16px; + padding-right: 10px; + padding-left: 30px; } + .el-transfer-panel__filter .el-input__icon { + margin-left: 5px; } + .el-transfer-panel__filter .el-icon-circle-close { + cursor: pointer; } + .el-transfer-panel .el-transfer-panel__header { + height: 40px; + line-height: 40px; + background: #F5F7FA; + margin: 0; + padding-left: 15px; + border-bottom: 1px solid #EBEEF5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #000000; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox { + display: block; + line-height: 40px; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label { + font-size: 16px; + color: #303133; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span { + position: absolute; + right: 15px; + color: #909399; + font-size: 12px; + font-weight: normal; } + .el-transfer-panel .el-transfer-panel__footer { + height: 40px; + background: #FFFFFF; + margin: 0; + padding: 0; + border-top: 1px solid #EBEEF5; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 1; } + .el-transfer-panel .el-transfer-panel__footer::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-transfer-panel .el-transfer-panel__footer .el-checkbox { + padding-left: 20px; + color: #606266; } + .el-transfer-panel .el-transfer-panel__empty { + margin: 0; + height: 30px; + line-height: 30px; + padding: 6px 15px 0; + color: #909399; + text-align: center; } + .el-transfer-panel .el-checkbox__label { + padding-left: 8px; } + .el-transfer-panel .el-checkbox__inner { + height: 14px; + width: 14px; + border-radius: 3px; } + .el-transfer-panel .el-checkbox__inner::after { + height: 6px; + width: 3px; + left: 4px; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tree.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tree.css new file mode 100644 index 00000000..e1885014 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/tree.css @@ -0,0 +1,1210 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.fade-in-linear-enter-active, +.fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.fade-in-linear-enter, +.fade-in-linear-leave, +.fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-linear-enter-active, +.el-fade-in-linear-leave-active { + -webkit-transition: opacity 200ms linear; + transition: opacity 200ms linear; } + +.el-fade-in-linear-enter, +.el-fade-in-linear-leave, +.el-fade-in-linear-leave-active { + opacity: 0; } + +.el-fade-in-enter-active, +.el-fade-in-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-fade-in-enter, +.el-fade-in-leave-active { + opacity: 0; } + +.el-zoom-in-center-enter-active, +.el-zoom-in-center-leave-active { + -webkit-transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +.el-zoom-in-center-enter, +.el-zoom-in-center-leave-active { + opacity: 0; + -webkit-transform: scaleX(0); + transform: scaleX(0); } + +.el-zoom-in-top-enter-active, +.el-zoom-in-top-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center top; + transform-origin: center top; } + +.el-zoom-in-top-enter, +.el-zoom-in-top-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-bottom-enter-active, +.el-zoom-in-bottom-leave-active { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; } + +.el-zoom-in-bottom-enter, +.el-zoom-in-bottom-leave-active { + opacity: 0; + -webkit-transform: scaleY(0); + transform: scaleY(0); } + +.el-zoom-in-left-enter-active, +.el-zoom-in-left-leave-active { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.el-zoom-in-left-enter, +.el-zoom-in-left-leave-active { + opacity: 0; + -webkit-transform: scale(0.45, 0.45); + transform: scale(0.45, 0.45); } + +.collapse-transition { + -webkit-transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; + transition: 0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out; } + +.horizontal-collapse-transition { + -webkit-transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; + transition: 0.3s width ease-in-out, 0.3s padding-left ease-in-out, 0.3s padding-right ease-in-out; } + +.el-list-enter-active, +.el-list-leave-active { + -webkit-transition: all 1s; + transition: all 1s; } + +.el-list-enter, .el-list-leave-active { + opacity: 0; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); } + +.el-opacity-transition { + -webkit-transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); + transition: opacity 0.3s cubic-bezier(0.55, 0, 0.1, 1); } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-checkbox { + color: #606266; + font-weight: 500; + font-size: 14px; + position: relative; + cursor: pointer; + display: inline-block; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-right: 30px; } + .el-checkbox.is-bordered { + padding: 9px 20px 9px 10px; + border-radius: 4px; + border: 1px solid #DCDFE6; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: normal; + height: 40px; } + .el-checkbox.is-bordered.is-checked { + border-color: #409EFF; } + .el-checkbox.is-bordered.is-disabled { + border-color: #EBEEF5; + cursor: not-allowed; } + .el-checkbox.is-bordered + .el-checkbox.is-bordered { + margin-left: 10px; } + .el-checkbox.is-bordered.el-checkbox--medium { + padding: 7px 20px 7px 10px; + border-radius: 4px; + height: 36px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { + line-height: 17px; + font-size: 14px; } + .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner { + height: 14px; + width: 14px; } + .el-checkbox.is-bordered.el-checkbox--small { + padding: 5px 15px 5px 10px; + border-radius: 3px; + height: 32px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label { + line-height: 15px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox.is-bordered.el-checkbox--mini { + padding: 3px 15px 3px 10px; + border-radius: 3px; + height: 28px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label { + line-height: 12px; + font-size: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner { + height: 12px; + width: 12px; } + .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after { + height: 6px; + width: 2px; } + .el-checkbox__input { + white-space: nowrap; + cursor: pointer; + outline: none; + display: inline-block; + line-height: 1; + position: relative; + vertical-align: middle; } + .el-checkbox__input.is-disabled .el-checkbox__inner { + background-color: #edf2fc; + border-color: #DCDFE6; + cursor: not-allowed; } + .el-checkbox__input.is-disabled .el-checkbox__inner::after { + cursor: not-allowed; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled .el-checkbox__inner + .el-checkbox__label { + cursor: not-allowed; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner { + background-color: #F2F6FC; + border-color: #DCDFE6; } + .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before { + background-color: #C0C4CC; + border-color: #C0C4CC; } + .el-checkbox__input.is-disabled + span.el-checkbox__label { + color: #C0C4CC; + cursor: not-allowed; } + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-checked .el-checkbox__inner::after { + -webkit-transform: rotate(45deg) scaleY(1); + transform: rotate(45deg) scaleY(1); } + .el-checkbox__input.is-checked + .el-checkbox__label { + color: #409EFF; } + .el-checkbox__input.is-focus { + /*focus时 视觉上区分*/ } + .el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #409EFF; + border-color: #409EFF; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::before { + content: ''; + position: absolute; + display: block; + background-color: #FFFFFF; + height: 2px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + left: 0; + right: 0; + top: 5px; } + .el-checkbox__input.is-indeterminate .el-checkbox__inner::after { + display: none; } + .el-checkbox__inner { + display: inline-block; + position: relative; + border: 1px solid #DCDFE6; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 14px; + height: 14px; + background-color: #FFFFFF; + z-index: 1; + -webkit-transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); + transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46); } + .el-checkbox__inner:hover { + border-color: #409EFF; } + .el-checkbox__inner::after { + -webkit-box-sizing: content-box; + box-sizing: content-box; + content: ""; + border: 1px solid #FFFFFF; + border-left: 0; + border-top: 0; + height: 7px; + left: 4px; + position: absolute; + top: 1px; + -webkit-transform: rotate(45deg) scaleY(0); + transform: rotate(45deg) scaleY(0); + width: 3px; + -webkit-transition: -webkit-transform .15s ease-in .05s; + transition: -webkit-transform .15s ease-in .05s; + transition: transform .15s ease-in .05s; + transition: transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s; + -webkit-transform-origin: center; + transform-origin: center; } + .el-checkbox__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + width: 0; + height: 0; + z-index: -1; } + .el-checkbox__label { + display: inline-block; + padding-left: 10px; + line-height: 19px; + font-size: 14px; } + .el-checkbox:last-of-type { + margin-right: 0; } + +.el-checkbox-button { + position: relative; + display: inline-block; } + .el-checkbox-button__inner { + display: inline-block; + line-height: 1; + font-weight: 500; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background: #FFFFFF; + border: 1px solid #DCDFE6; + border-left: 0; + color: #606266; + -webkit-appearance: none; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + outline: none; + margin: 0; + position: relative; + -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 12px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button__inner.is-round { + padding: 12px 20px; } + .el-checkbox-button__inner:hover { + color: #409EFF; } + .el-checkbox-button__inner [class*="el-icon-"] { + line-height: 0.9; } + .el-checkbox-button__inner [class*="el-icon-"] + span { + margin-left: 5px; } + .el-checkbox-button__original { + opacity: 0; + outline: none; + position: absolute; + margin: 0; + z-index: -1; } + .el-checkbox-button.is-checked .el-checkbox-button__inner { + color: #FFFFFF; + background-color: #409EFF; + border-color: #409EFF; + -webkit-box-shadow: -1px 0 0 0 #8cc5ff; + box-shadow: -1px 0 0 0 #8cc5ff; } + .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { + border-left-color: #409EFF; } + .el-checkbox-button.is-disabled .el-checkbox-button__inner { + color: #C0C4CC; + cursor: not-allowed; + background-image: none; + background-color: #FFFFFF; + border-color: #EBEEF5; + -webkit-box-shadow: none; + box-shadow: none; } + .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner { + border-left-color: #EBEEF5; } + .el-checkbox-button:first-child .el-checkbox-button__inner { + border-left: 1px solid #DCDFE6; + border-radius: 4px 0 0 4px; + -webkit-box-shadow: none !important; + box-shadow: none !important; } + .el-checkbox-button.is-focus .el-checkbox-button__inner { + border-color: #409EFF; } + .el-checkbox-button:last-child .el-checkbox-button__inner { + border-radius: 0 4px 4px 0; } + .el-checkbox-button--medium .el-checkbox-button__inner { + padding: 10px 20px; + font-size: 14px; + border-radius: 0; } + .el-checkbox-button--medium .el-checkbox-button__inner.is-round { + padding: 10px 20px; } + .el-checkbox-button--small .el-checkbox-button__inner { + padding: 9px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--small .el-checkbox-button__inner.is-round { + padding: 9px 15px; } + .el-checkbox-button--mini .el-checkbox-button__inner { + padding: 7px 15px; + font-size: 12px; + border-radius: 0; } + .el-checkbox-button--mini .el-checkbox-button__inner.is-round { + padding: 7px 15px; } + +.el-checkbox-group { + font-size: 0; } + +.el-tree { + position: relative; + cursor: default; + background: #FFFFFF; + color: #606266; } + .el-tree__empty-block { + position: relative; + min-height: 60px; + text-align: center; + width: 100%; + height: 100%; } + .el-tree__empty-text { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + color: #909399; + font-size: 14px; } + .el-tree__drop-indicator { + position: absolute; + left: 0; + right: 0; + height: 1px; + background-color: #409EFF; } + +.el-tree-node { + white-space: nowrap; + outline: none; } + .el-tree-node:focus { + /* focus */ } + .el-tree-node:focus > .el-tree-node__content { + background-color: #F5F7FA; } + .el-tree-node.is-drop-inner > .el-tree-node__content .el-tree-node__label { + background-color: #409EFF; + color: #fff; } + .el-tree-node__content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 26px; + cursor: pointer; } + .el-tree-node__content > .el-tree-node__expand-icon { + padding: 6px; } + .el-tree-node__content > label.el-checkbox { + margin-right: 8px; } + .el-tree-node__content:hover { + background-color: #F5F7FA; } + .el-tree.is-dragging .el-tree-node__content { + cursor: move; } + .el-tree.is-dragging .el-tree-node__content * { + pointer-events: none; } + .el-tree.is-dragging.is-drop-not-allow .el-tree-node__content { + cursor: not-allowed; } + .el-tree-node__expand-icon { + cursor: pointer; + color: #C0C4CC; + font-size: 12px; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; } + .el-tree-node__expand-icon.expanded { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .el-tree-node__expand-icon.is-leaf { + color: transparent; + cursor: default; } + .el-tree-node__label { + font-size: 14px; } + .el-tree-node__loading-icon { + margin-right: 8px; + font-size: 14px; + color: #C0C4CC; } + .el-tree-node > .el-tree-node__children { + overflow: hidden; + background-color: transparent; } + .el-tree-node.is-expanded > .el-tree-node__children { + display: block; } + +.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content { + background-color: #f0f7ff; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/upload.css b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/upload.css new file mode 100644 index 00000000..a0e29ae0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/assets/theme/upload.css @@ -0,0 +1,1045 @@ +@charset "UTF-8"; +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* BEM support Func + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +/* Break-points + -------------------------- */ +/* Scrollbar + -------------------------- */ +/* Placeholder + -------------------------- */ +/* BEM + -------------------------- */ +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-progress { + position: relative; + line-height: 1; } + .el-progress__text { + font-size: 14px; + color: #606266; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + line-height: 1; } + .el-progress__text i { + vertical-align: middle; + display: block; } + .el-progress--circle, .el-progress--dashboard { + display: inline-block; } + .el-progress--circle .el-progress__text, .el-progress--dashboard .el-progress__text { + position: absolute; + top: 50%; + left: 0; + width: 100%; + text-align: center; + margin: 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); } + .el-progress--circle .el-progress__text i, .el-progress--dashboard .el-progress__text i { + vertical-align: middle; + display: inline-block; } + .el-progress--without-text .el-progress__text { + display: none; } + .el-progress--without-text .el-progress-bar { + padding-right: 0; + margin-right: 0; + display: block; } + .el-progress--text-inside .el-progress-bar { + padding-right: 0; + margin-right: 0; } + .el-progress.is-success .el-progress-bar__inner { + background-color: #67C23A; } + .el-progress.is-success .el-progress__text { + color: #67C23A; } + .el-progress.is-warning .el-progress-bar__inner { + background-color: #E6A23C; } + .el-progress.is-warning .el-progress__text { + color: #E6A23C; } + .el-progress.is-exception .el-progress-bar__inner { + background-color: #F56C6C; } + .el-progress.is-exception .el-progress__text { + color: #F56C6C; } + +.el-progress-bar { + padding-right: 50px; + display: inline-block; + vertical-align: middle; + width: 100%; + margin-right: -55px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .el-progress-bar__outer { + height: 6px; + border-radius: 100px; + background-color: #EBEEF5; + overflow: hidden; + position: relative; + vertical-align: middle; } + .el-progress-bar__inner { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: #409EFF; + text-align: right; + border-radius: 100px; + line-height: 1; + white-space: nowrap; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; } + .el-progress-bar__inner::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-progress-bar__innerText { + display: inline-block; + vertical-align: middle; + color: #FFFFFF; + font-size: 12px; + margin: 0 5px; } + +@-webkit-keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +@keyframes progress { + 0% { + background-position: 0 0; } + 100% { + background-position: 32px 0; } } + +/* Element Chalk Variables */ +/* Transition +-------------------------- */ +/* Color +-------------------------- */ +/* 53a8ff */ +/* 66b1ff */ +/* 79bbff */ +/* 8cc5ff */ +/* a0cfff */ +/* b3d8ff */ +/* c6e2ff */ +/* d9ecff */ +/* ecf5ff */ +/* Link +-------------------------- */ +/* Border +-------------------------- */ +/* Fill +-------------------------- */ +/* Typography +-------------------------- */ +/* Size +-------------------------- */ +/* z-index +-------------------------- */ +/* Disable base +-------------------------- */ +/* Icon +-------------------------- */ +/* Checkbox +-------------------------- */ +/* Radio +-------------------------- */ +/* Select +-------------------------- */ +/* Alert +-------------------------- */ +/* MessageBox +-------------------------- */ +/* Message +-------------------------- */ +/* Notification +-------------------------- */ +/* Input +-------------------------- */ +/* Cascader +-------------------------- */ +/* Group +-------------------------- */ +/* Tab +-------------------------- */ +/* Button +-------------------------- */ +/* cascader +-------------------------- */ +/* Switch +-------------------------- */ +/* Dialog +-------------------------- */ +/* Table +-------------------------- */ +/* Pagination +-------------------------- */ +/* Popup +-------------------------- */ +/* Popover +-------------------------- */ +/* Tooltip +-------------------------- */ +/* Tag +-------------------------- */ +/* Tree +-------------------------- */ +/* Dropdown +-------------------------- */ +/* Badge +-------------------------- */ +/* Card +--------------------------*/ +/* Slider +--------------------------*/ +/* Steps +--------------------------*/ +/* Menu +--------------------------*/ +/* Rate +--------------------------*/ +/* DatePicker +--------------------------*/ +/* Loading +--------------------------*/ +/* Scrollbar +--------------------------*/ +/* Carousel +--------------------------*/ +/* Collapse +--------------------------*/ +/* Transfer +--------------------------*/ +/* Header + --------------------------*/ +/* Footer +--------------------------*/ +/* Main +--------------------------*/ +/* Timeline +--------------------------*/ +/* Backtop +--------------------------*/ +/* Link +--------------------------*/ +/* Calendar +--------------------------*/ +/* Form +-------------------------- */ +/* Avatar +--------------------------*/ +/* Break-point +--------------------------*/ +.el-upload { + display: inline-block; + text-align: center; + cursor: pointer; + outline: none; + /* 照片墙模式 */ } + .el-upload__input { + display: none; } + .el-upload__tip { + font-size: 12px; + color: #606266; + margin-top: 7px; } + .el-upload iframe { + position: absolute; + z-index: -1; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); } + .el-upload--picture-card { + background-color: #fbfdff; + border: 1px dashed #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + cursor: pointer; + line-height: 146px; + vertical-align: top; } + .el-upload--picture-card i { + font-size: 28px; + color: #8c939d; } + .el-upload--picture-card:hover { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus { + border-color: #409EFF; + color: #409EFF; } + .el-upload:focus .el-upload-dragger { + border-color: #409EFF; } + +.el-upload-dragger { + background-color: #fff; + border: 1px dashed #d9d9d9; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 360px; + height: 180px; + text-align: center; + cursor: pointer; + position: relative; + overflow: hidden; } + .el-upload-dragger .el-icon-upload { + font-size: 67px; + color: #C0C4CC; + margin: 40px 0 16px; + line-height: 50px; } + .el-upload-dragger + .el-upload__tip { + text-align: center; } + .el-upload-dragger ~ .el-upload__files { + border-top: 1px solid #DCDFE6; + margin-top: 7px; + padding-top: 5px; } + .el-upload-dragger .el-upload__text { + color: #606266; + font-size: 14px; + text-align: center; } + .el-upload-dragger .el-upload__text em { + color: #409EFF; + font-style: normal; } + .el-upload-dragger:hover { + border-color: #409EFF; } + .el-upload-dragger.is-dragover { + background-color: rgba(32, 159, 255, 0.06); + border: 2px dashed #409EFF; } + +.el-upload-list { + margin: 0; + padding: 0; + list-style: none; } + .el-upload-list__item { + -webkit-transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); + font-size: 14px; + color: #606266; + line-height: 1.8; + margin-top: 5px; + position: relative; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + width: 100%; } + .el-upload-list__item .el-progress { + position: absolute; + top: 20px; + width: 100%; } + .el-upload-list__item .el-progress__text { + position: absolute; + right: 0; + top: -13px; } + .el-upload-list__item .el-progress-bar { + margin-right: 0; + padding-right: 0; } + .el-upload-list__item:first-child { + margin-top: 10px; } + .el-upload-list__item .el-icon-upload-success { + color: #67C23A; } + .el-upload-list__item .el-icon-close { + display: none; + position: absolute; + top: 5px; + right: 5px; + cursor: pointer; + opacity: .75; + color: #606266; } + .el-upload-list__item .el-icon-close:hover { + opacity: 1; } + .el-upload-list__item .el-icon-close-tip { + display: none; + position: absolute; + top: 5px; + right: 5px; + font-size: 12px; + cursor: pointer; + opacity: 1; + color: #409EFF; } + .el-upload-list__item:hover { + background-color: #F5F7FA; } + .el-upload-list__item:hover .el-icon-close { + display: inline-block; } + .el-upload-list__item:hover .el-progress__text { + display: none; } + .el-upload-list__item.is-success .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item.is-success .el-upload-list__item-name:hover, .el-upload-list__item.is-success .el-upload-list__item-name:focus { + color: #409EFF; + cursor: pointer; } + .el-upload-list__item.is-success:focus:not(:hover) { + /* 键盘focus */ } + .el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip { + display: inline-block; } + .el-upload-list__item.is-success:not(.focusing):focus, .el-upload-list__item.is-success:active { + /* click时 */ + outline-width: 0; } + .el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip, .el-upload-list__item.is-success:active .el-icon-close-tip { + display: none; } + .el-upload-list__item.is-success:hover .el-upload-list__item-status-label, .el-upload-list__item.is-success:focus .el-upload-list__item-status-label { + display: none; } + .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label { + display: block; } + .el-upload-list__item-name { + color: #606266; + display: block; + margin-right: 40px; + overflow: hidden; + padding-left: 4px; + text-overflow: ellipsis; + -webkit-transition: color .3s; + transition: color .3s; + white-space: nowrap; } + .el-upload-list__item-name [class^="el-icon"] { + height: 100%; + margin-right: 7px; + color: #909399; + line-height: inherit; } + .el-upload-list__item-status-label { + position: absolute; + right: 5px; + top: 0; + line-height: inherit; + display: none; } + .el-upload-list__item-delete { + position: absolute; + right: 10px; + top: 0; + font-size: 12px; + color: #606266; + display: none; } + .el-upload-list__item-delete:hover { + color: #409EFF; } + .el-upload-list--picture-card { + margin: 0; + display: inline; + vertical-align: top; } + .el-upload-list--picture-card .el-upload-list__item { + overflow: hidden; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 148px; + height: 148px; + margin: 0 8px 8px 0; + display: inline-block; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-check, + .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture-card .el-upload-list__item .el-icon-close { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label { + display: none; } + .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture-card .el-upload-list__item-name { + display: none; } + .el-upload-list--picture-card .el-upload-list__item-thumbnail { + width: 100%; + height: 100%; } + .el-upload-list--picture-card .el-upload-list__item-status-label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-list--picture-card .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture-card .el-upload-list__item-actions { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + cursor: default; + text-align: center; + color: #fff; + opacity: 0; + font-size: 20px; + background-color: rgba(0, 0, 0, 0.5); + -webkit-transition: opacity .3s; + transition: opacity .3s; } + .el-upload-list--picture-card .el-upload-list__item-actions::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-list--picture-card .el-upload-list__item-actions span { + display: none; + cursor: pointer; } + .el-upload-list--picture-card .el-upload-list__item-actions span + span { + margin-left: 15px; } + .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete { + position: static; + font-size: inherit; + color: inherit; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover { + opacity: 1; } + .el-upload-list--picture-card .el-upload-list__item-actions:hover span { + display: inline-block; } + .el-upload-list--picture-card .el-progress { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + bottom: auto; + width: 126px; } + .el-upload-list--picture-card .el-progress .el-progress__text { + top: 50%; } + .el-upload-list--picture .el-upload-list__item { + overflow: hidden; + z-index: 0; + background-color: #fff; + border: 1px solid #c0ccda; + border-radius: 6px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; + padding: 10px 10px 10px 90px; + height: 92px; } + .el-upload-list--picture .el-upload-list__item .el-icon-check, + .el-upload-list--picture .el-upload-list__item .el-icon-circle-check { + color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label { + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + top: -2px; + right: -12px; } + .el-upload-list--picture .el-upload-list__item:hover .el-progress__text { + display: block; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name { + line-height: 70px; + margin-top: 0; } + .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i { + display: none; } + .el-upload-list--picture .el-upload-list__item-thumbnail { + vertical-align: middle; + display: inline-block; + width: 70px; + height: 70px; + float: left; + position: relative; + z-index: 1; + margin-left: -80px; + background-color: #FFFFFF; } + .el-upload-list--picture .el-upload-list__item-name { + display: block; + margin-top: 20px; } + .el-upload-list--picture .el-upload-list__item-name i { + font-size: 70px; + line-height: 1; + position: absolute; + left: 9px; + top: 10px; } + .el-upload-list--picture .el-upload-list__item-status-label { + position: absolute; + right: -17px; + top: -7px; + width: 46px; + height: 26px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; } + .el-upload-list--picture .el-upload-list__item-status-label i { + font-size: 12px; + margin-top: 12px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .el-upload-list--picture .el-progress { + position: relative; + top: -7px; } + +.el-upload-cover { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 10; + cursor: default; } + .el-upload-cover::after { + display: inline-block; + content: ""; + height: 100%; + vertical-align: middle; } + .el-upload-cover img { + display: block; + width: 100%; + height: 100%; } + .el-upload-cover__label { + position: absolute; + right: -15px; + top: -6px; + width: 40px; + height: 24px; + background: #13ce66; + text-align: center; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); } + .el-upload-cover__label i { + font-size: 12px; + margin-top: 11px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + color: #fff; } + .el-upload-cover__progress { + display: inline-block; + vertical-align: middle; + position: static; + width: 243px; } + .el-upload-cover__progress + .el-upload__inner { + opacity: 0; } + .el-upload-cover__content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + .el-upload-cover__interact { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.72); + text-align: center; } + .el-upload-cover__interact .btn { + display: inline-block; + color: #FFFFFF; + font-size: 14px; + cursor: pointer; + vertical-align: middle; + -webkit-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 300ms cubic-bezier(0.23, 1, 0.32, 1); + margin-top: 60px; } + .el-upload-cover__interact .btn i { + margin-top: 0; } + .el-upload-cover__interact .btn span { + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear; } + .el-upload-cover__interact .btn:not(:first-child) { + margin-left: 35px; } + .el-upload-cover__interact .btn:hover { + -webkit-transform: translateY(-13px); + transform: translateY(-13px); } + .el-upload-cover__interact .btn:hover span { + opacity: 1; } + .el-upload-cover__interact .btn i { + color: #FFFFFF; + display: block; + font-size: 24px; + line-height: inherit; + margin: 0 auto 5px; } + .el-upload-cover__title { + position: absolute; + bottom: 0; + left: 0; + background-color: #FFFFFF; + height: 36px; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: normal; + text-align: left; + padding: 0 10px; + margin: 0; + line-height: 36px; + font-size: 14px; + color: #303133; } + .el-upload-cover + .el-upload__inner { + opacity: 0; + position: relative; + z-index: 1; } diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/DateRange/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/DateRange/index.vue new file mode 100644 index 00000000..f4dd2c0b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/DateRange/index.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Dialog/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Dialog/index.js new file mode 100644 index 00000000..5118d7a6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Dialog/index.js @@ -0,0 +1,77 @@ +import $ from 'jquery'; +import Vue from 'vue'; +import router from '@/router'; +import store from '@/store'; + +window.jQuery = $; +const layer = require('layui-layer'); + +class Dialog { + /** + * 关闭弹窗 + * @param {*} index 要关闭的弹窗的index + */ + static close (index) { + layer.close(index); + } + /** + * 关闭所有弹窗 + */ + static closeAll () { + layer.closeAll(); + } + /** + * 打开弹窗 + * @param {*} title 弹窗标题 + * @param {*} component 弹窗内容的组件 + * @param {*} options 弹窗设置(详情请见layui官网) + * @param {*} params 弹窗组件参数 + */ + static show (title, component, options, params) { + return new Promise((resolve, reject) => { + let layerOptions = { + title: title, + type: 1, + skin: 'layer-dialog', + resize: false, + offset: 'auto', + zIndex: 1000, + index: 0, + contentDom: null + }; + + layerOptions = {...layerOptions, ...options}; + layerOptions.end = () => { + if (layerOptions.contentDom) document.body.removeChild(layerOptions.contentDom); + } + + let observer = { + cancel: function (isSuccess = false, data = undefined) { + layer.close(this.index); + if (isSuccess) { + resolve(data); + } else { + reject(); + } + }, + index: -1 + } + layerOptions.cancel = () => { + reject(); + } + let dom = document.createElement('div'); + document.body.appendChild(dom); + let Content = Vue.extend(component); + let vueObj = new Content({router: router, store: store, propsData: params}); + vueObj.observer = observer; + vueObj.$mount(dom); + layerOptions.contentDom = vueObj.$el; + layerOptions.content = $(layerOptions.contentDom); + observer.index = layer.open(layerOptions); + }); + } +} + +Vue.prototype.$dialog = Dialog; + +export default Dialog; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/FilterBox/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/FilterBox/index.vue new file mode 100644 index 00000000..d7350358 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/FilterBox/index.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Hamburger/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Hamburger/index.vue new file mode 100644 index 00000000..6df80299 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/IconSelect/icon.json b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/IconSelect/icon.json new file mode 100644 index 00000000..13f2f58b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/IconSelect/icon.json @@ -0,0 +1,280 @@ +[ + "el-icon-delete-solid", + "el-icon-delete", + "el-icon-s-tools", + "el-icon-setting", + "el-icon-user-solid", + "el-icon-user", + "el-icon-phone", + "el-icon-phone-outline", + "el-icon-more", + "el-icon-more-outline", + "el-icon-star-on", + "el-icon-star-off", + "el-icon-s-goods", + "el-icon-goods", + "el-icon-warning", + "el-icon-warning-outline", + "el-icon-question", + "el-icon-info", + "el-icon-remove", + "el-icon-circle-plus", + "el-icon-success", + "el-icon-error", + "el-icon-zoom-in", + "el-icon-zoom-out", + "el-icon-remove-outline", + "el-icon-circle-plus-outline", + "el-icon-circle-check", + "el-icon-circle-close", + "el-icon-s-help", + "el-icon-help", + "el-icon-minus", + "el-icon-plus", + "el-icon-check", + "el-icon-close", + "el-icon-picture", + "el-icon-picture-outline", + "el-icon-picture-outline-round", + "el-icon-upload", + "el-icon-upload2", + "el-icon-download", + "el-icon-camera-solid", + "el-icon-camera", + "el-icon-video-camera-solid", + "el-icon-video-camera", + "el-icon-message-solid", + "el-icon-bell", + "el-icon-s-cooperation", + "el-icon-s-order", + "el-icon-s-platform", + "el-icon-s-fold", + "el-icon-s-unfold", + "el-icon-s-operation", + "el-icon-s-promotion", + "el-icon-s-home", + "el-icon-s-release", + "el-icon-s-ticket", + "el-icon-s-management", + "el-icon-s-open", + "el-icon-s-shop", + "el-icon-s-marketing", + "el-icon-s-flag", + "el-icon-s-comment", + "el-icon-s-finance", + "el-icon-s-claim", + "el-icon-s-custom", + "el-icon-s-opportunity", + "el-icon-s-data", + "el-icon-s-check", + "el-icon-s-grid", + "el-icon-menu", + "el-icon-share", + "el-icon-d-caret", + "el-icon-caret-left", + "el-icon-caret-right", + "el-icon-caret-bottom", + "el-icon-caret-top", + "el-icon-bottom-left", + "el-icon-bottom-right", + "el-icon-back", + "el-icon-right", + "el-icon-bottom", + "el-icon-top", + "el-icon-top-left", + "el-icon-top-right", + "el-icon-arrow-left", + "el-icon-arrow-right", + "el-icon-arrow-down", + "el-icon-arrow-up", + "el-icon-d-arrow-left", + "el-icon-d-arrow-right", + "el-icon-video-pause", + "el-icon-video-play", + "el-icon-refresh", + "el-icon-refresh-right", + "el-icon-refresh-left", + "el-icon-finished", + "el-icon-sort", + "el-icon-sort-up", + "el-icon-sort-down", + "el-icon-rank", + "el-icon-loading", + "el-icon-view", + "el-icon-c-scale-to-original", + "el-icon-date", + "el-icon-edit", + "el-icon-edit-outline", + "el-icon-folder", + "el-icon-folder-opened", + "el-icon-folder-add", + "el-icon-folder-remove", + "el-icon-folder-delete", + "el-icon-folder-checked", + "el-icon-tickets", + "el-icon-document-remove", + "el-icon-document-delete", + "el-icon-document-copy", + "el-icon-document-checked", + "el-icon-document", + "el-icon-document-add", + "el-icon-printer", + "el-icon-paperclip", + "el-icon-takeaway-box", + "el-icon-search", + "el-icon-monitor", + "el-icon-attract", + "el-icon-mobile", + "el-icon-scissors", + "el-icon-umbrella", + "el-icon-headset", + "el-icon-brush", + "el-icon-mouse", + "el-icon-coordinate", + "el-icon-magic-stick", + "el-icon-reading", + "el-icon-data-line", + "el-icon-data-board", + "el-icon-pie-chart", + "el-icon-data-analysis", + "el-icon-collection-tag", + "el-icon-film", + "el-icon-suitcase", + "el-icon-suitcase-1", + "el-icon-receiving", + "el-icon-collection", + "el-icon-files", + "el-icon-notebook-1", + "el-icon-notebook-2", + "el-icon-toilet-paper", + "el-icon-office-building", + "el-icon-school", + "el-icon-table-lamp", + "el-icon-house", + "el-icon-no-smoking", + "el-icon-smoking", + "el-icon-shopping-cart-full", + "el-icon-shopping-cart-1", + "el-icon-shopping-cart-2", + "el-icon-shopping-bag-1", + "el-icon-shopping-bag-2", + "el-icon-sold-out", + "el-icon-sell", + "el-icon-present", + "el-icon-box", + "el-icon-bank-card", + "el-icon-money", + "el-icon-coin", + "el-icon-wallet", + "el-icon-discount", + "el-icon-price-tag", + "el-icon-news", + "el-icon-guide", + "el-icon-male", + "el-icon-female", + "el-icon-thumb", + "el-icon-cpu", + "el-icon-link", + "el-icon-connection", + "el-icon-open", + "el-icon-turn-off", + "el-icon-set-up", + "el-icon-chat-round", + "el-icon-chat-line-round", + "el-icon-chat-square", + "el-icon-chat-dot-round", + "el-icon-chat-dot-square", + "el-icon-chat-line-square", + "el-icon-message", + "el-icon-postcard", + "el-icon-position", + "el-icon-turn-off-microphone", + "el-icon-microphone", + "el-icon-close-notification", + "el-icon-bangzhu", + "el-icon-time", + "el-icon-odometer", + "el-icon-crop", + "el-icon-aim", + "el-icon-switch-button", + "el-icon-full-screen", + "el-icon-copy-document", + "el-icon-mic", + "el-icon-stopwatch", + "el-icon-medal-1", + "el-icon-medal", + "el-icon-trophy", + "el-icon-trophy-1", + "el-icon-first-aid-kit", + "el-icon-discover", + "el-icon-place", + "el-icon-location", + "el-icon-location-outline", + "el-icon-location-information", + "el-icon-add-location", + "el-icon-delete-location", + "el-icon-map-location", + "el-icon-alarm-clock", + "el-icon-timer", + "el-icon-watch-1", + "el-icon-watch", + "el-icon-lock", + "el-icon-unlock", + "el-icon-key", + "el-icon-service", + "el-icon-mobile-phone", + "el-icon-bicycle", + "el-icon-truck", + "el-icon-ship", + "el-icon-basketball", + "el-icon-football", + "el-icon-soccer", + "el-icon-baseball", + "el-icon-wind-power", + "el-icon-light-rain", + "el-icon-lightning", + "el-icon-heavy-rain", + "el-icon-sunrise", + "el-icon-sunrise-1", + "el-icon-sunset", + "el-icon-sunny", + "el-icon-cloudy", + "el-icon-partly-cloudy", + "el-icon-cloudy-and-sunny", + "el-icon-moon", + "el-icon-moon-night", + "el-icon-dish", + "el-icon-dish-1", + "el-icon-food", + "el-icon-chicken", + "el-icon-fork-spoon", + "el-icon-knife-fork", + "el-icon-burger", + "el-icon-tableware", + "el-icon-sugar", + "el-icon-dessert", + "el-icon-ice-cream", + "el-icon-hot-water", + "el-icon-water-cup", + "el-icon-coffee-cup", + "el-icon-cold-drink", + "el-icon-goblet", + "el-icon-goblet-full", + "el-icon-goblet-square", + "el-icon-goblet-square-full", + "el-icon-refrigerator", + "el-icon-grape", + "el-icon-watermelon", + "el-icon-cherry", + "el-icon-apple", + "el-icon-pear", + "el-icon-orange", + "el-icon-coffee", + "el-icon-ice-tea", + "el-icon-ice-drink", + "el-icon-milk-tea", + "el-icon-potato-strips", + "el-icon-lollipop", + "el-icon-ice-cream-square", + "el-icon-ice-cream-round" +] \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/IconSelect/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/IconSelect/index.vue new file mode 100644 index 00000000..06be852b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/IconSelect/index.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/InputNumberRange/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/InputNumberRange/index.vue new file mode 100644 index 00000000..94f59ba4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/InputNumberRange/index.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Progress/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Progress/index.vue new file mode 100644 index 00000000..2225e489 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/Progress/index.vue @@ -0,0 +1,44 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/RichEditor/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/RichEditor/index.vue new file mode 100644 index 00000000..fea000a9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/RichEditor/index.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/TableProgressColumn/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/TableProgressColumn/index.vue new file mode 100644 index 00000000..7e82a4eb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/TableProgressColumn/index.vue @@ -0,0 +1,119 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/TreeSelect/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/TreeSelect/index.vue new file mode 100644 index 00000000..d10b1123 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/components/TreeSelect/index.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/development.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/development.js new file mode 100644 index 00000000..883e8c0e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/development.js @@ -0,0 +1,4 @@ +module.exports = { + baseUrl: 'http://localhost:8082/', + projectName: '橙单代码生成平台' +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/index.js new file mode 100644 index 00000000..35003bc1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/index.js @@ -0,0 +1,18 @@ +const projectConfig = require('../config/' + process.env.NODE_ENV); + +export const globalConfig = { + httpOption: { + // 调用的时候是否显示蒙版 + showMask: true, + // 是否显示公共的错误提示 + showError: true, + // 是否开启节流功能,同一个url不能频繁重复调用 + throttleFlag: false, + // 节流间隔 + throttleTimeout: 50 + }, + axiosOption: { + } +}; + +export default projectConfig; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/production.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/production.js new file mode 100644 index 00000000..1f34bb53 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/config/production.js @@ -0,0 +1,4 @@ +module.exports = { + baseUrl: 'http://localhost:8082/', + projectName: '橙单项目' +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/directive/sortable.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/directive/sortable.js new file mode 100644 index 00000000..410de2d9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/directive/sortable.js @@ -0,0 +1,14 @@ +import Vue from 'vue' +import { SortableData } from './sortableData'; + +/** + * 拖拽排序指令 + */ +Vue.directive('sortable', { + inserted: function (el, binding, vnode) { + let sortableData = binding.value; + if (sortableData == null || !(sortableData instanceof SortableData)) return; + + sortableData.init(vnode.elm); + } +}); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/directive/sortableData.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/directive/sortableData.js new file mode 100644 index 00000000..4993e08a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/directive/sortableData.js @@ -0,0 +1,60 @@ +import sortable from 'sortablejs' +/** + * 拖拽排序对象 + * expample + * + */ +export class SortableData { + constructor (data, group) { + this.list = data; + this.group = group; + this.ghostClass = 'sortable-ghost'; + this.sortable = null; + this.disabled = false; + }; + + setData (list) { + this.list = list; + } + + getElement (el) { + return el; + }; + + onEnd (oldIndex, newIndex) { + if (oldIndex === newIndex || this.list == null) return; + let targetRow = this.list.splice(oldIndex, 1)[0] + this.list.splice(newIndex, 0, targetRow); + }; + + init (el) { + var _this = this; + + var _option = {}; + if (this.ghostClass != null) _option.ghostClass = this.ghostClass; + if (this.group != null) _option.group = this.group; + if (this.disabled != null) _option.disabled = this.disabled; + // 列表中能拖动的dom的选择器(例如:.drag-item) + if (this.draggable != null) _option.draggable = this.draggable; + // 列表中拖动项,拖动把柄的选择器,只有点击这个选择出来的dom才可以开始拖动(例如:.drag-handle) + if (this.handle != null) _option.handle = this.handle; + _option.setData = function (dataTransfer) { + dataTransfer.setData('Text', ''); + }; + _option.onEnd = function (evt) { + _this.onEnd(evt.oldIndex, evt.newIndex); + }; + + this.sortable = sortable.create(_this.getElement(el), _option); + }; + + release () { + if (this.sortable != null) this.sortable.destroy(); + this.sortable = null; + } +}; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/index.js new file mode 100644 index 00000000..3dba6663 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/index.js @@ -0,0 +1,203 @@ +import Vue from 'vue'; +import { Loading, Message } from 'element-ui'; +import request from './request'; +import requestUrl from './requestUrl'; +import { globalConfig } from '@/core/config'; + +/** + * 遮罩管理,多次调用支持引用计数 + */ +class LoadingManager { + constructor (options) { + this.options = options; + this.refCount = 0; + this.loading = undefined; + } + + showMask () { + this.loading = Loading.service(this.options); + this.refCount++; + } + + hideMask () { + if (this.refCount <= 1 && this.loading != null) { + this.loading.close(); + this.loading = null; + } + this.refCount--; + this.refCount = Math.max(0, this.refCount); + } +} + +const loadingManager = new LoadingManager({ + fullscreen: true, + background: 'rgba(0, 0, 0, 0.1)' +}); + +/** + * post请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {Object} options axios设置项 + * @returns {Promise} + */ +const fetchPost = function (url, params, options) { + if (options == null) return {}; + let tempOptions = { + ...options, + method: 'post', + url: requestUrl(url), + data: params + }; + + return request(tempOptions); +}; +/** + * get请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {Object} options axios设置项 + * @returns {Promise} + */ +const fetchGet = function (url, params, options) { + if (options == null) return {}; + let tempOptions = { + ...options, + method: 'get', + url: requestUrl(url), + params + }; + return request(tempOptions); +}; +/** + * 下载请求 + * @param {String} url 请求的url + * @param {Object} params 请求参数 + * @param {String} fileName 下载后保存的文件名 + * @returns {Promise} + */ +const fetchDownload = function (url, params, fileName) { + return new Promise((resolve, reject) => { + request({ + url: requestUrl(url), + method: 'post', + data: params, + responseType: 'blob', + transformResponse: function (data) { + return (data instanceof Blob && data.size > 0) ? data : undefined; + } + }).then(res => { + if (res.data == null) { + reject(new Error('下载文件失败')); + } else { + let blobData = new Blob([res.data], { type: 'application/octet-stream' }); + let blobUrl = window.URL.createObjectURL(blobData); + let linkDom = document.createElement('a'); + linkDom.style.display = 'none'; + linkDom.href = blobUrl; + linkDom.setAttribute('download', fileName); + if (typeof linkDom.download === 'undefined') { + linkDom.setAttribute('target', '_blank'); + } + document.body.appendChild(linkDom); + linkDom.click(); + document.body.removeChild(linkDom); + window.URL.revokeObjectURL(blobData); + resolve(); + } + }).catch(e => { + if (e instanceof Blob) { + let reader = new FileReader(); + reader.onload = function () { + let jsonObj = JSON.parse(reader.result); + reject((jsonObj || {}).errorMessage || '下载文件失败'); + } + reader.readAsText(e); + } else { + reject(e); + } + }); + }); +} + +// url调用节流Set +const ajaxThrottleSet = new Set(); +/** + * 数据请求 + * @param {String} url 请求的url + * @param {String} type 请求类型 (get,post) + * @param {Object} params 请求参数 + * @param {Object} axiosOption axios设置 + * @param {Object} options 显示设置 + */ +const doUrl = function (url, type, params, axiosOption, options) { + let finalOption = { + ...globalConfig.httpOption, + ...options + }; + let { showMask, showError, throttleFlag, throttleTimeout } = finalOption; + let finalAxiosOption = { + ...globalConfig.axiosOption, + ...axiosOption + } + if (type == null || type === '') type = 'post'; + if (ajaxThrottleSet.has(url) && throttleFlag) { + return Promise.resolve(); + } else { + if (throttleFlag) { + ajaxThrottleSet.add(url); + setTimeout(() => { + ajaxThrottleSet.delete(url); + }, throttleTimeout || 50); + } + return new Promise((resolve, reject) => { + if (showMask) loadingManager.showMask(); + let ajaxCall = null; + if (type.toLowerCase() === 'get') { + ajaxCall = fetchGet(url, params, finalAxiosOption); + } else if (type.toLowerCase() === 'post') { + ajaxCall = fetchPost(url, params, finalAxiosOption); + } + + if (ajaxCall != null) { + ajaxCall.then(res => { + if (showMask) loadingManager.hideMask(); + if (res.data && res.data.success) { + resolve(res.data); + } else { + if (showError) { + Message.error({ + showClose: true, + message: res.data.errorMessage ? res.data.errorMessage : '数据请求失败' + }); + } + reject(res.data); + } + }).catch(e => { + if (showMask) loadingManager.hideMask(); + if (showError) { + Message.error({ + showClose: true, + message: e.errorMessage ? e.errorMessage : '网络请求错误' + }); + } + reject(e); + }); + } else { + if (showMask) loadingManager.hideMask(); + reject(new Error('错误的请求类型 - ' + type)); + } + }); + } +}; + +Vue.prototype.download = fetchDownload; +Vue.prototype.doUrl = doUrl; +Vue.prototype.loadingManager = loadingManager; + +export default { + doUrl, + fetchPost, + fetchGet, + fetchDownload +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/request.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/request.js new file mode 100644 index 00000000..13210938 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/request.js @@ -0,0 +1,75 @@ +import axios from 'axios'; +import router from '@/router'; +import dialog from '@/components/Dialog'; +import JSONbig from 'json-bigint'; +import { getToken, setToken } from '@/utils'; + +// 创建axios实例 +const service = axios.create({ + timeout: 1000 * 30, + withCredentials: true, + headers: { + // 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' + 'Content-Type': 'application/json; charset=utf-8', + 'deviceType': '4' + }, + transformResponse: [ + function (data) { + if (typeof data === 'string') { + const JSONbigString = new JSONbig({storeAsString: true}); + return JSONbigString.parse(data); + } else { + return data; + } + } + ] +}) + +// request拦截器 +service.interceptors.request.use( + config => { + let token = getToken(); + let menuIdJsonStr = window.sessionStorage.getItem('currentMenuId'); + let currentMenuId; + if (menuIdJsonStr != null) { + currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data; + } + if (token != null) config.headers['Authorization'] = token; + if (currentMenuId != null) config.headers['MenuId'] = currentMenuId; + return config + }, error => { + return Promise.reject(error) + } +); + +// response拦截器 +service.interceptors.response.use( + response => { + if (response.data && response.data.errorCode === 'UNAUTHORIZED_LOGIN') { // 401, token失效 + dialog.closeAll(); + router.push({ name: 'login' }) + } else { + if (response.headers['refreshedtoken'] != null) { + setToken(response.headers['refreshedtoken']); + } + } + return response + }, error => { + let response = error.response; + + if (response && response.data) { + if (response.data.errorCode === 'UNAUTHORIZED_LOGIN') { + dialog.closeAll(); + router.push({ name: 'login' }); + } + + return Promise.reject(response.data); + } else { + return Promise.reject(new Error({ + errorMessage: '数据获取失败,请稍后再试' + })); + } + } +); + +export default service diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/requestUrl.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/requestUrl.js new file mode 100644 index 00000000..96a921e1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/http/requestUrl.js @@ -0,0 +1,27 @@ +import projectConfig from '@/core/config'; +import { objectToQueryString } from '@/utils'; +console.log(process.env.NODE_ENV, projectConfig); + +/** + * 请求地址统一处理/组装 + * @param actionName action方法名称 + */ +export default function (actionName) { + if (actionName != null && actionName !== '') { + if (actionName.substr(0, 1) === '/') actionName = actionName.substr(1); + } + return projectConfig.baseUrl + actionName; +} + +export function buildGetUrl (actionName, params) { + let queryString = objectToQueryString(params); + if (actionName != null && actionName !== '') { + if (actionName.substr(0, 1) === '/') actionName = actionName.substr(1); + } + + return projectConfig.baseUrl + actionName + (queryString == null ? '' : ('?' + queryString)); +} + +export { + projectConfig +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/mixins/global.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/mixins/global.js new file mode 100644 index 00000000..7c78fa4b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/mixins/global.js @@ -0,0 +1,114 @@ +import Vue from 'vue'; +import Request from '@/core/http/request.js'; +import { mapMutations, mapGetters } from 'vuex'; + +// 全局mixin对象 +const globalMixin = { + data () { + return { + isHttpLoading: false + } + }, + methods: { + /** + * 是否显示遮罩 + * @param {Boolean} isShow 是否显示 + */ + showMask (isShow) { + isShow ? this.loadingManager.showMask() : this.loadingManager.hideMask(); + }, + /** + * 判读用户是否有权限 + * @param {String} permCode 权限字 + */ + checkPermCodeExist (permCode) { + if ((this.getUserInfo || {}).permCodeSet != null) { + return this.getUserInfo.permCodeSet.has(permCode); + } else { + return this.getUserInfo.isAdmin; + } + }, + /** + * 将输入的值转换成指定的类型 + * @param {Any} value + * @param {String} type 要转换的类型(integer、float、boolean、string) + */ + parseParams (value, type = 'string') { + if (value == null) return value; + switch (type) { + case 'integer': return Number.parseInt(value); + case 'float': return Number.parseFloat(value); + case 'boolean': return (value === 'true' || value); + default: return String(value); + } + }, + /** + * 将输入值转换为执行的类型数组 + * @param {Array} value 输入数组 + * @param {String} type 要转换的类型(integer、float、boolean、string) + */ + parseArrayParams (value, type = 'string') { + if (Array.isArray(value)) { + return value.map((item) => { + switch (type) { + case 'integer': return Number.parseInt(item); + case 'float': return Number.parseFloat(item); + case 'boolean': return (item === 'true' || item); + default: return String(item); + } + }); + } else { + return []; + } + }, + /** + * 下载上传的文件 + * @param {*} url 下载文件的url + * @param {*} fileName 下载文件名 + */ + downloadFile (url, fileName) { + Request({ + url: url, + method: 'get', + responseType: 'blob', + transformResponse: function (data) { + return data; + } + }).then(res => { + let data = res.data; + if (res.status === 200 && data instanceof Blob) { + let url = window.URL.createObjectURL(data); + let link = document.createElement('a'); + link.style.display = 'none'; + link.href = url; + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + this.$message.error('下载文件失败'); + } + }).catch(e => { + let reader = new FileReader(); + reader.onload = () => { + let jsonObj = JSON.parse(reader.result); + this.$message.error((jsonObj || {}).errorMessage || '下载文件失败'); + } + reader.readAsText(e); + }); + }, + ...mapMutations(['setLoadingStatus']) + }, + computed: { + ...mapGetters(['getUserInfo']) + }, + watch: { + 'loadingManager.loading': { + handler: function (newValue) { + this.isHttpLoading = (newValue != null); + } + } + } +} + +Vue.mixin(globalMixin); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/mixins/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/mixins/index.js new file mode 100644 index 00000000..43cffa1e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/core/mixins/index.js @@ -0,0 +1,298 @@ +import projectConfig from '@/core/config'; +import { buildGetUrl } from '@/core/http/requestUrl.js'; +import { formatDate, parseDate } from 'element-ui/src/utils/date-util'; +import { mapMutations } from 'vuex'; +import { getToken } from '@/utils'; + +/** + * 上传文件组件相关方法 + */ +const uploadMixin = { + methods: { + /** + * 解析返回的上传文件数据 + * @param {String} jsonData 上传文件数据,[{name, downloadUri, filename}] + * @param {Object} params 上传文件的参数 + * @returns {Array} 上传文件信息,[{name, downloadUri, filename, url}] + */ + parseUploadData (jsonData, params) { + let pathList = []; + if (jsonData != null) { + try { + pathList = JSON.parse(jsonData); + } catch (e) { + console.error(e); + } + } + + return pathList.map((item) => { + let downloadParams = {...params}; + downloadParams.filename = item.filename; + return { + ...item, + url: this.getUploadFileUrl(item, downloadParams) + } + }); + }, + /** + * 获得上传文件url列表 + * @param {*} jsonData 上传文件数据,[{name, downloadUri, filename}] + * @param {*} params 上传文件的参数 + * @returns {Array} 文件url列表 + */ + getPictureList (jsonData, params) { + let tempList = this.parseUploadData(jsonData, params); + if (Array.isArray(tempList)) { + return tempList.map(item => item.url); + } else { + return []; + } + }, + /** + * 将选中文件信息格式化成json信息 + * @param {Array} fileList 上传文件列表,[{name, fileUrl, data}] + */ + fileListToJson (fileList) { + if (Array.isArray(fileList)) { + return JSON.stringify(fileList.map((item) => { + return { + name: item.name, + downloadUri: item.downloadUri || item.response.data.downloadUri, + filename: item.filename || item.response.data.filename + } + })); + } else { + return undefined; + } + }, + /** + * 获得上传文件url + * @param {*} item 上传文件 + * @param {*} params 上传文件的参数 + */ + getUploadFileUrl (item, params) { + if (item == null || item.downloadUri == null) { + return null; + } else { + let menuIdJsonStr = window.sessionStorage.getItem('currentMenuId'); + let currentMenuId; + if (menuIdJsonStr != null) { + currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data; + } + params.Authorization = getToken(); + params.MenuId = currentMenuId; + return buildGetUrl(item.downloadUri, params); + } + }, + /** + * 获得上传接口 + * @param {*} url 上传路径 + */ + getUploadActionUrl (url) { + if (url != null && url[0] === '/') { + url = url.substr(1); + } + return projectConfig.baseUrl + url; + }, + /** + * 上传文件是否图片文件 + * @param {*} file 上传文件 + */ + pictureFile (file) { + if (['image/jpeg', 'image/jpg', 'image/png'].indexOf(file.type) !== -1) { + return true; + } else { + this.$message.error('图片文件格式不正确,请重新选择'); + return false; + } + } + }, + computed: { + getUploadHeaders () { + let token = getToken(); + return { + Authorization: token + } + } + } +}; + +const allowStatsType = [ + 'time', + 'datetime', + 'day', + 'month', + 'year' +]; +/** + * 日期相关方法 + */ +const statsDateRangeMixin = { + methods: { + /** + * 根据输入的日期获得日期范围(例如:输入2019-12-12,输出['2019-12-12 00:00:00', '2019-12-12 23:59:59']) + * @param {Date|String} date 要转换的日期 + * @param {String} statsType 转换类型(day, month, year) + * @param {String} format 输出格式 + */ + getDateRangeFilter (date, statsType = 'day', format = 'yyyy-MM-dd HH:mm:ss') { + if (date == null) return []; + + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + date = date.substr(0, date.indexOf(' ')); + let tempList = date.split('-'); + let year = Number.parseInt(tempList[0]); + let month = Number.parseInt(tempList[1]); + let day = Number.parseInt(tempList[2]); + if (isNaN(year) || isNaN(month) || isNaN(day)) { + return []; + } + let tempDate = new Date(year, month - 1, day); + // 判断是否正确的日期 + if (isNaN(tempDate.getTime())) return []; + + tempDate.setHours(0, 0, 0, 0); + let retDate; + switch (statsType) { + case 'day': + retDate = [ + new Date(tempDate), + new Date(tempDate.setDate(tempDate.getDate() + 1)) + ]; + break; + case 'month': + tempDate.setDate(1); + retDate = [ + new Date(tempDate), + new Date(tempDate.setMonth(tempDate.getMonth() + 1)) + ]; + break; + case 'year': + tempDate.setDate(1); + tempDate.setMonth(0); + retDate = [ + new Date(tempDate), + new Date(tempDate.setFullYear(tempDate.getFullYear() + 1)) + ] + } + + retDate[1] = new Date(retDate[1].getTime() - 1); + + return [ + formatDate(retDate[0], format), + formatDate(retDate[1], format) + ]; + }, + /** + * 格式化日期 + * @param {Date|String} date 要格式化的日期 + * @param {String} statsType 输出日期类型 + * @param {String} format 输入日期的格式 + */ + formatDateByStatsType (date, statsType = 'day', format = 'yyyy-MM-dd') { + if (date == null) return undefined; + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + if (statsType === 'datetime') format = 'yyyy-MM-dd HH:mm:ss'; + + let tempDate = ((date instanceof Date) ? date : parseDate(date, format)); + if (!tempDate) return undefined; + switch (statsType) { + case 'time': + return formatDate(tempDate, 'HH:mm:ss'); + case 'datetime': + return formatDate(tempDate, 'yyyy-MM-dd HH:mm:ss'); + case 'day': + return formatDate(tempDate, 'yyyy-MM-dd'); + case 'month': + return formatDate(tempDate, 'yyyy-MM'); + case 'year': + return formatDate(tempDate, 'yyyy'); + default: + return formatDate(tempDate, 'yyyy-MM-dd'); + } + }, + /** + * 获得统计类型中文名称 + * @param {String} statsType 统计类型(day, month, year) + */ + getStatsTypeShowName (statsType) { + statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; + switch (statsType) { + case 'day': return '日统计'; + case 'month': return '月统计'; + case 'year': return '年统计'; + } + }, + /** + * 获取统计类型字典列表 + * @param {Array} statsTypeList 统计类型列表 + */ + getAllowStatsTypeList (statsTypeList) { + if (Array.isArray(statsTypeList) && statsTypeList.length > 0) { + return statsTypeList.map((item) => { + return { + id: item, + name: this.getStatsTypeShowName(item) + } + }); + } else { + return []; + } + } + } +} +/** + * 页面缓存相关方法 + */ +const cachePageMixin = { + methods: { + /** + * 移除缓存页面 + * @param {*} name 缓存组件的名称 + */ + removeCachePage (name) { + this.removeCachePage(name); + }, + /** + * 从跳转页面返回并且刷新当前页面时调用 + */ + onResume () { + }, + ...mapMutations(['addCachePage', 'removeCachePage']) + }, + created () { + this.addCachePage(this.$options.name); + }, + mounted () { + this.$route.meta.refresh = false; + }, + activated () { + if (this.$route && this.$route.meta && this.$route.meta.refresh) { + this.onResume(); + } + this.$route.meta.refresh = true; + } +} +/** + * 缓存页面跳转页面相关方法 + */ +const cachedPageChildMixin = { + data () { + return { + // 是否刷新父页面 + refreshParentCachedPage: false + } + }, + beforeRouteLeave (to, from, next) { + if (to.meta == null) to.meta = {}; + to.meta.refresh = this.refreshParentCachedPage; + next(); + } +} + +export { + uploadMixin, + statsDateRangeMixin, + cachePageMixin, + cachedPageChildMixin +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/main.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/main.js new file mode 100644 index 00000000..25828f8f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/main.js @@ -0,0 +1,39 @@ +import '@/core/http'; +import JSONbig from 'json-bigint'; +import '@/components/Dialog'; +import Vue from 'vue'; +import ElementUI from 'element-ui'; +// import 'element-ui/lib/theme-chalk/index.css' +import '@/assets/style/index.scss'; +import '@/core/mixins/global.js'; +import App from './App'; +import router from './router'; +import store from './store'; +import TreeSelect from '@/components/TreeSelect'; +import RichEditor from '@/components/RichEditor'; +import InputNumberRange from '@/components/InputNumberRange'; +import DateRange from '@/components/DateRange'; +import FilterBox from '@/components/FilterBox'; +import TableProgressColumn from '@/components/TableProgressColumn'; +import VCharts from 'v-charts'; + +window.JSON = new JSONbig({storeAsString: true}); + +Vue.component('tree-select', TreeSelect); +Vue.component('rich-editor', RichEditor); +Vue.component('input-number-range', InputNumberRange); +Vue.component('date-range', DateRange); +Vue.component('filter-box', FilterBox); +Vue.component('table-progress-column', TableProgressColumn); + +Vue.use(ElementUI); +Vue.use(VCharts); + +Vue.config.productionTip = false; + +/* eslint-disable no-new */ +new Vue({ + router, + store, + render: h => h(App) +}).$mount('#app'); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/registerServiceWorker.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/registerServiceWorker.js new file mode 100644 index 00000000..76cede07 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/registerServiceWorker.js @@ -0,0 +1,32 @@ +/* eslint-disable no-console */ + +import { register } from 'register-service-worker' + +if (process.env.NODE_ENV === 'production') { + register(`${process.env.BASE_URL}service-worker.js`, { + ready () { + console.log( + 'App is being served from cache by a service worker.\n' + + 'For more details, visit https://goo.gl/AFskqB' + ) + }, + registered () { + console.log('Service worker has been registered.') + }, + cached () { + console.log('Content has been cached for offline use.') + }, + updatefound () { + console.log('New content is downloading.') + }, + updated () { + console.log('New content is available; please refresh.') + }, + offline () { + console.log('No internet connection found. App is running in offline mode.') + }, + error (error) { + console.error('Error during service worker registration:', error) + } + }) +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/import-development.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/import-development.js new file mode 100644 index 00000000..b29a72d9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/import-development.js @@ -0,0 +1 @@ +module.exports = file => require('../views/' + file + '.vue').default diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/import-production.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/import-production.js new file mode 100644 index 00000000..10d919de --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/import-production.js @@ -0,0 +1 @@ +module.exports = file => () => import('../views/' + file + '.vue') diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/index.js new file mode 100644 index 00000000..96bef31d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/index.js @@ -0,0 +1,48 @@ +import Vue from 'vue'; +import Router from 'vue-router'; +import routers from './systemRouters.js'; +import dialog from '@/components/Dialog'; +import { getToken } from '@/utils'; + +Vue.use(Router) + +const router = new Router({ + mode: 'hash', + routes: routers +}); + +const originalPush = Router.prototype.push; +Router.prototype.push = function push (location) { + return originalPush.call(this, location).catch(e => {}); +} + +const originalReplace = Router.prototype.replace; +Router.prototype.replace = function push (location, onComplete, onAbort) { + return originalReplace.call(this, location, onComplete, onAbort).catch(e => {}); +} + +/** + * 路由跳转的时候判断token是否存在 + */ +router.beforeResolve((to, from, next) => { + if (to.name === 'login') { + next(); + } else if (to.name === 'root') { + let queryString = window.location.search; + if (queryString == null || queryString === '') { + next(); + } else { + window.location.href = window.location.origin + '/#/login' + queryString; + } + } else { + let token = getToken(); + if (!token || !/\S/.test(token)) { + dialog.closeAll(); + next({ name: 'login' }) + } else { + next(); + } + } +}); + +export default router; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/systemRouters.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/systemRouters.js new file mode 100644 index 00000000..4ed7ed90 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/router/systemRouters.js @@ -0,0 +1,101 @@ +import state from '../store/state.js'; +// 开发环境不使用懒加载, 因为懒加载页面太多的话会造成webpack热更新太慢 +const _import = require('./import-' + process.env.NODE_ENV) + +function getProps (route) { + return route.query; +} + +// 系统生成路由 +const routers = [ + { path: '/login', component: _import('login/index'), name: 'login', props: getProps, desc: '登录' }, + { + path: '/', + component: _import('login/index'), + name: 'root' + }, + { + path: '/main', + component: _import('layout/index'), + name: 'main', + props: getProps, + redirect: { + name: 'welcome' + }, + meta: { + title: '主页', + showOnly: true + }, + children: [ + {path: 'formSysUser', component: _import('upms/formSysUser/index'), name: 'formSysUser', meta: {title: '用户管理'}}, + {path: 'formSysDept', component: _import('upms/formSysDept/index'), name: 'formSysDept', meta: {title: '部门管理'}}, + {path: 'formSysRole', component: _import('upms/formSysRole/index'), name: 'formSysRole', meta: {title: '角色管理'}}, + {path: 'formSysDataPerm', component: _import('upms/formSysDataPerm/index'), name: 'formSysDataPerm', meta: {title: '数据权限管理'}}, + {path: 'formSysMenu', component: _import(state.supportColumn ? 'upms/formSysMenu/formSysColumnMenu' : 'upms/formSysMenu/index'), name: 'formSysMenu', meta: {title: '菜单列表'}}, + {path: 'formSysDict', component: _import('upms/formDictManagement/index'), name: 'formSysDict', meta: {title: '字典管理'}}, + {path: 'formSysPermCode', component: _import('upms/formSysPermCode/index'), name: 'formSysPermCode', meta: {title: '权限字管理'}}, + {path: 'formSysPerm', component: _import('upms/formSysPerm/index'), name: 'formSysPerm', meta: {title: '权限资源管理'}}, + {path: 'formSysOperationLog', component: _import('upms/formSysOperationLog/index'), name: 'formSysOperationLog', meta: {title: '操作日志'}}, + {path: 'formSysLoginUser', component: _import('upms/formSysLoginUser/index'), name: 'formSysLoginUser', meta: {title: '在线用户'}}, + {path: 'welcome', component: _import('welcome/index'), name: 'welcome', meta: {title: '欢迎'}}, + { + path: 'formStudent', + component: _import('generated/formStudent'), + name: 'formStudent', + props: getProps, + meta: {title: '学生管理'} + }, + { + path: 'formCourse', + component: _import('generated/formCourse'), + name: 'formCourse', + props: getProps, + meta: {title: '课程管理'} + }, + { + path: 'formCourseStats', + component: _import('generated/formCourseStats'), + name: 'formCourseStats', + props: getProps, + meta: {title: '课程统计'} + }, + { + path: 'formStudentActionStats', + component: _import('generated/formStudentActionStats'), + name: 'formStudentActionStats', + props: getProps, + meta: {title: '学生行为统计'} + }, + { + path: 'formStudentActionDetail', + component: _import('generated/formStudentActionDetail'), + name: 'formStudentActionDetail', + props: getProps, + meta: {title: '学生行为详情'} + }, + { + path: 'formSetClassStudent', + component: _import('generated/formSetClassStudent'), + name: 'formSetClassStudent', + props: getProps, + meta: {title: '设置班级学生'} + }, + { + path: 'formSetClassCourse', + component: _import('generated/formSetClassCourse'), + name: 'formSetClassCourse', + props: getProps, + meta: {title: '设置班级课程'} + }, + { + path: 'formClass', + component: _import('generated/formClass'), + name: 'formClass', + props: getProps, + meta: {title: '班级管理'} + } + ] + } +]; + +export default routers; diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/staticDict/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/staticDict/index.js new file mode 100644 index 00000000..8242772d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/staticDict/index.js @@ -0,0 +1,461 @@ +/** + * 常量字典数据 + */ +import Vue from 'vue'; + +class DictionaryBase extends Map { + constructor (name, dataList, keyId = 'id', symbolId = 'symbol') { + super(); + this.showName = name; + this.setList(dataList, keyId, symbolId); + } + + setList (dataList, keyId = 'id', symbolId = 'symbol') { + this.clear(); + if (Array.isArray(dataList)) { + dataList.forEach((item) => { + this.set(item[keyId], item); + if (item[symbolId] != null) { + Object.defineProperty(this, item[symbolId], { + get: function () { + return item[keyId]; + } + }); + } + }); + } + } + + getList (valueId = 'name', parentIdKey = 'parentId', filter) { + let temp = []; + this.forEach((value, key) => { + let obj = { + id: key, + name: (typeof value === 'string') ? value : value[valueId], + parentId: value[parentIdKey] + }; + if (typeof filter !== 'function' || filter(obj)) { + temp.push(obj); + } + }); + + return temp; + } + + getValue (id, valueId = 'name') { + // 如果id为boolean类型,则自动转换为0和1 + if (typeof id === 'boolean') { + id = id ? 1 : 0; + } + return (this.get(id) || {})[valueId]; + } +} + +const SysUserStatus = new DictionaryBase('用户状态', [ + { + id: 0, + name: '正常状态', + symbol: 'NORMAL' + }, + { + id: 1, + name: '锁定状态', + symbol: 'LOCKED' + } +]); +Vue.prototype.SysUserStatus = SysUserStatus; + +const SysUserType = new DictionaryBase('用户类型', [ + { + id: 0, + name: '管理员', + symbol: 'ADMIN' + }, + { + id: 1, + name: '系统操作员', + symbol: 'SYSTEM' + }, + { + id: 2, + name: '普通操作员', + symbol: 'OPERATOR' + } +]); +Vue.prototype.SysUserType = SysUserType; + +const ClassStatus = new DictionaryBase('班级状态', [ + { + id: 1, + name: '正常', + symbol: 'NORAML' + }, + { + id: -1, + name: '解散', + symbol: 'DELETED' + } +]); +Vue.prototype.ClassStatus = ClassStatus; + +const ClassLevel = new DictionaryBase('班级级别', [ + { + id: 0, + name: '初级班', + symbol: 'NORMAL' + }, + { + id: 1, + name: '中级班', + symbol: 'MIDDLE' + }, + { + id: 2, + name: '高级班', + symbol: 'HIGH' + } +]); +Vue.prototype.ClassLevel = ClassLevel; + +const CourseDifficult = new DictionaryBase('课程难度', [ + { + id: 0, + name: '容易', + symbol: 'NORMAL' + }, + { + id: 1, + name: '普通', + symbol: 'MIDDLE' + }, + { + id: 2, + name: '困难', + symbol: 'HIGH' + } +]); +Vue.prototype.CourseDifficult = CourseDifficult; + +const Subject = new DictionaryBase('学科', [ + { + id: 0, + name: '语文', + symbol: 'CHINESE' + }, + { + id: 1, + name: '数学', + symbol: 'MATCH' + }, + { + id: 2, + name: '英语', + symbol: 'ENGLISH' + } +]); +Vue.prototype.Subject = Subject; + +const StudentActionType = new DictionaryBase('学生行为', [ + { + id: 0, + name: '充值', + symbol: 'RECHARGE' + }, + { + id: 1, + name: '购课', + symbol: 'BUY_COURSE' + }, + { + id: 2, + name: '上课签到', + symbol: 'SIGNIN_COURSE' + }, + { + id: 3, + name: '上课签退', + symbol: 'SIGNOUT_COURSE' + }, + { + id: 4, + name: '看视频课', + symbol: 'WATCH_VIDEO' + }, + { + id: 5, + name: '做作业', + symbol: 'DO_PAPER' + }, + { + id: 6, + name: '刷题', + symbol: 'REFRESH_EXERCISE' + }, + { + id: 7, + name: '献花', + symbol: 'PRESENT_FLOWER' + }, + { + id: 8, + name: '购买视频课', + symbol: 'BUY_VIDEO_COURSE' + }, + { + id: 9, + name: '购买鲜花', + symbol: 'BUY_FLOWER' + }, + { + id: 10, + name: '购买作业', + symbol: 'BUY_PAPER' + } +]); +Vue.prototype.StudentActionType = StudentActionType; + +const DeviceType = new DictionaryBase('设备类型', [ + { + id: 0, + name: 'iOS', + symbol: 'IOS' + }, + { + id: 1, + name: 'Android', + symbol: 'ANDROID' + }, + { + id: 2, + name: 'PC', + symbol: 'PC' + } +]); +Vue.prototype.DeviceType = DeviceType; + +const Gender = new DictionaryBase('性别', [ + { + id: 1, + name: '男', + symbol: 'MALE' + }, + { + id: 0, + name: '女', + symbol: 'FEMALE' + } +]); +Vue.prototype.Gender = Gender; + +const ExpLevel = new DictionaryBase('经验等级', [ + { + id: 0, + name: '初级学员', + symbol: 'LOWER' + }, + { + id: 1, + name: '中级学员', + symbol: 'MIDDLE' + }, + { + id: 2, + name: '高级学员', + symbol: 'HIGH' + } +]); +Vue.prototype.ExpLevel = ExpLevel; + +const StudentStatus = new DictionaryBase('学生状态', [ + { + id: 0, + name: '正常', + symbol: 'NORMAL' + }, + { + id: 1, + name: '锁定', + symbol: 'LOCKED' + }, + { + id: 2, + name: '注销', + symbol: 'DELETED' + } +]); +Vue.prototype.StudentStatus = StudentStatus; + +const SysOperationType = new DictionaryBase('操作日志操作类型', [ + { + id: 0, + name: '登录', + symbol: 'LOGIN' + }, + { + id: 5, + name: '登出', + symbol: 'LOGOUT' + }, + { + id: 10, + name: '新增', + symbol: 'ADD' + }, + { + id: 15, + name: '修改', + symbol: 'UPDATE' + }, + { + id: 20, + name: '删除', + symbol: 'DELETE' + }, + { + id: 35, + name: '查询', + symbol: 'LIST' + }, + { + id: 40, + name: '分组查询', + symbol: 'LIST_WITH_GROUP' + }, + { + id: 45, + name: '导出', + symbol: 'EXPORT' + }, + { + id: 25, + name: '新增多对多关联', + symbol: 'ADD_M2M' + }, + { + id: 30, + name: '移除多对多关联', + symbol: 'DELETE_M2M' + }, + { + id: 50, + name: '上传', + symbol: 'UPLOAD' + }, + { + id: 55, + name: '下载', + symbol: 'DOWNLOAD' + }, + { + id: 60, + name: '重置缓存', + symbol: 'RELOAD_CACHE' + } +]); +Vue.prototype.SysOperationType = SysOperationType; + +const SysPermModuleType = new DictionaryBase('权限分组类型', [ + { + id: 0, + name: '分组模块', + symbol: 'GROUP' + }, { + id: 1, + name: '接口模块', + symbol: 'CONTROLLER' + } +]); +Vue.prototype.SysPermModuleType = SysPermModuleType; + +const SysPermCodeType = new DictionaryBase('权限字类型', [{ + id: 0, + name: '表单', + symbol: 'FORM' +}, { + id: 1, + name: '片段', + symbol: 'FRAGMENT' +}, { + id: 2, + name: '操作', + symbol: 'OPERATION' +}]); +Vue.prototype.SysPermCodeType = SysPermCodeType; + +const SysMenuType = new DictionaryBase('菜单类型', [ + { + id: 0, + name: '目录', + symbol: 'DIRECTORY' + }, + { + id: 1, + name: '表单', + symbol: 'MENU' + }, + { + id: 2, + name: '片段', + symbol: 'FRAGMENT' + }, + { + id: 3, + name: '按钮', + symbol: 'BUTTON' + } +]); +Vue.prototype.SysMenuType = SysMenuType; + +const SysDataPermType = new DictionaryBase('数据权限类型', [ + { + id: 0, + name: '查看全部', + symbol: 'ALL' + }, + { + id: 1, + name: '仅看自己', + symbol: 'ONLY_USER' + }, + { + id: 2, + name: '仅看所在部门', + symbol: 'ONLY_DEPT' + }, + { + id: 3, + name: '仅看所在部门及子部门', + symbol: 'ONLY_DEPT_AND_CHILD' + }, + { + id: 4, + name: '自选部门及子部门', + symbol: 'CUSTOM_DEPT_AND_CHILD' + }, + { + id: 5, + name: '仅自选部门', + symbol: 'CUSTOM_DEPT' + } +]); +Vue.prototype.SysDataPermType = SysDataPermType; + +export { + DictionaryBase, + SysUserStatus, + SysUserType, + ClassStatus, + ClassLevel, + CourseDifficult, + Subject, + StudentActionType, + DeviceType, + Gender, + ExpLevel, + StudentStatus, + SysDataPermType, + SysOperationType, + SysPermModuleType, + SysPermCodeType, + SysMenuType +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/actions.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/actions.js new file mode 100644 index 00000000..3c08aeca --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/actions.js @@ -0,0 +1,16 @@ +// 获得消息列表数据 +function loadMessage (context, owner) { + // TODO: 获取消息列表 +} + +export default { + startMessage: (context, owner) => { + // TODO: 开始消息获取轮询 + }, + stopMessage: (context) => { + // TODO: 结束消息获取轮询 + }, + reloadMessage: (context, owner) => { + loadMessage(context, owner); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/getters.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/getters.js new file mode 100644 index 00000000..53de2d99 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/getters.js @@ -0,0 +1,89 @@ +import { findMenuItem } from './utils'; +import * as StaticDict from '@/staticDict'; + +export default { + getMultiTags: (state) => { + return state.supportTags; + }, + getCollapse: (state) => { + return state.isCollapse; + }, + getClientHeight: (state) => { + return state.documentClientHeight; + }, + getClientWidth: (state) => { + return state.documentClienWidth; + }, + getMainContextHeight: (state) => { + return state.documentClientHeight - (state.supportTags ? 130 : 90); + }, + getOnlineFormCache: (state) => { + return state.onlineFormCache; + }, + getUserInfo: (state) => { + return state.userInfo; + }, + getCachePages: (state) => { + return state.cachePages; + }, + getTagList: (state) => { + return state.tagList; + }, + getMenuList: (state) => { + if (state.supportColumn) { + if (state.currentColumnId == null || state.currentColumnId === '') return []; + for (let i = 0; i < state.menuList.length; i++) { + if (state.menuList[i].menuId === state.currentColumnId) { + return state.menuList[i].children || []; + } + } + + return []; + } else { + return state.menuList; + } + }, + getColumnList: (state) => { + if (!state.supportColumn) return []; + return state.menuList.map(menu => { + if (menu.menuType === StaticDict.SysMenuType.DIRECTORY) { + return { + columnId: menu.menuId, + columnName: menu.menuName + } + } + }).filter(item => item != null); + }, + getCurrentMenuId: (state) => { + return state.currentMenuId; + }, + getMenuItem: (state) => { + if (Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + let temp = findMenuItem(state.menuList[i], state.currentMenuId); + if (temp != null) return temp; + } + } + return null; + }, + getCurrentMenuPath: (state) => { + let menuPath = []; + if (Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + let temp = findMenuItem(state.menuList[i], state.currentMenuId, menuPath); + if (temp != null) break; + } + } + + return menuPath; + }, + getMultiColumn: (state) => { + return state.supportColumn; + }, + getCurrentColumnId: (state) => { + return state.currentColumnId; + }, + getMessageList: (state) => { + return state.messageList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/index.js new file mode 100644 index 00000000..5fc44198 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import state from './state.js'; +import getters from './getters.js'; +import mutations from './mutations.js'; +import actions from './actions.js'; + +Vue.use(Vuex); +export default new Vuex.Store({ + state, + getters, + mutations, + actions, + strict: process.env.NODE_ENV !== 'production' +}); diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/mutations.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/mutations.js new file mode 100644 index 00000000..c6acfc97 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/mutations.js @@ -0,0 +1,167 @@ +import { initUserInfo, findMenuItem } from './utils'; +import { setObjectToSessionStorage, findItemFromList, treeDataTranslate } from '@/utils'; + +export default { + setCollapse: (state, isCollapse) => { + state.isCollapse = isCollapse; + }, + setClientHeight: (state, height) => { + state.documentClientHeight = height; + }, + setClientWidth: (state, width) => { + state.documentClienWidth = width; + }, + addOnlineFormCache: (state, data) => { + state.onlineFormCache[data.key] = data.value; + }, + removeOnlineFormCache: (state, key) => { + delete state.onlineFormCache[key]; + }, + clearOnlineFormCache: (state) => { + state.onlineFormCache = {}; + }, + setUserInfo: (state, info) => { + setObjectToSessionStorage('userInfo', info); + state.userInfo = initUserInfo(info); + }, + addCachePage (state, name) { + if (state.cachePages.indexOf(name) === -1) { + let temp = [...state.cachePages]; + temp.push(name); + setObjectToSessionStorage('cachePages', temp); + state.cachePages = temp; + } + }, + removeCachePage (state, name) { + let pos = state.cachePages.indexOf(name); + if (pos !== -1) { + let temp = [...state.cachePages]; + temp.splice(pos, 1); + setObjectToSessionStorage('cachePages', temp); + state.cachePages = temp; + } + }, + clearCachePage (state) { + setObjectToSessionStorage('cachePages', []); + state.cachePages = []; + }, + addTag (state, id) { + if (id == null || id === '') return; + // 新增的标签是否存在 + let tagList = state.tagList; + let tagItem = null; + if (Array.isArray(tagList)) { + tagItem = findItemFromList(tagList, id, 'menuId'); + } + if (tagItem != null) return; + // 添加新增标签以及更新页面缓存 + let menuList = state.menuList; + let menuObject = null; + if (Array.isArray(menuList)) { + for (let i = 0; i < menuList.length; i++) { + menuObject = findMenuItem(menuList[i], id); + if (menuObject != null) break; + } + } + if (menuObject != null) { + state.tagList = [...state.tagList, menuObject]; + if (Array.isArray(state.cachePages) && (menuObject.onlineFormId == null || menuObject.onlineFormId === '') && + state.cachePages.indexOf(menuObject.formRouterName) === -1) { + state.cachePages = [...state.cachePages, menuObject.formRouterName]; + } + } + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + }, + removeTag (state, id) { + if (id == null || id === '') return; + // 移除标签 + let nextPos = -1; + let tagItem = null; + for (let i = 0; i < state.tagList.length; i++) { + if (state.tagList[i].menuId === id) { + tagItem = state.tagList[i]; + state.tagList.splice(i, 1); + nextPos = Math.min(i, state.tagList.length - 1); + } + } + // let tagItem = findItemFromList(state.tagList, id, 'menuId', true); + if (tagItem == null) return; + // 移除页面缓存 + findItemFromList(state.cachePages, tagItem.formRouterName, undefined, true); + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + // 如果移除的是当前显示页面,重新选择显示页面 + let showTag = null; + if (state.currentMenuId === id) { + showTag = state.tagList[nextPos]; + let tempId = (showTag || {}).menuId; + if (setObjectToSessionStorage('currentMenuId', tempId)) state.currentMenuId = tempId; + } + }, + closeOtherTags (state, id) { + if (id == null || id === '') return; + // 移除其他所有标签 + if (Array.isArray(state.tagList)) { + state.tagList = state.tagList.filter((item) => { + return item.menuId === id; + }); + } + + let menuObject = state.tagList[0]; + if (menuObject && (menuObject.onlineFormId == null || menuObject.onlineFormId === '') && + menuObject.formRouterName && menuObject.formRouterName !== '') { + state.cachePages = [menuObject.formRouterName]; + if (setObjectToSessionStorage('currentMenuId', menuObject.menuId)) state.currentMenuId = menuObject.menuId; + } + setObjectToSessionStorage('cachePages', state.cachePages); + setObjectToSessionStorage('tagList', state.tagList); + }, + clearAllTags (state) { + if (setObjectToSessionStorage('currentMenuId', undefined)) state.currentMenuId = undefined; + if (setObjectToSessionStorage('cachePages', [])) state.cachePages = []; + if (setObjectToSessionStorage('tagList', [])) state.tagList = []; + }, + setMenuList: (state, list) => { + if (Array.isArray(list)) { + if (setObjectToSessionStorage('menuList', list)) state.menuList = treeDataTranslate(list, 'menuId', 'parentId'); + let columnId = (state.menuList[0] || {}).menuId; + if (setObjectToSessionStorage('currentColumnId', columnId)) state.currentColumnId = columnId; + } + }, + setCurrentMenuId: (state, menuId) => { + let menuItem = null; + if (setObjectToSessionStorage('currentMenuId', menuId)) state.currentMenuId = menuId; + if (Array.isArray(state.tagList) && Array.isArray(state.menuList)) { + for (let i = 0; i < state.menuList.length; i++) { + menuItem = findMenuItem(state.menuList[i], menuId, 'menuId'); + if (menuItem != null) { + // 添加新的tag + let tagItem = findItemFromList(state.tagList, menuId, 'menuId'); + if (tagItem == null) { + state.tagList = [...state.tagList, menuItem]; + setObjectToSessionStorage('tagList', state.tagList); + } + // 添加新缓存 + if (Array.isArray(state.cachePages) && state.cachePages.indexOf(menuItem.formRouterName) === -1) { + if (menuItem.onlineFormId == null || menuItem.onlineFormId === '') { + state.cachePages = [...state.cachePages, menuItem.formRouterName]; + } + setObjectToSessionStorage('cachePages', state.cachePages); + } + break; + } + } + } + }, + setCurrentColumnId: (state, columnId) => { + if (setObjectToSessionStorage('currentColumnId', columnId)) state.currentColumnId = columnId; + if (setObjectToSessionStorage('currentMenuId', null)) state.currentMenuId = null; + }, + setMessageTimer: (state, timerHandler) => { + state.messageTimer = timerHandler; + }, + setMessageList: (state, messageList) => { + state.messageList = messageList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/state.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/state.js new file mode 100644 index 00000000..0a7b88dc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/state.js @@ -0,0 +1,32 @@ +import { initUserInfo } from './utils'; +import { getObjectFromSessionStorage, treeDataTranslate } from '@/utils'; + +export default { + // 是否左侧菜单折叠 + isCollapse: false, + // 是否多栏目 + supportColumn: false, + // 是否多标签 + supportTags: false, + // 浏览器客户区高度 + documentClientHeight: 100, + // 浏览器客户区宽度 + documentClientWidth: undefined, + // 在线表单查询页面缓存 + onlineFormCache: {}, + // 用户登录信息 + userInfo: initUserInfo(), + // 缓存页面 + cachePages: getObjectFromSessionStorage('cachePages', []), + // 当前标签 + tagList: getObjectFromSessionStorage('tagList', []), + // 菜单列表 + menuList: treeDataTranslate(getObjectFromSessionStorage('menuList', []), 'menuId', 'parentId'), + // 当前菜单 + currentMenuId: getObjectFromSessionStorage('currentMenuId', undefined), + // 当前栏目 + currentColumnId: getObjectFromSessionStorage('currentColumnId', undefined), + // 消息列表 + messageTimeer: null, + messageList: [] +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/utils/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/utils/index.js new file mode 100644 index 00000000..ec129435 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/store/utils/index.js @@ -0,0 +1,36 @@ +import { getObjectFromSessionStorage } from '@/utils'; + +function findMenuItem (menuItem, menuId, path) { + if (Array.isArray(path)) path.push(menuItem); + if ((menuItem.menuId + '') === (menuId + '')) return menuItem; + + let bFind = false; + let findItem = null; + if (Array.isArray(menuItem.children)) { + for (let i = 0; i < menuItem.children.length; i++) { + findItem = findMenuItem(menuItem.children[i], menuId, path); + if (findItem != null) { + bFind = true; + break; + } + } + } + + if (!bFind && Array.isArray(path)) path.pop(); + return bFind ? findItem : null; +} + +function initUserInfo (userInfo) { + if (userInfo == null) userInfo = getObjectFromSessionStorage('userInfo'); + + if (userInfo != null && userInfo.permCodeList != null && Array.isArray(userInfo.permCodeList)) { + userInfo.permCodeSet = new Set(userInfo.permCodeList); + } + + return userInfo; +} + +export { + findMenuItem, + initUserInfo +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/chartOption.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/chartOption.js new file mode 100644 index 00000000..76b12e02 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/chartOption.js @@ -0,0 +1,56 @@ +const defaultLineChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + xAxis: { + axisLabel: { + interval: 0, + showMaxLabel: true + } + }, + legend: { + top: '3%' + } +} + +const defaultBarChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + xAxis: { + axisLabel: { + interval: 0, + showMaxLabel: true + } + }, + legend: { + top: '3%' + } +} + +const defaultPieChartOption = { + grid: { + left: '3%', + right: '4%', + bottom: '20px', + containLabel: true + }, + legend: { + top: '3%' + }, + series: { + center: ['50%', '60%'] + } +} + +export { + defaultLineChartOption, + defaultBarChartOption, + defaultPieChartOption +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/index.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/index.js new file mode 100644 index 00000000..c622c222 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/index.js @@ -0,0 +1,442 @@ +import JSEncrypt from 'jsencrypt'; +// eslint-disable-next-line no-unused-vars +// import Cookies from 'js-cookie'; + +/** + * 列表数据转换树形数据 + * @param {Array} data 要转换的列表 + * @param {String} id 主键字段字段名 + * @param {String} pid 父字段字段名 + * @returns {Array} 转换后的树数据 + */ +export function treeDataTranslate (data, id = 'id', pid = 'parentId') { + var res = [] + var temp = {} + for (var i = 0; i < data.length; i++) { + temp[data[i][id]] = data[i] + } + for (var k = 0; k < data.length; k++) { + if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) { + if (!temp[data[k][pid]]['children']) { + temp[data[k][pid]]['children'] = [] + } + if (!temp[data[k][pid]]['_level']) { + temp[data[k][pid]]['_level'] = 1 + } + data[k]['_level'] = temp[data[k][pid]]._level + 1 + data[k]['_parent'] = data[k][pid] + temp[data[k][pid]]['children'].push(data[k]) + } else { + res.push(data[k]) + } + } + + return res +} +/** + * 获取字符串字节长度(中文算2个字符) + * @param {String} str 要获取长度的字符串 + */ +export function getStringLength (str) { + return str.replace(/[\u4e00-\u9fa5\uff00-\uffff]/g, '**').length +} +/** + * 获取uuid + */ +export function getUUID () { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { + return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) + }); +} +/** + * 大小驼峰变换函数 + * @param name 要转换的字符串 + * @param type 转换的类型0:转换成小驼峰,1:转换成大驼峰 + */ +export function nameTranslate (name, type) { + name = name.toLowerCase(); + let nameArray = name.split('_'); + nameArray.forEach((item, index) => { + if (index === 0) { + name = type === 1 ? item.slice(0, 1).toUpperCase() + item.slice(1) : item; + } else { + name = name + item.slice(0, 1).toUpperCase() + item.slice(1); + } + }); + + nameArray = name.split('-'); + nameArray.forEach((item, index) => { + if (index === 0) { + name = type === 1 ? item.slice(0, 1).toUpperCase() + item.slice(1) : item; + } else { + name = name + item.slice(0, 1).toUpperCase() + item.slice(1); + } + }); + return name; +} +/** + * 通过id从树中获取指定的节点 + * @param {Object} node 根节点 + * @param {String|Nubmer} id 键值 + * @param {Array} list 保存查询路径 + * @param {String} idKey 主键字段名 + * @param {String} childKey 子节点字段名 + */ +function findNode (node, id, list, idKey = 'id', childKey = 'children') { + if (Array.isArray(list)) list.push(node[idKey]); + if (node[idKey] === id) { + return node; + } + + if (node[childKey] != null && Array.isArray(node[childKey])) { + for (let i = 0; i < node[childKey].length; i++) { + let tempNode = findNode(node[childKey][i], id, list, idKey, childKey); + if (tempNode) return tempNode; + } + } + + if (Array.isArray(list)) list.pop(); +} +/** + * 通过id返回从根节点到指定节点的路径 + * @param {Array} treeRoot 树根节点数组 + * @param {*} id 要查询的节点的id + * @param {*} idKey 主键字段名 + * @param {*} childKey 子节点字段名 + */ +export function findTreeNodePath (treeRoot, id, idKey = 'id', childKey = 'children') { + let tempList = []; + for (let i = 0; i < treeRoot.length; i++) { + if (findNode(treeRoot[i], id, tempList, idKey, childKey)) { + return tempList; + } + } + + return []; +} +/** + * 通过id从树中查找节点 + * @param {Array} treeRoot 根节点数组 + * @param {*} id 要查找的节点的id + * @param {*} idKey 主键字段名 + * @param {*} childKey 子节点字段名 + */ +export function findTreeNode (treeRoot, id, idKey = 'id', childKey = 'children') { + for (let i = 0; i < treeRoot.length; i++) { + let tempNode = findNode(treeRoot[i], id, undefined, idKey, childKey); + if (tempNode) return tempNode; + } +} +/** + * 把Object转换成query字符串 + * @param {Object} params 要转换的Object + */ +export function objectToQueryString (params) { + if (params == null) { + return null; + } else { + return Object.keys(params).map((key) => { + if (params[key] !== undefined) { + return `${key}=${params[key]}`; + } else { + return undefined; + } + }).filter(item => item != null).join('&'); + } +} +/** + * 从数组中查找某一项 + * @param {Array} list 要查找的数组 + * @param {String} id 要查找的节点id + * @param {String} idKey 主键字段名(如果为null则直接比较) + * @param {Boolean} removeItem 是否从数组中移除查找到的节点 + * @returns {Object} 找到返回节点,没找到返回undefined + */ +export function findItemFromList (list, id, idKey, removeItem = false) { + if (Array.isArray(list) && list.length > 0 && id != null) { + for (let i = 0; i < list.length; i++) { + let item = list[i]; + if (((idKey == null || idKey === '') && item === id) || (idKey != null && item[idKey] === id)) { + if (removeItem) list.splice(i, 1); + return item; + } + } + } + return null; +} +/** + * 将数据保存到sessionStorage + * @param {*} key sessionStorage的键值 + * @param {*} value 要保存的数据 + */ +export function setObjectToSessionStorage (key, value) { + if (key == null || key === '') return false; + if (value == null) { + window.sessionStorage.removeItem(key); + return true; + } else { + let jsonObj = { + data: value + } + window.sessionStorage.setItem(key, JSON.stringify(jsonObj)); + return true; + } +} +/** + * 从sessionStorage里面获取数据 + * @param {String} key 键值 + * @param {*} defaultValue 默认值 + */ +export function getObjectFromSessionStorage (key, defaultValue) { + let jsonObj = null; + try { + jsonObj = JSON.parse(window.sessionStorage.getItem(key)); + jsonObj = (jsonObj || {}).data; + } catch (e) { + jsonObj = defaultValue; + }; + return (jsonObj != null) ? jsonObj : defaultValue; +} +/** + * 判读字符串是否一个数字 + * @param {String} str 要判断的字符串 + */ +export function isNumber (str) { + let num = Number.parseFloat(str); + if (Number.isNaN(num)) return false; + return num.toString() === str; +} +/** + * 生成随机数 + * @param {Integer} min 随机数最小值 + * @param {Integer} max 随机数最大值 + */ +export function random (min, max) { + let base = Math.random(); + return min + base * (max - min); +} +/** + * 加密 + * @param {*} value 要加密的字符串 + */ +const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpC4QMnbTrQOFriJJCCFFWhlruBJThAEBfRk7pRx1jsAhyNVL3CqJb0tRvpnbCnJhrRAEPdgFHXv5A0RrvFp+5Cw7QoFH6O9rKB8+0H7+aVQeKITMUHf/XMXioymw6Iq4QfWd8RhdtM1KM6eGTy8aU7SO2s69Mc1LXefg/x3yw6wIDAQAB'; +export function encrypt (value) { + if (value == null || value === '') return null; + let encrypt = new JSEncrypt(); + encrypt.setPublicKey(publicKey); + return encodeURIComponent(encrypt.encrypt(value)); +} + +export function getToken () { + return sessionStorage.getItem('token'); + // return Cookies.get('token'); +} + +export function setToken (token) { + if (token == null || token === '') { + sessionStorage.removeItem('token'); + // Cookies.remove('token'); + } else { + sessionStorage.setItem('token', token); + // Cookies.set('token', token); + } +} + +export function traversalTree (treeNode, callback, childrenKey = 'children') { + if (treeNode != null && Array.isArray(treeNode[childrenKey]) && treeNode[childrenKey].length > 0) { + treeNode[childrenKey].forEach(childNode => { + traversalTree(childNode, callback, childrenKey); + }); + } + return typeof callback === 'function' ? callback(treeNode) : undefined; +} + +export class TreeTableImpl { + constructor (dataList, options) { + this.options = { + idKey: options ? options.idKey : 'id', + nameKey: options ? options.nameKey : 'name', + parentIdKey: options ? options.parentIdKey : 'parentId', + isLefeCallback: options ? options.isLefeCallback : undefined, + checkStrictly: options ? options.checkStrictly : false + } + + this.dataList = Array.isArray(dataList) ? dataList : []; + this.dataMap = new Map(); + this.dataList.forEach(item => { + this.dataMap.set(item[this.options.idKey], item); + }); + // 表格选中行 + this.checkedRows = undefined; + this.onCheckedRowChange = this.onCheckedRowChange.bind(this); + } + + /** + * 过滤表格数据 + * @param {string} filterString 过滤条件字符串 + * @param {boolean} onlyChecked 是否只显示选中节点 + * @returns {array} 过滤后的表格数据列表 + */ + getFilterTableData (filterString, onlyChecked = false) { + let { idKey, nameKey, parentIdKey, isLefeCallback } = this.options; + let tempMap = new Map(); + let parentIdList = []; + this.dataList.forEach(item => { + if ((filterString == null || filterString === '' || item[nameKey].indexOf(filterString) !== -1) && + (!onlyChecked || (this.checkedRows != null && this.checkedRows.get(item[idKey])))) { + if (isLefeCallback == null || !isLefeCallback(item)) { + parentIdList.push(item[idKey]); + } + // 将命中节点以及它的父节点都设置为命中 + let tempItem = item; + do { + tempMap.set(tempItem[idKey], tempItem); + tempItem = this.dataMap.get(tempItem[parentIdKey]); + } while (tempItem != null) + } + }); + + return this.dataList.map(item => { + let disabled = true; + + if (parentIdList.indexOf(item[parentIdKey]) !== -1 || tempMap.get(item[idKey]) != null) { + if (parentIdList.indexOf(item[parentIdKey]) !== -1 && (isLefeCallback == null || !isLefeCallback(item))) { + parentIdList.push(item[idKey]); + } + disabled = false; + } + + return { + ...item, + __disabled: disabled + } + }); + } + + /** + * 获取表格树数据,计算选中状态 + * @param {array} dataList 表格列表数据 + */ + getTableTreeData (dataList, checkedRows) { + let { idKey, parentIdKey, checkStrictly } = this.options; + let treeData = []; + function calcPermCodeTreeAttribute (treeNode, checkedRows) { + let checkedItem = checkedRows == null ? null : checkedRows.get(treeNode[idKey]); + treeNode.__checked = checkedItem != null; + // 是否所有子权限字都被选中 + let allChildChecked = true; + // 是否任意子权限字被选中 + let hasChildChecked = false; + // 如果存在子权限字 + if (Array.isArray(treeNode.children) && treeNode.children.length > 0) { + treeNode.children.forEach(item => { + let isChecked = calcPermCodeTreeAttribute(item, checkedRows); + hasChildChecked = hasChildChecked || isChecked; + allChildChecked = allChildChecked && isChecked; + }); + } else { + allChildChecked = false; + } + treeNode.__indeterminate = !checkStrictly && hasChildChecked && !allChildChecked; + treeNode.__checked = treeNode.__checked || (allChildChecked && !checkStrictly); + return treeNode.__checked || treeNode.__indeterminate; + } + + if (Array.isArray(dataList)) { + treeData = treeDataTranslate(dataList.map(item => { + return {...item}; + }), idKey, parentIdKey); + treeData.forEach(item => { + calcPermCodeTreeAttribute(item, checkedRows); + }); + } + + return treeData; + } + + /** + * 树表格行选中状态改变 + * @param {object} row 选中状态改变行数据 + */ + onCheckedRowChange (row) { + if (this.checkedRows == null) { + this.checkedRows = new Map(); + } else { + let temp = new Map(); + this.checkedRows.forEach((item, key) => { + temp.set(key, item); + }); + this.checkedRows = temp; + } + let { idKey } = this.options; + if (!row.__checked || row.__indeterminate) { + // 节点之前未被选中或者之前为半选状态,修改当前节点以及子节点为选中状态 + this.checkedRows.set(row[idKey], row); + if (Array.isArray(row.children) && !this.options.checkStrictly) { + row.children.forEach(childNode => { + traversalTree(childNode, (node) => { + this.checkedRows.set(node[idKey], node); + }); + }); + } + } else { + // 节点之前为选中状态,修改节点以及子节点为未选中状态 + this.checkedRows.delete(row[idKey]); + if (Array.isArray(row.children) && !this.options.checkStrictly) { + row.children.forEach(childNode => { + traversalTree(childNode, (node) => { + this.checkedRows.delete(node[idKey]); + }); + }); + } + } + } + + /** + * 获取所有选中的权限字节点 + * @param {array} treeData 树数据 + * @param {boolean} includeHalfChecked 是否包含半选节点,默认为false + * @returns {array} 选中节点列表 + */ + getCheckedRows (treeData, includeHalfChecked = false) { + let checkedRows = []; + + function traversalCallback (node) { + if (node == null) return; + if (node.__checked || (includeHalfChecked && node.__indeterminate)) { + checkedRows.push(node); + } + } + + if (Array.isArray(treeData) && treeData.length > 0) { + treeData.forEach(permCode => { + traversalTree(permCode, traversalCallback, 'children'); + }); + } + + return checkedRows; + } + + /** + * 设置选中节点 + * @param {array} checkedRows + */ + setCheckedRows (checkedRows) { + this.checkedRows = new Map(); + if (Array.isArray(checkedRows)) { + checkedRows.forEach(item => { + let node = this.dataMap.get(item[this.options.idKey]); + if (node != null) { + this.checkedRows.set(node[this.options.idKey], node); + } + }); + } + } + /** + * 根据id获取表格行 + * @param {*} id + */ + getTableRow (id) { + return this.dataMap.get(id); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/validate.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/validate.js new file mode 100644 index 00000000..5b148e39 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/validate.js @@ -0,0 +1,33 @@ +const pattern = { + mobie: /^((\+?86)|(\(\+86\)))?(13[012356789][0-9]{8}|15[012356789][0-9]{8}|18[02356789][0-9]{8}|147[0-9]{8}|1349[0-9]{7})$/, + english: /^[a-zA-Z]+$/, + englishAndNumber: /^[a-zA-Z0-9]+$/ +} + +/** + * 邮箱 + * @param str + */ +export function isEmail (str) { + return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(str) +} + +/** + * 手机号码 + * @param str + */ +export function isMobile (str) { + return pattern.mobie.test(str) +} + +/** + * 电话号码 + * @param str + */ +export function isPhone (str) { + return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(str) +} + +export default { + pattern +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/widget.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/widget.js new file mode 100644 index 00000000..057f328b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/utils/widget.js @@ -0,0 +1,322 @@ +import { Message } from 'element-ui'; +import { treeDataTranslate } from '@/utils'; + +const DEFAULT_PAGE_SIZE = 10; + +export class DropdownWidget { + /** + * 下拉组件(Select、Cascade、TreeSelect、Tree等) + * @param {function () : Promise} loadDropdownData 下拉数据获取函数 + * @param {Boolean} isTree 是否是树数据 + * @param {String} idKey 键字段字段名 + * @param {String} parentIdKey 父字段字段名 + */ + constructor (loadDropdownData, isTree = false, idKey = 'id', parentIdKey = 'parentId') { + this.loading = false; + this.dirty = true; + this.dropdownList = []; + this.isTree = isTree; + this.idKey = idKey; + this.parentIdKey = parentIdKey; + this.loadDropdownData = loadDropdownData; + this.setDropdownList = this.setDropdownList.bind(this); + this.onVisibleChange = this.onVisibleChange.bind(this); + } + /** + * 重新获取下拉数据 + */ + reloadDropdownData () { + return new Promise((resolve, reject) => { + if (!this.loading) { + if (typeof this.loadDropdownData === 'function') { + this.loading = true; + this.loadDropdownData().then(dataList => { + this.setDropdownList(dataList); + this.loading = false; + this.dirty = false; + resolve(this.dropdownList); + }).catch(e => { + this.setDropdownList([]); + this.loading = false; + reject(this.dropdownList); + }); + } else { + reject(new Error('获取下拉数据失败')); + } + } else { + resolve(this.dropdownList); + } + }); + } + /** + * 下拉框显示或隐藏时调用 + * @param {Boolean} isShow 正在显示或者隐藏 + */ + onVisibleChange (isShow) { + return new Promise((resolve, reject) => { + if (isShow && this.dirty && !this.loading) { + this.reloadDropdownData().then(res => { + resolve(res); + }).catch(e => { + reject(e); + }); + } else { + resolve(this.dropdownList); + } + }); + } + /** + * 设置下拉数据 + * @param {Array} dataList 要显示的下拉数据 + */ + setDropdownList (dataList) { + if (Array.isArray(dataList)) { + this.dropdownList = this.isTree ? treeDataTranslate(dataList, this.idKey, this.parentIdKey) : dataList; + } + } +} + +export class TableWidget { + /** + * 表格组件 + * @param {function (params: Object) : Promise} loadTableData 表数据获取函数 + * @param {function () : Boolean} verifyTableParameter 表数据获取检验函数 + * @param {Boolean} paged 是否支持分页 + * @param {Boolean} rowSelection 是否支持行选择 + * @param {String} orderFieldName 默认排序字段 + * @param {Boolean} ascending 默认排序方式(true为正序,false为倒序) + * @param {String} dateAggregateBy 默认排序字段的日期统计类型 + */ + constructor (loadTableData, verifyTableParameter, paged, rowSelection, orderFieldName, ascending, dateAggregateBy) { + this.currentRow = null; + this.loading = false; + this.oldPage = 0; + this.currentPage = 1; + this.oldPageSize = DEFAULT_PAGE_SIZE; + this.pageSize = DEFAULT_PAGE_SIZE; + this.totalCount = 0; + this.dataList = []; + this.orderInfo = { + fieldName: orderFieldName, + asc: ascending, + dateAggregateBy: dateAggregateBy + }; + this.paged = paged; + this.rowSelection = rowSelection; + this.searchVerify = verifyTableParameter || function () { return true; }; + this.loadTableData = loadTableData || function () { return Promise.resolve(); }; + this.onCurrentPageChange = this.onCurrentPageChange.bind(this); + this.onPageSizeChange = this.onPageSizeChange.bind(this); + this.onSortChange = this.onSortChange.bind(this); + this.getTableIndex = this.getTableIndex.bind(this); + this.currentRowChange = this.currentRowChange.bind(this); + } + /** + * 表格分页变化 + * @param {Integer} newCurrentPage 变化后的显示页面 + */ + onCurrentPageChange (newCurrentPage) { + this.loadTableDataImpl(newCurrentPage, this.pageSize).then(() => { + this.oldPage = this.currentPage = newCurrentPage; + }).catch(() => { + this.currentPage = this.oldPage; + }); + } + /** + * 表格分页每页显示数量变化 + * @param {Integer} newPageSize 变化后的每页显示数量 + */ + onPageSizeChange (newPageSize) { + this.pageSize = newPageSize; + this.currentPage = 1 + this.loadTableDataImpl(1, newPageSize).then(() => { + this.oldPage = this.currentPage; + this.oldPageSize = this.pageSize; + }).catch(e => { + this.currentPage = this.oldPage; + this.pageSize = this.oldPageSize; + }); + } + /** + * 表格排序字段变化 + * @param {String} prop 排序字段的字段名 + * @param {String} order 正序还是倒序 + */ + onSortChange ({ prop, order }) { + this.orderInfo.fieldName = prop; + this.orderInfo.asc = (order === 'ascending'); + this.refreshTable(); + } + /** + * 获取每一行的index信息 + * @param {Integer} index 表格在本页位置 + */ + getTableIndex (index) { + return this.paged ? ((this.currentPage - 1) * this.pageSize + (index + 1)) : (index + 1); + } + /** + * 当前选中行改变 + * @param {Object} currentRow 当前选中行 + * @param {Object} oldRow 老的选中行 + */ + currentRowChange (currentRow, oldRow) { + this.currentRow = currentRow; + } + clearTable () { + this.currentRow = null; + this.oldPage = 0; + this.currentPage = 1; + this.totalCount = 0; + this.dataList = []; + } + /** + * 获取表格数据 + * @param {Integer} pageNum 当前分页 + * @param {Integer} pageSize 每页数量 + * @param {Boolean} reload 是否重新获取数据 + */ + loadTableDataImpl (pageNum, pageSize, reload = false) { + return new Promise((resolve, reject) => { + if (typeof this.loadTableData !== 'function') { + reject(); + } else { + // 如果pageSize和pageNum没有变化,并且不强制刷新 + if (this.paged && !reload && this.oldPage === pageNum && this.oldPageSize === pageSize) { + resolve(); + } else { + let params = {}; + if (this.orderInfo.fieldName != null) params.orderParam = [this.orderInfo]; + if (this.paged) { + params.pageParam = { + pageNum, + pageSize + } + } + this.loading = true; + this.loadTableData(params).then(tableData => { + this.dataList = tableData.dataList; + this.totalCount = tableData.totalCount; + this.loading = false; + resolve(); + }).catch(e => { + this.loading = false; + reject(e); + }); + } + } + }); + } + /** + * 刷新表格数据 + * @param {Boolean} research 是否按照新的查询条件重新查询(调用verify函数) + * @param {Integer} pageNum 当前页面 + */ + refreshTable (research = false, pageNum = undefined, showMsg = false) { + let reload = false; + if (research) { + if (typeof this.searchVerify === 'function' && !this.searchVerify()) return; + reload = true; + } + + if (Number.isInteger(pageNum) && pageNum !== this.currentPage) { + this.loadTableDataImpl(pageNum, this.pageSize, reload).then(res => { + this.oldPage = this.currentPage = pageNum; + if (research && showMsg) Message.success('查询成功'); + }).catch(e => { + this.currentPage = this.oldPage; + }); + } else { + this.loadTableDataImpl(this.currentPage, this.pageSize, true).catch(e => {}); + } + } +} + +export class UploadWidget { + /** + * 上传组件 + * @param {Integer} maxCount 最大上传数量 + */ + constructor (maxCount = 1) { + this.maxCount = maxCount; + this.fileList = []; + this.onFileChange = this.onFileChange.bind(this); + } + /** + * 上传文件列表改变 + * @param {Object} file 改变的文件 + * @param {Array} fileList 改变后的文件列表 + */ + onFileChange (file, fileList) { + if (Array.isArray(fileList) && fileList.length > 0) { + if (this.maxCount === 1) { + this.fileList = [fileList[fileList.length - 1]]; + } else { + this.fileList = fileList; + } + } else { + this.fileList = undefined; + } + return this.fileList; + } +} + +export class ChartWidget { + /** + * 图表组件 + * @param {function (params) : Promise} loadTableData chart数据获取函数 + * @param {function () : Boolean} verifyTableParameter 数据参数检验函数 + * @param {Array} columns 数据列 + */ + constructor (loadTableData, verifyTableParameter, columns) { + this.columns = columns; + this.loading = false; + this.dataEmpty = false; + this.chartData = undefined; + this.chartObject = undefined; + this.dimensionMaps = new Map(); + this.chartSetting = undefined; + this.searchVerify = verifyTableParameter || function () { return true; }; + this.loadTableData = loadTableData || function () { return Promise.resolve(); }; + } + /** + * 获取图表数据 + * @param {Boolean} reload 是否重新获取数据 + */ + loadChartDataImpl (reload = false) { + return new Promise((resolve, reject) => { + if (typeof this.loadTableData !== 'function') { + reject(); + } else { + if (!reload) { + resolve(); + } else { + this.loading = true; + this.loadTableData().then(tableData => { + this.chartData = { + columns: this.columns, + rows: tableData.dataList + } + this.loading = false; + if (this.chartObject) this.chartObject.resize(); + resolve(); + }).catch(e => { + console.error(e); + this.loading = false; + reject(e); + }); + } + } + }); + } + /** + * 刷新图表数据 + * @param {Boolean} research 是否按照新的查询条件重新查询(调用verify函数) + */ + refreshChart (research = false) { + if (research) { + if (typeof this.searchVerify === 'function' && !this.searchVerify()) return; + } + + this.loadChartDataImpl(true).catch(e => {}); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formClass.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formClass.vue new file mode 100644 index 00000000..c9feb190 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formClass.vue @@ -0,0 +1,625 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCourse.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCourse.vue new file mode 100644 index 00000000..e9b4e3c2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCourse.vue @@ -0,0 +1,314 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCourseStats.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCourseStats.vue new file mode 100644 index 00000000..6d828c23 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCourseStats.vue @@ -0,0 +1,339 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateClass.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateClass.vue new file mode 100644 index 00000000..77843aa3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateClass.vue @@ -0,0 +1,292 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateCourse.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateCourse.vue new file mode 100644 index 00000000..d4cc55fc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateCourse.vue @@ -0,0 +1,344 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateStudent.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateStudent.vue new file mode 100644 index 00000000..76f2d493 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formCreateStudent.vue @@ -0,0 +1,469 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditClass.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditClass.vue new file mode 100644 index 00000000..d9b8efd5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditClass.vue @@ -0,0 +1,338 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditClassCourseOrder.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditClassCourseOrder.vue new file mode 100644 index 00000000..ebebe773 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditClassCourseOrder.vue @@ -0,0 +1,200 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditCourse.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditCourse.vue new file mode 100644 index 00000000..af64713d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditCourse.vue @@ -0,0 +1,392 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditStudent.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditStudent.vue new file mode 100644 index 00000000..181f5ade --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formEditStudent.vue @@ -0,0 +1,590 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formSetClassCourse.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formSetClassCourse.vue new file mode 100644 index 00000000..79a7bb60 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formSetClassCourse.vue @@ -0,0 +1,297 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formSetClassStudent.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formSetClassStudent.vue new file mode 100644 index 00000000..7e645f4d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formSetClassStudent.vue @@ -0,0 +1,222 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudent.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudent.vue new file mode 100644 index 00000000..d2b6d358 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudent.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudentActionDetail.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudentActionDetail.vue new file mode 100644 index 00000000..85b8d454 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudentActionDetail.vue @@ -0,0 +1,245 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudentActionStats.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudentActionStats.vue new file mode 100644 index 00000000..b1a29a78 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/generated/formStudentActionStats.vue @@ -0,0 +1,320 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/breadcrumb/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/breadcrumb/index.vue new file mode 100644 index 00000000..286430df --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/breadcrumb/index.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/formModifyPassword/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/formModifyPassword/index.vue new file mode 100644 index 00000000..83ca8024 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/formModifyPassword/index.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/sidebar/menu-item.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/sidebar/menu-item.vue new file mode 100644 index 00000000..3a28543f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/sidebar/menu-item.vue @@ -0,0 +1,59 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/sidebar/sidebar.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/sidebar/sidebar.vue new file mode 100644 index 00000000..0971c0ee --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/sidebar/sidebar.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/tags/tagItem.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/tags/tagItem.vue new file mode 100644 index 00000000..800669e6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/tags/tagItem.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/tags/tagPanel.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/tags/tagPanel.vue new file mode 100644 index 00000000..9378134a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/components/tags/tagPanel.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/index.vue new file mode 100644 index 00000000..f98f9d10 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/layout/index.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/login/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/login/index.vue new file mode 100644 index 00000000..751ec99c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/login/index.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formDictManagement/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formDictManagement/index.vue new file mode 100644 index 00000000..3d9d1b8e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formDictManagement/index.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditDict/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditDict/index.vue new file mode 100644 index 00000000..c290cdd2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditDict/index.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysDataPerm/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysDataPerm/index.vue new file mode 100644 index 00000000..9bfc6079 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysDataPerm/index.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysDept/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysDept/index.vue new file mode 100644 index 00000000..7cc506f5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysDept/index.vue @@ -0,0 +1,201 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysMenu/editColumn.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysMenu/editColumn.vue new file mode 100644 index 00000000..9cccb196 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysMenu/editColumn.vue @@ -0,0 +1,108 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysMenu/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysMenu/index.vue new file mode 100644 index 00000000..93f85f6d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysMenu/index.vue @@ -0,0 +1,282 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPerm/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPerm/index.vue new file mode 100644 index 00000000..85774d38 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPerm/index.vue @@ -0,0 +1,168 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPermCode/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPermCode/index.vue new file mode 100644 index 00000000..863ea1a7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPermCode/index.vue @@ -0,0 +1,221 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPermModule/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPermModule/index.vue new file mode 100644 index 00000000..e7f03829 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysPermModule/index.vue @@ -0,0 +1,184 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysRole/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysRole/index.vue new file mode 100644 index 00000000..9b63ec2c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysRole/index.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysUser/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysUser/index.vue new file mode 100644 index 00000000..d0747ad7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formEditSysUser/index.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formMenuPerm/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formMenuPerm/index.vue new file mode 100644 index 00000000..cb9bf241 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formMenuPerm/index.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSetRoleUsers/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSetRoleUsers/index.vue new file mode 100644 index 00000000..055f2e02 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSetRoleUsers/index.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSetSysDataPermUser/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSetSysDataPermUser/index.vue new file mode 100644 index 00000000..04b5712a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSetSysDataPermUser/index.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysDataPerm/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysDataPerm/index.vue new file mode 100644 index 00000000..2bc0a993 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysDataPerm/index.vue @@ -0,0 +1,479 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysDept/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysDept/index.vue new file mode 100644 index 00000000..0c3a9a0b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysDept/index.vue @@ -0,0 +1,185 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysLoginUser/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysLoginUser/index.vue new file mode 100644 index 00000000..61d66509 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysLoginUser/index.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/formSysColumnMenu.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/formSysColumnMenu.vue new file mode 100644 index 00000000..00387f41 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/formSysColumnMenu.vue @@ -0,0 +1,307 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/formSysMenuPerm.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/formSysMenuPerm.vue new file mode 100644 index 00000000..837ba31c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/formSysMenuPerm.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/index.vue new file mode 100644 index 00000000..2458d6a6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysMenu/index.vue @@ -0,0 +1,241 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysOperationLog/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysOperationLog/index.vue new file mode 100644 index 00000000..587599f1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysOperationLog/index.vue @@ -0,0 +1,215 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPerm/formSysPermDetail.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPerm/formSysPermDetail.vue new file mode 100644 index 00000000..32559c93 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPerm/formSysPermDetail.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPerm/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPerm/index.vue new file mode 100644 index 00000000..ff8503eb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPerm/index.vue @@ -0,0 +1,407 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPermCode/formSysPermCodeDetail.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPermCode/formSysPermCodeDetail.vue new file mode 100644 index 00000000..a2ab35c5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPermCode/formSysPermCodeDetail.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPermCode/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPermCode/index.vue new file mode 100644 index 00000000..bf516bc3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysPermCode/index.vue @@ -0,0 +1,270 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysRole/formSysRolePerm.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysRole/formSysRolePerm.vue new file mode 100644 index 00000000..4ed4a721 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysRole/formSysRolePerm.vue @@ -0,0 +1,254 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysRole/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysRole/index.vue new file mode 100644 index 00000000..cd92fb54 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysRole/index.vue @@ -0,0 +1,473 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysUser/formSysUserPerm.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysUser/formSysUserPerm.vue new file mode 100644 index 00000000..6dc458ba --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysUser/formSysUserPerm.vue @@ -0,0 +1,335 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysUser/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysUser/index.vue new file mode 100644 index 00000000..57e8644c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formSysUser/index.vue @@ -0,0 +1,268 @@ + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formViewSysOperationLog/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formViewSysOperationLog/index.vue new file mode 100644 index 00000000..f9e4137f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/upms/formViewSysOperationLog/index.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/welcome/index.vue b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/welcome/index.vue new file mode 100644 index 00000000..f3b36326 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/src/views/welcome/index.vue @@ -0,0 +1,156 @@ + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/static/.gitkeep b/orange-demo-uaa/orange-demo-multi-service-uaa-web/static/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa-web/vue.config.js b/orange-demo-uaa/orange-demo-multi-service-uaa-web/vue.config.js new file mode 100644 index 00000000..41f99a21 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa-web/vue.config.js @@ -0,0 +1,5 @@ +module.exports = { + devServer: { + port: 8085 + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/.name b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/.name new file mode 100644 index 00000000..eaf507fb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/.name @@ -0,0 +1 @@ +OrangeMultiDemo \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/compiler.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/compiler.xml new file mode 100644 index 00000000..a9080c38 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/compiler.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/encodings.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/encodings.xml new file mode 100644 index 00000000..60efab9c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/encodings.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/inspectionProfiles/Project_Default.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..4a9a13e2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,232 @@ + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml new file mode 100644 index 00000000..6fec8f43 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml new file mode 100644 index 00000000..9eb8596a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__cn_hutool_hutool_all_5_6_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__cn_hutool_hutool_all_5_6_4.xml new file mode 100644 index 00000000..0c7e2a5a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__cn_hutool_hutool_all_5_6_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__cn_jimmyshi_bean_query_1_1_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__cn_jimmyshi_bean_query_1_1_5.xml new file mode 100644 index 00000000..a5f293ec --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__cn_jimmyshi_bean_query_1_1_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_commons_2_2_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_commons_2_2_5_RELEASE.xml new file mode 100644 index 00000000..afe533e4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_commons_2_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_datasource_2_2_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_datasource_2_2_5_RELEASE.xml new file mode 100644 index 00000000..b1120367 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_datasource_2_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_circuitbreaker_sentinel_2_2_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_circuitbreaker_sentinel_2_2_5_RELEASE.xml new file mode 100644 index 00000000..097f6ea1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_circuitbreaker_sentinel_2_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_config_2_2_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_config_2_2_5_RELEASE.xml new file mode 100644 index 00000000..4bc69cb6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_config_2_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_discovery_2_2_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_discovery_2_2_5_RELEASE.xml new file mode 100644 index 00000000..ceec37ed --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_discovery_2_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_sentinel_2_2_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_sentinel_2_2_5_RELEASE.xml new file mode 100644 index 00000000..ac18f727 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_sentinel_2_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_annotation_aspectj_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_annotation_aspectj_1_8_0.xml new file mode 100644 index 00000000..b8c6c617 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_annotation_aspectj_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_api_gateway_adapter_common_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_api_gateway_adapter_common_1_8_0.xml new file mode 100644 index 00000000..80208c9b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_api_gateway_adapter_common_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_client_default_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_client_default_1_8_0.xml new file mode 100644 index 00000000..08c728ad --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_client_default_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_common_default_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_common_default_1_8_0.xml new file mode 100644 index 00000000..aac11661 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_common_default_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_server_default_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_server_default_1_8_0.xml new file mode 100644 index 00000000..d73f56c6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_server_default_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_core_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_core_1_8_0.xml new file mode 100644 index 00000000..2f9caaab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_core_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_extension_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_extension_1_8_0.xml new file mode 100644 index 00000000..f7728cda --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_extension_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_nacos_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_nacos_1_8_0.xml new file mode 100644 index 00000000..7cd9573d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_nacos_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_parameter_flow_control_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_parameter_flow_control_1_8_0.xml new file mode 100644 index 00000000..7e5e6408 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_parameter_flow_control_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_reactor_adapter_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_reactor_adapter_1_8_0.xml new file mode 100644 index 00000000..62649a08 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_reactor_adapter_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_cloud_gateway_adapter_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_cloud_gateway_adapter_1_8_0.xml new file mode 100644 index 00000000..d73c4d36 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_cloud_gateway_adapter_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webflux_adapter_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webflux_adapter_1_8_0.xml new file mode 100644 index 00000000..fa6f4806 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webflux_adapter_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webmvc_adapter_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webmvc_adapter_1_8_0.xml new file mode 100644 index 00000000..09321abe --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webmvc_adapter_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_common_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_common_1_8_0.xml new file mode 100644 index 00000000..d6e21715 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_common_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_simple_http_1_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_simple_http_1_8_0.xml new file mode 100644 index 00000000..5ac350d4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_simple_http_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_druid_1_2_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_druid_1_2_6.xml new file mode 100644 index 00000000..ce62c1c8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_druid_1_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_2_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_2_6.xml new file mode 100644 index 00000000..1c57bfa2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_fastjson_1_2_71.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_fastjson_1_2_71.xml new file mode 100644 index 00000000..9c6df48b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_fastjson_1_2_71.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_fastjson_1_2_76.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_fastjson_1_2_76.xml new file mode 100644 index 00000000..f6a6653d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_fastjson_1_2_76.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_api_1_4_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_api_1_4_1.xml new file mode 100644 index 00000000..b4fe60ae --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_api_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_client_1_4_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_client_1_4_1.xml new file mode 100644 index 00000000..9d1aefa5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_client_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_common_1_4_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_common_1_4_1.xml new file mode 100644 index 00000000..08363d4b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_nacos_nacos_common_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_spring_spring_context_support_1_0_10.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_spring_spring_context_support_1_0_10.xml new file mode 100644 index 00000000..694c1553 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_alibaba_spring_spring_context_support_1_0_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_3_4_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_3_4_2.xml new file mode 100644 index 00000000..2303492c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_3_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_4_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_4_2.xml new file mode 100644 index 00000000..6aa04155 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_4_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_4_2.xml new file mode 100644 index 00000000..7038c58d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_4_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_4_2.xml new file mode 100644 index 00000000..ce4ef9dc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_4_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_4_2.xml new file mode 100644 index 00000000..3a86667f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml new file mode 100644 index 00000000..bc7d7fd8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_4.xml new file mode 100644 index 00000000..b269864f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_11_4.xml new file mode 100644 index 00000000..5470f15e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_11_4.xml new file mode 100644 index 00000000..247505a2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_11_4.xml new file mode 100644 index 00000000..d9c2197f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_4.xml new file mode 100644 index 00000000..5e7e7388 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_4.xml new file mode 100644 index 00000000..acb88ad8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_afterburner_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_afterburner_2_11_4.xml new file mode 100644 index 00000000..2f3a0304 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_afterburner_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_4.xml new file mode 100644 index 00000000..8c681f43 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_8_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_8_8.xml new file mode 100644 index 00000000..eb37ea09 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_8_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_3_0_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_3_0_2.xml new file mode 100644 index 00000000..f9c40b82 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_3_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_3_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_3_2.xml new file mode 100644 index 00000000..7c0b8e6b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_luben_zstd_jni_1_4_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_luben_zstd_jni_1_4_3_1.xml new file mode 100644 index 00000000..dfa7e537 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_luben_zstd_jni_1_4_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_2_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_2_0.xml new file mode 100644 index 00000000..b877688d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_3_0.xml new file mode 100644 index 00000000..f870e68c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_3_0.xml new file mode 100644 index 00000000..64a8fe7e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_04.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_04.xml new file mode 100644 index 00000000..2db74311 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_04.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_06.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_06.xml new file mode 100644 index 00000000..d156c187 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_06.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_annotations_2_0_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_annotations_2_0_8.xml new file mode 100644 index 00000000..2f8ee3d6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_annotations_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_core_2_0_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_core_2_0_8.xml new file mode 100644 index 00000000..fe437afe --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_core_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_micro_spring_boot_starter_2_0_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_micro_spring_boot_starter_2_0_8.xml new file mode 100644 index 00000000..2729ebc1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_micro_spring_boot_starter_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_2_0_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_2_0_8.xml new file mode 100644 index 00000000..7beab6c6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_boot_autoconfigure_2_0_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_boot_autoconfigure_2_0_8.xml new file mode 100644 index 00000000..ee24c313 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_boot_autoconfigure_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_ui_2_0_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_ui_2_0_8.xml new file mode 100644 index 00000000..6143d620 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_github_xiaoymin_knife4j_spring_ui_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml new file mode 100644 index 00000000..1c380d0b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_code_gson_gson_2_8_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_code_gson_gson_2_8_6.xml new file mode 100644 index 00000000..82a9f20a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_code_gson_gson_2_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml new file mode 100644 index 00000000..848cecd7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml new file mode 100644 index 00000000..36e948e2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_guava_29_0_jre.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_guava_29_0_jre.xml new file mode 100644 index 00000000..f349d63d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_guava_29_0_jre.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml new file mode 100644 index 00000000..4e15702e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml new file mode 100644 index 00000000..bacaa456 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2.xml new file mode 100644 index 00000000..e497bcba --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml new file mode 100644 index 00000000..f19f6eb3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_lmax_disruptor_3_4_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_lmax_disruptor_3_4_3.xml new file mode 100644 index 00000000..a74b1d8d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_lmax_disruptor_3_4_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_archaius_archaius_core_0_7_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_archaius_archaius_core_0_7_6.xml new file mode 100644 index 00000000..bd9061c2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_archaius_archaius_core_0_7_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_core_1_5_18.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_core_1_5_18.xml new file mode 100644 index 00000000..588dca0f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_core_1_5_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_javanica_1_5_18.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_javanica_1_5_18.xml new file mode 100644 index 00000000..4abf5770 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_javanica_1_5_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_metrics_event_stream_1_5_18.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_metrics_event_stream_1_5_18.xml new file mode 100644 index 00000000..eb0c81dd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_metrics_event_stream_1_5_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_serialization_1_5_18.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_serialization_1_5_18.xml new file mode 100644 index 00000000..0c801493 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_hystrix_hystrix_serialization_1_5_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_netflix_commons_netflix_commons_util_0_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_netflix_commons_netflix_commons_util_0_3_0.xml new file mode 100644 index 00000000..a1a320cd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_netflix_commons_netflix_commons_util_0_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_netflix_commons_netflix_statistics_0_1_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_netflix_commons_netflix_statistics_0_1_1.xml new file mode 100644 index 00000000..09c6f6e0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_netflix_commons_netflix_statistics_0_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_2_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_2_3_0.xml new file mode 100644 index 00000000..28cf8800 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_core_2_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_core_2_3_0.xml new file mode 100644 index 00000000..eff738de --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_core_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_httpclient_2_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_httpclient_2_3_0.xml new file mode 100644 index 00000000..13122699 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_httpclient_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_loadbalancer_2_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_loadbalancer_2_3_0.xml new file mode 100644 index 00000000..a1ff3f02 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_loadbalancer_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_transport_2_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_transport_2_3_0.xml new file mode 100644 index 00000000..658fe0c2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_ribbon_ribbon_transport_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_servo_servo_core_0_12_21.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_servo_servo_core_0_12_21.xml new file mode 100644 index 00000000..837985aa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_netflix_servo_servo_core_0_12_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_contribs_jersey_apache_client4_1_19_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_contribs_jersey_apache_client4_1_19_1.xml new file mode 100644 index 00000000..2061d8cf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_contribs_jersey_apache_client4_1_19_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_jersey_client_1_19_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_jersey_client_1_19_1.xml new file mode 100644 index 00000000..2b077bc2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_jersey_client_1_19_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_19_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_19_1.xml new file mode 100644 index 00000000..91d65b20 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_19_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_xml_bind_jaxb_core_2_3_0_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_xml_bind_jaxb_core_2_3_0_1.xml new file mode 100644 index 00000000..a5b09e03 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_xml_bind_jaxb_core_2_3_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_xml_bind_jaxb_impl_2_3_0_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_xml_bind_jaxb_impl_2_3_0_1.xml new file mode 100644 index 00000000..30e23683 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_sun_xml_bind_jaxb_impl_2_3_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_thoughtworks_qdox_qdox_2_0_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_thoughtworks_qdox_qdox_2_0_0.xml new file mode 100644 index 00000000..4e5902a8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_thoughtworks_qdox_qdox_2_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml new file mode 100644 index 00000000..b8581a6f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_xuxueli_xxl_job_core_2_2_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_xuxueli_xxl_job_core_2_2_0.xml new file mode 100644 index 00000000..9b1db26c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_xuxueli_xxl_job_core_2_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_5.xml new file mode 100644 index 00000000..97e22912 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml new file mode 100644 index 00000000..687a60e2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_cli_commons_cli_1_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_cli_commons_cli_1_4.xml new file mode 100644 index 00000000..55a1fa86 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_cli_commons_cli_1_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_codec_commons_codec_1_14.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_codec_commons_codec_1_14.xml new file mode 100644 index 00000000..50b8f2b1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_codec_commons_codec_1_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml new file mode 100644 index 00000000..13afda29 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_configuration_commons_configuration_1_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_configuration_commons_configuration_1_8.xml new file mode 100644 index 00000000..772d6fed --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_configuration_commons_configuration_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_3.xml new file mode 100644 index 00000000..f46aa80a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_io_commons_io_2_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_io_commons_io_2_6.xml new file mode 100644 index 00000000..d722698a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_io_commons_io_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml new file mode 100644 index 00000000..2ec83767 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_client_2_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_client_2_3_1.xml new file mode 100644 index 00000000..a3553cab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_client_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_2_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_2_3_1.xml new file mode 100644 index 00000000..40f13831 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_cloud_2_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_cloud_2_3_1.xml new file mode 100644 index 00000000..6f46e42d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_cloud_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_ui_2_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_ui_2_3_1.xml new file mode 100644 index 00000000..872cb613 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_ui_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_client_2_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_client_2_3_1.xml new file mode 100644 index 00000000..3ff39394 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_client_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_server_2_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_server_2_3_1.xml new file mode 100644 index 00000000..c4ebde12 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_server_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_classgraph_classgraph_4_1_7.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_classgraph_classgraph_4_1_7.xml new file mode 100644 index 00000000..5f22bda8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_classgraph_classgraph_4_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_core_10_10_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_core_10_10_1.xml new file mode 100644 index 00000000..efc64b28 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_core_10_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_httpclient_10_10_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_httpclient_10_10_1.xml new file mode 100644 index 00000000..55c5b4df --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_httpclient_10_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_hystrix_10_10_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_hystrix_10_10_1.xml new file mode 100644 index 00000000..11bde67d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_hystrix_10_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_slf4j_10_10_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_slf4j_10_10_1.xml new file mode 100644 index 00000000..2ec2f6ef --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_feign_slf4j_10_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_form_feign_form_3_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_form_feign_form_3_8_0.xml new file mode 100644 index 00000000..05344763 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_form_feign_form_3_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml new file mode 100644 index 00000000..47e101ee --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml new file mode 100644 index 00000000..f25b99b8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_lettuce_lettuce_core_5_3_7_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_lettuce_lettuce_core_5_3_7_RELEASE.xml new file mode 100644 index 00000000..d9b2e92e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_lettuce_lettuce_core_5_3_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_micrometer_micrometer_core_1_5_13.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_micrometer_micrometer_core_1_5_13.xml new file mode 100644 index 00000000..8b15142a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_micrometer_micrometer_core_1_5_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_all_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_all_4_1_63_Final.xml new file mode 100644 index 00000000..0026f782 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_all_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_buffer_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_buffer_4_1_63_Final.xml new file mode 100644 index 00000000..b0a2bbf2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_buffer_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_4_1_63_Final.xml new file mode 100644 index 00000000..d8e04b4d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_63_Final.xml new file mode 100644 index 00000000..148f05f7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_63_Final.xml new file mode 100644 index 00000000..4b1ad160 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_63_Final.xml new file mode 100644 index 00000000..a48e2017 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_63_Final.xml new file mode 100644 index 00000000..14decb13 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_common_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_common_4_1_63_Final.xml new file mode 100644 index 00000000..b9a734da --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_common_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_handler_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_handler_4_1_63_Final.xml new file mode 100644 index 00000000..06037985 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_handler_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_63_Final.xml new file mode 100644 index 00000000..2c65edc5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_resolver_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_resolver_4_1_63_Final.xml new file mode 100644 index 00000000..b4beb6cb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_resolver_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_63_Final.xml new file mode 100644 index 00000000..58371d04 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_4_1_63_Final.xml new file mode 100644 index 00000000..f95d968b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_63_Final.xml new file mode 100644 index 00000000..57fdd287 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_63_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_63_Final.xml new file mode 100644 index 00000000..7108f076 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_63_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_addons_reactor_extra_3_3_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_addons_reactor_extra_3_3_6_RELEASE.xml new file mode 100644 index 00000000..a30f5eed --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_addons_reactor_extra_3_3_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_0_9_19_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_0_9_19_RELEASE.xml new file mode 100644 index 00000000..e2c083aa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_0_9_19_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_reactor_core_3_3_16_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_reactor_core_3_3_16_RELEASE.xml new file mode 100644 index 00000000..4f89fc67 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_projectreactor_reactor_core_3_3_16_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_prometheus_simpleclient_0_5_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_prometheus_simpleclient_0_5_0.xml new file mode 100644 index 00000000..555759b4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_prometheus_simpleclient_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava3_rxjava_3_0_12.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava3_rxjava_3_0_12.xml new file mode 100644 index 00000000..f6b571b1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava3_rxjava_3_0_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava_1_3_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava_1_3_8.xml new file mode 100644 index 00000000..cda742ba --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava_1_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava_reactive_streams_1_2_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava_reactive_streams_1_2_1.xml new file mode 100644 index 00000000..c77c4af8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxjava_reactive_streams_1_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_0_4_9.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_0_4_9.xml new file mode 100644 index 00000000..82613f4c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_0_4_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_contexts_0_4_9.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_contexts_0_4_9.xml new file mode 100644 index 00000000..1ce62ff2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_contexts_0_4_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_servo_0_4_9.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_servo_0_4_9.xml new file mode 100644 index 00000000..f9da5f75 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_reactivex_rxnetty_servo_0_4_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_bean_validators_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_bean_validators_2_10_5.xml new file mode 100644 index 00000000..2c1e8b60 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_bean_validators_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_core_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_core_2_10_5.xml new file mode 100644 index 00000000..bc7cff97 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_core_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_schema_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_schema_2_10_5.xml new file mode 100644 index 00000000..eb978450 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_schema_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spi_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spi_2_10_5.xml new file mode 100644 index 00000000..43344699 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spi_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_10_5.xml new file mode 100644 index 00000000..b2e26d1c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spring_webmvc_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spring_webmvc_2_10_5.xml new file mode 100644 index 00000000..998b395c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_spring_webmvc_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_10_5.xml new file mode 100644 index 00000000..8b4b3276 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_10_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_10_5.xml new file mode 100644 index 00000000..675e8168 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_10_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_20.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_20.xml new file mode 100644 index 00000000..1c4a6212 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_22.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_22.xml new file mode 100644 index 00000000..b4e45d34 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_models_1_5_22.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_models_1_5_22.xml new file mode 100644 index 00000000..9d254f74 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__io_swagger_swagger_models_1_5_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml new file mode 100644 index 00000000..be90656e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml new file mode 100644 index 00000000..cba9dd24 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml new file mode 100644 index 00000000..e66afb95 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml new file mode 100644 index 00000000..04213f73 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml new file mode 100644 index 00000000..ff49512a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_cache_cache_api_1_1_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_cache_cache_api_1_1_1.xml new file mode 100644 index 00000000..bb51cd8a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_cache_cache_api_1_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_inject_javax_inject_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_inject_javax_inject_1.xml new file mode 100644 index 00000000..93cf65ab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_inject_javax_inject_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml new file mode 100644 index 00000000..d05c196b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_ws_rs_jsr311_api_1_1_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_ws_rs_jsr311_api_1_1_1.xml new file mode 100644 index 00000000..a0c4d766 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_ws_rs_jsr311_api_1_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml new file mode 100644 index 00000000..059f88ff --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__joda_time_joda_time_2_9_9.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__joda_time_joda_time_2_9_9.xml new file mode 100644 index 00000000..a468f58d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__joda_time_joda_time_2_9_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__junit_junit_4_13_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__junit_junit_4_13_2.xml new file mode 100644 index 00000000..606c352d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__junit_junit_4_13_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_23.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_23.xml new file mode 100644 index 00000000..dc22c960 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_23.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_22.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_22.xml new file mode 100644 index 00000000..db4968ea --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_22.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_22.xml new file mode 100644 index 00000000..910ad03f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml new file mode 100644 index 00000000..b3d38583 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml new file mode 100644 index 00000000..10830235 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_4.xml new file mode 100644 index 00000000..5871c958 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_compress_1_19.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_compress_1_19.xml new file mode 100644 index 00000000..7c25fef2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_compress_1_19.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_csv_1_8.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_csv_1_8.xml new file mode 100644 index 00000000..c88f83f8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_csv_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_10.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_10.xml new file mode 100644 index 00000000..00de5535 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_client_4_0_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_client_4_0_1.xml new file mode 100644 index 00000000..dd8b5dfb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_client_4_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_framework_4_0_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_framework_4_0_1.xml new file mode 100644 index 00000000..6c7a2111 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_framework_4_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_recipes_4_3_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_recipes_4_3_0.xml new file mode 100644 index 00000000..ed514769 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_curator_curator_recipes_4_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_4.xml new file mode 100644 index 00000000..fe2908cf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml new file mode 100644 index 00000000..63bee0e1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_14.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_14.xml new file mode 100644 index 00000000..427f319c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_14.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_14.xml new file mode 100644 index 00000000..79349954 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_kafka_kafka_clients_2_4_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_kafka_kafka_clients_2_4_0.xml new file mode 100644 index 00000000..8ed333a4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_kafka_kafka_clients_2_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_15_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_15_0.xml new file mode 100644 index 00000000..85ad0142 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_15_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_15_0.xml new file mode 100644 index 00000000..781b34d0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_jul_2_15_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_jul_2_15_0.xml new file mode 100644 index 00000000..9e4c4a39 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_jul_2_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_15_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_15_0.xml new file mode 100644 index 00000000..d97498d8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml new file mode 100644 index 00000000..57e6ac48 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_3_17.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_3_17.xml new file mode 100644 index 00000000..1a446fbf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_3_17.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_17.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_17.xml new file mode 100644 index 00000000..d50f385e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_17.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_4_1_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_4_1_2.xml new file mode 100644 index 00000000..905ca0c9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_17.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_17.xml new file mode 100644 index 00000000..d214d8b8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_17.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_4_1_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_4_1_2.xml new file mode 100644 index 00000000..93d965d9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_skywalking_apm_toolkit_log4j_2_x_7_0_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_skywalking_apm_toolkit_log4j_2_x_7_0_0.xml new file mode 100644 index 00000000..a3926af9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_skywalking_apm_toolkit_log4j_2_x_7_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_45.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_45.xml new file mode 100644 index 00000000..c0f33c9a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_45.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_45.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_45.xml new file mode 100644 index 00000000..1a2d278e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_45.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml new file mode 100644 index 00000000..cb0f76d6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_3_1_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_3_1_0.xml new file mode 100644 index 00000000..0695d4bf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_3_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_zookeeper_zookeeper_3_5_3_beta.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_zookeeper_zookeeper_3_5_3_beta.xml new file mode 100644 index 00000000..e67a9e1c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apache_zookeeper_zookeeper_3_5_3_beta.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml new file mode 100644 index 00000000..f854ab00 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_6.xml new file mode 100644 index 00000000..923f75f6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_6.xml new file mode 100644 index 00000000..d0ca7052 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_assertj_assertj_core_3_16_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_assertj_assertj_core_3_16_1.xml new file mode 100644 index 00000000..89765002 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_assertj_assertj_core_3_16_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml new file mode 100644 index 00000000..5bad7db8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_59.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_59.xml new file mode 100644 index 00000000..74957760 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_59.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_59.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_59.xml new file mode 100644 index 00000000..ad03790f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_59.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_checkerframework_checker_qual_2_11_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_checkerframework_checker_qual_2_11_1.xml new file mode 100644 index 00000000..6d622d2b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_checkerframework_checker_qual_2_11_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_groovy_groovy_2_5_14.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_groovy_groovy_2_5_14.xml new file mode 100644 index 00000000..179c9746 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_groovy_groovy_2_5_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml new file mode 100644 index 00000000..98eb5499 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml new file mode 100644 index 00000000..77f3bad5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_freemarker_freemarker_2_3_31.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_freemarker_freemarker_2_3_31.xml new file mode 100644 index 00000000..6ffac076 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_freemarker_freemarker_2_3_31.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_glassfish_jakarta_el_3_0_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_glassfish_jakarta_el_3_0_3.xml new file mode 100644 index 00000000..ae5020d6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_glassfish_jakarta_el_3_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml new file mode 100644 index 00000000..6b5496ff --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hamcrest_hamcrest_all_1_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hamcrest_hamcrest_all_1_3.xml new file mode 100644 index 00000000..56193163 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hamcrest_hamcrest_all_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml new file mode 100644 index 00000000..6908885f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_2_0_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_2_0_Final.xml new file mode 100644 index 00000000..e45a76ea --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_2_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_javassist_javassist_3_25_0_GA.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_javassist_javassist_3_25_0_GA.xml new file mode 100644 index 00000000..a24c34c9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_javassist_javassist_3_25_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml new file mode 100644 index 00000000..0b76247c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_marshalling_jboss_marshalling_2_0_11_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_marshalling_jboss_marshalling_2_0_11_Final.xml new file mode 100644 index 00000000..5c0fe4da --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_marshalling_jboss_marshalling_2_0_11_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_marshalling_jboss_marshalling_river_2_0_11_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_marshalling_jboss_marshalling_river_2_0_11_Final.xml new file mode 100644 index 00000000..a919bc76 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jboss_marshalling_jboss_marshalling_river_2_0_11_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jodd_jodd_bean_5_1_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jodd_jodd_bean_5_1_6.xml new file mode 100644 index 00000000..38aaf15b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jodd_jodd_bean_5_1_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jodd_jodd_core_5_1_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jodd_jodd_core_5_1_6.xml new file mode 100644 index 00000000..97d32c6d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_jodd_jodd_core_5_1_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_3.xml new file mode 100644 index 00000000..d6a98a92 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_3.xml new file mode 100644 index 00000000..3f50defa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_3.xml new file mode 100644 index 00000000..2331281b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_6_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_6_3.xml new file mode 100644 index 00000000..98e9d9eb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_6_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_3.xml new file mode 100644 index 00000000..0122027c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_3.xml new file mode 100644 index 00000000..8ddd1f89 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_vintage_junit_vintage_engine_5_6_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_vintage_junit_vintage_engine_5_6_3.xml new file mode 100644 index 00000000..65905f00 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_junit_vintage_junit_vintage_engine_5_6_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_latencyutils_LatencyUtils_2_0_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_latencyutils_LatencyUtils_2_0_3.xml new file mode 100644 index 00000000..bf681698 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_latencyutils_LatencyUtils_2_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_lz4_lz4_java_1_6_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_lz4_lz4_java_1_6_0.xml new file mode 100644 index 00000000..f73a838f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_lz4_lz4_java_1_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mapstruct_mapstruct_1_4_2_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mapstruct_mapstruct_1_4_2_Final.xml new file mode 100644 index 00000000..628d1f19 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mapstruct_mapstruct_1_4_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mapstruct_mapstruct_processor_1_4_2_Final.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mapstruct_mapstruct_processor_1_4_2_Final.xml new file mode 100644 index 00000000..1b84b69b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mapstruct_mapstruct_processor_1_4_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mockito_mockito_core_3_3_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mockito_mockito_core_3_3_3.xml new file mode 100644 index 00000000..d2f4afa3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mockito_mockito_core_3_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_3_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_3_3.xml new file mode 100644 index 00000000..6c02a637 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_mybatis_3_5_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_mybatis_3_5_5.xml new file mode 100644 index 00000000..c6b73345 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_mybatis_3_5_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_5.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_5.xml new file mode 100644 index 00000000..eb39604a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_1_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_1_3.xml new file mode 100644 index 00000000..dc3ed940 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_1_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_1_3.xml new file mode 100644 index 00000000..93042377 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml new file mode 100644 index 00000000..af41e3b6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml new file mode 100644 index 00000000..fbc1b163 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml new file mode 100644 index 00000000..0bf8cf2b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_projectlombok_lombok_1_18_20.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_projectlombok_lombok_1_18_20.xml new file mode 100644 index 00000000..138abdca --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_projectlombok_lombok_1_18_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml new file mode 100644 index 00000000..f17253bf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_redisson_redisson_3_15_4.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_redisson_redisson_3_15_4.xml new file mode 100644 index 00000000..7ae70955 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_redisson_redisson_3_15_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_scala_lang_scala_library_2_12_10.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_scala_lang_scala_library_2_12_10.xml new file mode 100644 index 00000000..80b67f7a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_scala_lang_scala_library_2_12_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml new file mode 100644 index 00000000..c4c54d6d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml new file mode 100644 index 00000000..f92b9599 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml new file mode 100644 index 00000000..27229ce3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml new file mode 100644 index 00000000..02b6812c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_3_10_RELEASE.xml new file mode 100644 index 00000000..dfa99aa2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_2_3_10_RELEASE.xml new file mode 100644 index 00000000..21aaf5cf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_3_10_RELEASE.xml new file mode 100644 index 00000000..a753ab9a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_3_10_RELEASE.xml new file mode 100644 index 00000000..1f2fb7c1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_configuration_processor_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_configuration_processor_2_3_10_RELEASE.xml new file mode 100644 index 00000000..dedb9cba --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_configuration_processor_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_3_10_RELEASE.xml new file mode 100644 index 00000000..73cd5818 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_3_10_RELEASE.xml new file mode 100644 index 00000000..f5fcb8b1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_3_10_RELEASE.xml new file mode 100644 index 00000000..b6f4d69c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_cache_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_cache_2_3_10_RELEASE.xml new file mode 100644 index 00000000..2eeca503 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_cache_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_3_10_RELEASE.xml new file mode 100644 index 00000000..8c26ec90 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_freemarker_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_freemarker_2_3_10_RELEASE.xml new file mode 100644 index 00000000..17d44fc8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_freemarker_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_3_10_RELEASE.xml new file mode 100644 index 00000000..b4ff1eb2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_3_10_RELEASE.xml new file mode 100644 index 00000000..69531cff --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_log4j2_2_6_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_log4j2_2_6_1.xml new file mode 100644 index 00000000..c2e8c5fd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_log4j2_2_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_3_10_RELEASE.xml new file mode 100644 index 00000000..c7058921 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_reactor_netty_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_reactor_netty_2_3_10_RELEASE.xml new file mode 100644 index 00000000..1593348c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_reactor_netty_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_3_10_RELEASE.xml new file mode 100644 index 00000000..dec26346 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_3_10_RELEASE.xml new file mode 100644 index 00000000..86d7cc44 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_3_10_RELEASE.xml new file mode 100644 index 00000000..ebe85dec --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_3_10_RELEASE.xml new file mode 100644 index 00000000..8e8d3eeb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_3_10_RELEASE.xml new file mode 100644 index 00000000..02d1cfc8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_3_10_RELEASE.xml new file mode 100644 index 00000000..e051c832 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_webflux_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_webflux_2_3_10_RELEASE.xml new file mode 100644 index 00000000..75385df5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_webflux_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_3_10_RELEASE.xml new file mode 100644 index 00000000..faa97809 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_3_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_3_10_RELEASE.xml new file mode 100644 index 00000000..bebfbc76 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_3_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_commons_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_commons_2_2_6_RELEASE.xml new file mode 100644 index 00000000..42644490 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_commons_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_context_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_context_2_2_6_RELEASE.xml new file mode 100644 index 00000000..7c139ac7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_context_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_gateway_server_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_gateway_server_2_2_6_RELEASE.xml new file mode 100644 index 00000000..8ad6a313 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_gateway_server_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_archaius_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_archaius_2_2_6_RELEASE.xml new file mode 100644 index 00000000..95251e52 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_archaius_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_hystrix_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_hystrix_2_2_6_RELEASE.xml new file mode 100644 index 00000000..54b67a63 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_hystrix_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_ribbon_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_ribbon_2_2_6_RELEASE.xml new file mode 100644 index 00000000..1e8f79d0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_netflix_ribbon_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_openfeign_core_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_openfeign_core_2_2_6_RELEASE.xml new file mode 100644 index 00000000..7ea791c7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_openfeign_core_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_security_2_2_4_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_security_2_2_4_RELEASE.xml new file mode 100644 index 00000000..604d2cb0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_security_2_2_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_2_2_6_RELEASE.xml new file mode 100644 index 00000000..338768f9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_gateway_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_gateway_2_2_6_RELEASE.xml new file mode 100644 index 00000000..a7db09c6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_gateway_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_archaius_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_archaius_2_2_6_RELEASE.xml new file mode 100644 index 00000000..a3340e4d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_archaius_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_hystrix_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_hystrix_2_2_6_RELEASE.xml new file mode 100644 index 00000000..c1f4ec0d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_hystrix_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_ribbon_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_ribbon_2_2_6_RELEASE.xml new file mode 100644 index 00000000..80e8fa78 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_netflix_ribbon_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_oauth2_2_2_4_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_oauth2_2_2_4_RELEASE.xml new file mode 100644 index 00000000..4014d52e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_oauth2_2_2_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_openfeign_2_2_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_openfeign_2_2_6_RELEASE.xml new file mode 100644 index 00000000..12453c47 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_openfeign_2_2_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_security_2_2_4_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_security_2_2_4_RELEASE.xml new file mode 100644 index 00000000..adbd1d9e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_security_2_2_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_3_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_3_9_RELEASE.xml new file mode 100644 index 00000000..5db34bfa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_3_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_3_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_3_9_RELEASE.xml new file mode 100644 index 00000000..938cde23 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_3_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_3_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_3_9_RELEASE.xml new file mode 100644 index 00000000..b46a1f08 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_3_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_kafka_spring_kafka_2_5_12_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_kafka_spring_kafka_2_5_12_RELEASE.xml new file mode 100644 index 00000000..398288fb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_kafka_spring_kafka_2_5_12_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml new file mode 100644 index 00000000..28f52d37 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml new file mode 100644 index 00000000..fa302bfc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_5_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_5_RELEASE.xml new file mode 100644 index 00000000..3077cc07 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_oauth_boot_spring_security_oauth2_autoconfigure_2_1_2_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_oauth_boot_spring_security_oauth2_autoconfigure_2_1_2_RELEASE.xml new file mode 100644 index 00000000..14c0bdcc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_oauth_boot_spring_security_oauth2_autoconfigure_2_1_2_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_oauth_spring_security_oauth2_2_3_8_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_oauth_spring_security_oauth2_2_3_8_RELEASE.xml new file mode 100644 index 00000000..b018b6fd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_oauth_spring_security_oauth2_2_3_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_3_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_3_9_RELEASE.xml new file mode 100644 index 00000000..972b9f28 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_3_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_3_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_3_9_RELEASE.xml new file mode 100644 index 00000000..99796043 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_3_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_3_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_3_9_RELEASE.xml new file mode 100644 index 00000000..c480078b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_3_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_jwt_1_0_10_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_jwt_1_0_10_RELEASE.xml new file mode 100644 index 00000000..231aad8b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_jwt_1_0_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_rsa_1_0_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_rsa_1_0_9_RELEASE.xml new file mode 100644 index 00000000..60972566 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_rsa_1_0_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_3_9_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_3_9_RELEASE.xml new file mode 100644 index 00000000..ab5b79a0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_3_9_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_session_spring_session_core_2_3_3_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_session_spring_session_core_2_3_3_RELEASE.xml new file mode 100644 index 00000000..52e151b5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_session_spring_session_core_2_3_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_session_spring_session_data_redis_2_3_3_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_session_spring_session_data_redis_2_3_3_RELEASE.xml new file mode 100644 index 00000000..cea43a03 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_session_spring_session_data_redis_2_3_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_aop_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_aop_5_2_14_RELEASE.xml new file mode 100644 index 00000000..189a9f04 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_aop_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_beans_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_beans_5_2_14_RELEASE.xml new file mode 100644 index 00000000..ea269c47 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_beans_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_context_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_context_5_2_14_RELEASE.xml new file mode 100644 index 00000000..589dca40 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_context_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_context_support_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_context_support_5_2_14_RELEASE.xml new file mode 100644 index 00000000..b6caca34 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_context_support_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_core_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_core_5_2_14_RELEASE.xml new file mode 100644 index 00000000..a79b5654 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_core_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_expression_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_expression_5_2_14_RELEASE.xml new file mode 100644 index 00000000..b79f7de1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_expression_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_jcl_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_jcl_5_2_14_RELEASE.xml new file mode 100644 index 00000000..c8b513d5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_jcl_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_jdbc_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_jdbc_5_2_14_RELEASE.xml new file mode 100644 index 00000000..d6076d11 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_jdbc_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_messaging_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_messaging_5_2_14_RELEASE.xml new file mode 100644 index 00000000..5c55c7ff --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_messaging_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_oxm_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_oxm_5_2_14_RELEASE.xml new file mode 100644 index 00000000..fe458c56 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_oxm_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_test_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_test_5_2_14_RELEASE.xml new file mode 100644 index 00000000..3573de75 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_test_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_tx_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_tx_5_2_14_RELEASE.xml new file mode 100644 index 00000000..4fb46349 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_tx_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_web_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_web_5_2_14_RELEASE.xml new file mode 100644 index 00000000..50568332 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_web_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_webflux_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_webflux_5_2_14_RELEASE.xml new file mode 100644 index 00000000..fe1b02bc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_webflux_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_14_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_14_RELEASE.xml new file mode 100644 index 00000000..0c3a83b7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_14_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_synchronoss_cloud_nio_multipart_parser_1_1_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_synchronoss_cloud_nio_multipart_parser_1_1_0.xml new file mode 100644 index 00000000..1a8ebe7d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_synchronoss_cloud_nio_multipart_parser_1_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_synchronoss_cloud_nio_stream_storage_1_1_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_synchronoss_cloud_nio_stream_storage_1_1_3.xml new file mode 100644 index 00000000..3897687e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_synchronoss_cloud_nio_stream_storage_1_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml new file mode 100644 index 00000000..7b246ae1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_12_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_12_RELEASE.xml new file mode 100644 index 00000000..ef303d1f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_12_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_12_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_12_RELEASE.xml new file mode 100644 index 00000000..db666506 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_12_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml new file mode 100644 index 00000000..2334aa05 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_7_3.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_7_3.xml new file mode 100644 index 00000000..8da5da89 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_7_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_7_0.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_7_0.xml new file mode 100644 index 00000000..006a8d34 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_7_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_yaml_snakeyaml_1_26.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_yaml_snakeyaml_1_26.xml new file mode 100644 index 00000000..e998675a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__org_yaml_snakeyaml_1_26.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__stax_stax_api_1_0_1.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__stax_stax_api_1_0_1.xml new file mode 100644 index 00000000..0b13335e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/libraries/Maven__stax_stax_api_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/misc.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/misc.xml new file mode 100644 index 00000000..5f1abe38 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/misc.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + Ali-Check + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/modules.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/modules.xml new file mode 100644 index 00000000..9d588c81 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/modules.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/workspace.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/workspace.xml new file mode 100644 index 00000000..7f334435 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/.idea/workspace.xml @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + get + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT * FROM zz_course + + + AND ${inFilterColumn} IN + + '${item}' + + + + + + ORDER BY ${orderBy} + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/GradeMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/GradeMapper.xml new file mode 100644 index 00000000..4f08cdbc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/GradeMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + INSERT INTO zz_grade + (grade_id, + grade_name, + status) + VALUES + + (#{item.gradeId}, + #{item.gradeName}, + #{item.status}) + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/MaterialEditionMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/MaterialEditionMapper.xml new file mode 100644 index 00000000..20fccd91 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/MaterialEditionMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + INSERT INTO zz_material_edition + (edition_id, + edition_name, + status) + VALUES + + (#{item.editionId}, + #{item.editionName}, + #{item.status}) + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/StudentClassMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/StudentClassMapper.xml new file mode 100644 index 00000000..85543da4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/StudentClassMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + INSERT INTO zz_class + (class_id, + class_name, + school_id, + leader_id, + finish_class_hour, + class_level, + create_user_id, + create_time, + status) + VALUES + + (#{item.classId}, + #{item.className}, + #{item.schoolId}, + #{item.leaderId}, + #{item.finishClassHour}, + #{item.classLevel}, + #{item.createUserId}, + #{item.createTime}, + #{item.status}) + + + + + + + + AND zz_class.status = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + AND zz_class.class_name = #{studentClassFilter.className} + + + AND zz_class.school_id = #{studentClassFilter.schoolId} + + + AND zz_class.class_level = #{studentClassFilter.classLevel} + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/StudentMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/StudentMapper.xml new file mode 100644 index 00000000..60384987 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/dao/mapper/StudentMapper.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO zz_student + (student_id, + login_mobile, + student_name, + province_id, + city_id, + district_id, + gender, + birthday, + experience_level, + total_coin, + left_coin, + grade_id, + school_id, + register_time, + status) + VALUES + + (#{item.studentId}, + #{item.loginMobile}, + #{item.studentName}, + #{item.provinceId}, + #{item.cityId}, + #{item.districtId}, + #{item.gender}, + #{item.birthday}, + #{item.experienceLevel}, + #{item.totalCoin}, + #{item.leftCoin}, + #{item.gradeId}, + #{item.schoolId}, + #{item.registerTime}, + #{item.status}) + + + + + + + + + + + + + + AND zz_student.province_id = #{studentFilter.provinceId} + + + AND zz_student.city_id = #{studentFilter.cityId} + + + AND zz_student.district_id = #{studentFilter.districtId} + + + AND zz_student.birthday >= #{studentFilter.birthdayStart} + + + AND zz_student.birthday <= #{studentFilter.birthdayEnd} + + + AND zz_student.grade_id = #{studentFilter.gradeId} + + + AND zz_student.school_id = #{studentFilter.schoolId} + + + AND zz_student.register_time >= #{studentFilter.registerTimeStart} + + + AND zz_student.register_time <= #{studentFilter.registerTimeEnd} + + + AND zz_student.status = #{studentFilter.status} + + + + AND CONCAT(IFNULL(zz_student.login_mobile,''), IFNULL(zz_student.student_name,'')) LIKE #{safeStudentSearchString} + + + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/AreaCode.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/AreaCode.java new file mode 100644 index 00000000..1f2cda81 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/AreaCode.java @@ -0,0 +1,39 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 行政区划实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_area_code") +public class AreaCode { + + /** + * 行政区划主键Id + */ + @TableId(value = "area_id") + private Long areaId; + + /** + * 行政区划名称 + */ + @TableField(value = "area_name") + private String areaName; + + /** + * 行政区划级别 (1: 省级别 2: 市级别 3: 区级别) + */ + @TableField(value = "area_level") + private Integer areaLevel; + + /** + * 父级行政区划Id + */ + @TableField(value = "parent_id") + private Long parentId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/ClassCourse.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/ClassCourse.java new file mode 100644 index 00000000..79f166ff --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/ClassCourse.java @@ -0,0 +1,33 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * ClassCourse实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_class_course") +public class ClassCourse { + + /** + * 班级Id。 + */ + @TableField(value = "class_id") + private Long classId; + + /** + * 课程Id。 + */ + @TableField(value = "course_id") + private Long courseId; + + /** + * 课程顺序(数值越小越靠前)。 + */ + @TableField(value = "course_order") + private Integer courseOrder; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/ClassStudent.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/ClassStudent.java new file mode 100644 index 00000000..3dab89c3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/ClassStudent.java @@ -0,0 +1,27 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * ClassStudent实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_class_student") +public class ClassStudent { + + /** + * 班级Id。 + */ + @TableField(value = "class_id") + private Long classId; + + /** + * 学生Id。 + */ + @TableField(value = "student_id") + private Long studentId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Course.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Course.java new file mode 100644 index 00000000..2f121721 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Course.java @@ -0,0 +1,183 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.courseclassapi.vo.CourseVo; +import com.orangeforms.courseclassapi.constant.CourseDifficult; +import com.orangeforms.application.common.constant.Subject; +import com.orangeforms.common.core.upload.UploadStoreTypeEnum; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.Map; + +/** + * Course实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_course") +public class Course { + + /** + * 主键Id。 + */ + @TableId(value = "course_id") + private Long courseId; + + /** + * 课程名称。 + */ + @TableField(value = "course_name") + private String courseName; + + /** + * 课程价格。 + */ + private BigDecimal price; + + /** + * 课程描述。 + */ + private String description; + + /** + * 课程难度(0: 容易 1: 普通 2: 很难)。 + */ + private Integer difficulty; + + /** + * 年级Id。 + */ + @TableField(value = "grade_id") + private Integer gradeId; + + /** + * 学科Id。 + */ + @TableField(value = "subject_id") + private Integer subjectId; + + /** + * 课时数量。 + */ + @TableField(value = "class_hour") + private Integer classHour; + + /** + * 多张课程图片地址。 + */ + @UploadFlagColumn(storeType = UploadStoreTypeEnum.LOCAL_SYSTEM) + @TableField(value = "picture_url") + private String pictureUrl; + + /** + * 创建用户Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 最后修改时间。 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * price 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private BigDecimal priceStart; + + /** + * price 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private BigDecimal priceEnd; + + /** + * classHour 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private Integer classHourStart; + + /** + * classHour 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private Integer classHourEnd; + + /** + * updateTime 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String updateTimeStart; + + /** + * updateTime 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String updateTimeEnd; + + /** + * courseId 的多对多关联表数据对象。 + */ + @TableField(exist = false) + private ClassCourse classCourse; + + @RelationDict( + masterIdField = "gradeId", + slaveServiceName = "gradeService", + slaveModelClass = Grade.class, + slaveIdField = "gradeId", + slaveNameField = "gradeName") + @TableField(exist = false) + private Map gradeIdDictMap; + + @RelationConstDict( + masterIdField = "difficulty", + constantDictClass = CourseDifficult.class) + @TableField(exist = false) + private Map difficultyDictMap; + + @RelationConstDict( + masterIdField = "subjectId", + constantDictClass = Subject.class) + @TableField(exist = false) + private Map subjectIdDictMap; + + @Mapper + public interface CourseModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param courseVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "classCourse", expression = "java(mapToBean(courseVo.getClassCourse(), com.orangeforms.courseclassservice.model.ClassCourse.class))") + @Override + Course toModel(CourseVo courseVo); + /** + * 转换实体对象到VO对象。 + * + * @param course 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "classCourse", expression = "java(beanToMap(course.getClassCourse(), false))") + @Override + CourseVo fromModel(Course course); + } + public static final CourseModelMapper INSTANCE = Mappers.getMapper(CourseModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Grade.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Grade.java new file mode 100644 index 00000000..484b3864 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Grade.java @@ -0,0 +1,33 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * Grade实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_grade") +public class Grade { + + /** + * 主键Id。 + */ + @TableId(value = "grade_id", type = IdType.AUTO) + private Integer gradeId; + + /** + * 年级名称。 + */ + @TableField(value = "grade_name") + private String gradeName; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + private Integer status; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/MaterialEdition.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/MaterialEdition.java new file mode 100644 index 00000000..9a53696d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/MaterialEdition.java @@ -0,0 +1,32 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * MaterialEdition实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_material_edition") +public class MaterialEdition { + + /** + * 主键Id。 + */ + @TableId(value = "edition_id", type = IdType.AUTO) + private Integer editionId; + + /** + * 教材版本名称。 + */ + @TableField(value = "edition_name") + private String editionName; + + /** + * 是否正在使用(0:不是,1:是)。 + */ + private Integer status; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Student.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Student.java new file mode 100644 index 00000000..575f3ab9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/Student.java @@ -0,0 +1,235 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.courseclassapi.vo.StudentVo; +import com.orangeforms.upmsapi.client.SysDeptClient; +import com.orangeforms.upmsapi.vo.SysDeptVo; +import com.orangeforms.application.common.constant.Gender; +import com.orangeforms.application.common.constant.ExpLevel; +import com.orangeforms.application.common.constant.StudentStatus; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import com.orangeforms.common.core.util.MyCommonUtil; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * Student实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_student") +public class Student { + + /** + * 学生Id。 + */ + @TableId(value = "student_id") + private Long studentId; + + /** + * 登录手机。 + */ + @TableField(value = "login_mobile") + private String loginMobile; + + /** + * 学生姓名。 + */ + @TableField(value = "student_name") + private String studentName; + + /** + * 所在省份Id。 + */ + @TableField(value = "province_id") + private Long provinceId; + + /** + * 所在城市Id。 + */ + @TableField(value = "city_id") + private Long cityId; + + /** + * 区县Id。 + */ + @TableField(value = "district_id") + private Long districtId; + + /** + * 学生性别 (0: 女生 1: 男生)。 + */ + private Integer gender; + + /** + * 生日。 + */ + private Date birthday; + + /** + * 经验等级 (0: 初级 1: 中级 2: 高级 3: 资深)。 + */ + @TableField(value = "experience_level") + private Integer experienceLevel; + + /** + * 总共充值学币数量。 + */ + @TableField(value = "total_coin") + private Integer totalCoin; + + /** + * 可用学币数量。 + */ + @TableField(value = "left_coin") + private Integer leftCoin; + + /** + * 年级Id。 + */ + @TableField(value = "grade_id") + private Integer gradeId; + + /** + * 校区Id。 + */ + @DeptFilterColumn + @TableField(value = "school_id") + private Long schoolId; + + /** + * 注册时间。 + */ + @TableField(value = "register_time") + private Date registerTime; + + /** + * 学生状态 (0: 正常 1: 锁定 2: 注销)。 + */ + private Integer status; + + /** + * birthday 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String birthdayStart; + + /** + * birthday 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String birthdayEnd; + + /** + * registerTime 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String registerTimeStart; + + /** + * registerTime 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String registerTimeEnd; + + /** + * true LIKE搜索字符串。 + */ + @TableField(exist = false) + private String searchString; + + public void setSearchString(String searchString) { + this.searchString = MyCommonUtil.replaceSqlWildcard(searchString); + } + + @RelationDict( + masterIdField = "schoolId", + slaveClientClass = SysDeptClient.class, + slaveModelClass = SysDeptVo.class, + slaveIdField = "deptId", + slaveNameField = "deptName") + @TableField(exist = false) + private Map schoolIdDictMap; + + @RelationDict( + masterIdField = "provinceId", + slaveServiceName = "areaCodeService", + slaveModelClass = AreaCode.class, + slaveIdField = "areaId", + slaveNameField = "areaName") + @TableField(exist = false) + private Map provinceIdDictMap; + + @RelationDict( + masterIdField = "cityId", + slaveServiceName = "areaCodeService", + slaveModelClass = AreaCode.class, + slaveIdField = "areaId", + slaveNameField = "areaName") + @TableField(exist = false) + private Map cityIdDictMap; + + @RelationDict( + masterIdField = "districtId", + slaveServiceName = "areaCodeService", + slaveModelClass = AreaCode.class, + slaveIdField = "areaId", + slaveNameField = "areaName") + @TableField(exist = false) + private Map districtIdDictMap; + + @RelationDict( + masterIdField = "gradeId", + slaveServiceName = "gradeService", + slaveModelClass = Grade.class, + slaveIdField = "gradeId", + slaveNameField = "gradeName") + @TableField(exist = false) + private Map gradeIdDictMap; + + @RelationConstDict( + masterIdField = "gender", + constantDictClass = Gender.class) + @TableField(exist = false) + private Map genderDictMap; + + @RelationConstDict( + masterIdField = "experienceLevel", + constantDictClass = ExpLevel.class) + @TableField(exist = false) + private Map experienceLevelDictMap; + + @RelationConstDict( + masterIdField = "status", + constantDictClass = StudentStatus.class) + @TableField(exist = false) + private Map statusDictMap; + + @Mapper + public interface StudentModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param studentVo 域对象。 + * @return 实体对象。 + */ + @Override + Student toModel(StudentVo studentVo); + /** + * 转换实体对象到VO对象。 + * + * @param student 实体对象。 + * @return 域对象。 + */ + @Override + StudentVo fromModel(Student student); + } + public static final StudentModelMapper INSTANCE = Mappers.getMapper(StudentModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/StudentClass.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/StudentClass.java new file mode 100644 index 00000000..91a9da1f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/model/StudentClass.java @@ -0,0 +1,127 @@ +package com.orangeforms.courseclassservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.courseclassapi.vo.StudentClassVo; +import com.orangeforms.upmsapi.client.SysDeptClient; +import com.orangeforms.upmsapi.vo.SysDeptVo; +import com.orangeforms.courseclassapi.constant.ClassLevel; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * StudentClass实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_class") +public class StudentClass { + + /** + * 班级Id。 + */ + @TableId(value = "class_id") + private Long classId; + + /** + * 班级名称。 + */ + @TableField(value = "class_name") + private String className; + + /** + * 学校Id。 + */ + @DeptFilterColumn + @TableField(value = "school_id") + private Long schoolId; + + /** + * 学生班长Id。 + */ + @TableField(value = "leader_id") + private Long leaderId; + + /** + * 已完成课时数量。 + */ + @TableField(value = "finish_class_hour") + private Integer finishClassHour; + + /** + * 班级级别(0: 初级班 1: 培优班 2: 冲刺提分班 3: 竞赛班)。 + */ + @TableField(value = "class_level") + private Integer classLevel; + + /** + * 创建用户。 + */ + @UserFilterColumn + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 班级创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + private Integer status; + + @RelationDict( + masterIdField = "schoolId", + slaveClientClass = SysDeptClient.class, + slaveModelClass = SysDeptVo.class, + slaveIdField = "deptId", + slaveNameField = "deptName") + @TableField(exist = false) + private Map schoolIdDictMap; + + @RelationDict( + masterIdField = "leaderId", + slaveServiceName = "studentService", + slaveModelClass = Student.class, + slaveIdField = "studentId", + slaveNameField = "studentName") + @TableField(exist = false) + private Map leaderIdDictMap; + + @RelationConstDict( + masterIdField = "classLevel", + constantDictClass = ClassLevel.class) + @TableField(exist = false) + private Map classLevelDictMap; + + @Mapper + public interface StudentClassModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param studentClassVo 域对象。 + * @return 实体对象。 + */ + @Override + StudentClass toModel(StudentClassVo studentClassVo); + /** + * 转换实体对象到VO对象。 + * + * @param studentClass 实体对象。 + * @return 域对象。 + */ + @Override + StudentClassVo fromModel(StudentClass studentClass); + } + public static final StudentClassModelMapper INSTANCE = Mappers.getMapper(StudentClassModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/AreaCodeService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/AreaCodeService.java new file mode 100644 index 00000000..51b44885 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/AreaCodeService.java @@ -0,0 +1,23 @@ +package com.orangeforms.courseclassservice.service; + +import com.orangeforms.courseclassservice.model.AreaCode; +import com.orangeforms.common.core.base.service.IBaseDictService; + +import java.util.Collection; + +/** + * 行政区划的Service接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface AreaCodeService extends IBaseDictService { + + /** + * 根据上级行政区划Id,获取其下级行政区划列表。 + * + * @param parentId 上级行政区划Id。 + * @return 下级行政区划列表。 + */ + Collection getListByParentId(Long parentId); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/CourseService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/CourseService.java new file mode 100644 index 00000000..a53e2a0c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/CourseService.java @@ -0,0 +1,114 @@ +package com.orangeforms.courseclassservice.service; + +import com.orangeforms.courseclassservice.model.*; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 课程数据数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface CourseService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param course 新增对象。 + * @return 返回新增对象。 + */ + Course saveNew(Course course); + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param courseList 新增对象列表。 + */ + void saveNewBatch(List courseList); + + /** + * 更新数据对象。 + * + * @param course 更新的对象。 + * @param originalCourse 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(Course course, Course originalCourse); + + /** + * 删除指定数据。 + * + * @param courseId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long courseId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getCourseList(Course filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getCourseList(String inFilterField, Set inFilterValues, Course filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getCourseList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getCourseListWithRelation(Course filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getCourseList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getCourseListWithRelation( + String inFilterField, Set inFilterValues, Course filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getNotInCourseListByClassId(Long classId, Course filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getCourseListByClassId(Long classId, Course filter, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/GradeService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/GradeService.java new file mode 100644 index 00000000..12738480 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/GradeService.java @@ -0,0 +1,13 @@ +package com.orangeforms.courseclassservice.service; + +import com.orangeforms.common.core.base.service.IBaseDictService; +import com.orangeforms.courseclassservice.model.Grade; + +/** + * 年级字典数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface GradeService extends IBaseDictService { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/StudentClassService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/StudentClassService.java new file mode 100644 index 00000000..d81db1b4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/StudentClassService.java @@ -0,0 +1,145 @@ +package com.orangeforms.courseclassservice.service; + +import com.orangeforms.courseclassservice.model.*; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 班级数据数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface StudentClassService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param studentClass 新增对象。 + * @return 返回新增对象。 + */ + StudentClass saveNew(StudentClass studentClass); + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param studentClassList 新增对象列表。 + */ + void saveNewBatch(List studentClassList); + + /** + * 更新数据对象。 + * + * @param studentClass 更新的对象。 + * @param originalStudentClass 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(StudentClass studentClass, StudentClass originalStudentClass); + + /** + * 删除指定数据。 + * + * @param classId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long classId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentClassListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentClassList(StudentClass filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentClassListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentClassList(String inFilterField, Set inFilterValues, StudentClass filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentClassList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentClassListWithRelation(StudentClass filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentClassList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentClassListWithRelation( + String inFilterField, Set inFilterValues, StudentClass filter, String orderBy); + + /** + * 批量添加多对多关联关系。 + * + * @param classCourseList 多对多关联表对象集合。 + * @param classId 主表Id。 + */ + void addClassCourseList(List classCourseList, Long classId); + + /** + * 更新中间表数据。 + * + * @param classCourse 中间表对象。 + * @return 更新成功与否。 + */ + boolean updateClassCourse(ClassCourse classCourse); + + /** + * 获取中间表数据。 + * + * @param classId 主表Id。 + * @param courseId 从表Id。 + * @return 中间表对象。 + */ + ClassCourse getClassCourse(Long classId, Long courseId); + + /** + * 移除单条多对多关系。 + * + * @param classId 主表Id。 + * @param courseId 从表Id。 + * @return 成功返回true,否则false。 + */ + boolean removeClassCourse(Long classId, Long courseId); + + /** + * 批量添加多对多关联关系。 + * + * @param classStudentList 多对多关联表对象集合。 + * @param classId 主表Id。 + */ + void addClassStudentList(List classStudentList, Long classId); + + /** + * 移除单条多对多关系。 + * + * @param classId 主表Id。 + * @param studentId 从表Id。 + * @return 成功返回true,否则false。 + */ + boolean removeClassStudent(Long classId, Long studentId); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/StudentService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/StudentService.java new file mode 100644 index 00000000..b4cd660c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/StudentService.java @@ -0,0 +1,114 @@ +package com.orangeforms.courseclassservice.service; + +import com.orangeforms.courseclassservice.model.*; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 学生数据数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface StudentService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param student 新增对象。 + * @return 返回新增对象。 + */ + Student saveNew(Student student); + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param studentList 新增对象列表。 + */ + void saveNewBatch(List studentList); + + /** + * 更新数据对象。 + * + * @param student 更新的对象。 + * @param originalStudent 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(Student student, Student originalStudent); + + /** + * 删除指定数据。 + * + * @param studentId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long studentId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentList(Student filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentList(String inFilterField, Set inFilterValues, Student filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentListWithRelation(Student filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentListWithRelation( + String inFilterField, Set inFilterValues, Student filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getNotInStudentListByClassId(Long classId, Student filter, String orderBy); + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentListByClassId(Long classId, Student filter, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/AreaCodeServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/AreaCodeServiceImpl.java new file mode 100644 index 00000000..05fc61f7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/AreaCodeServiceImpl.java @@ -0,0 +1,52 @@ +package com.orangeforms.courseclassservice.service.impl; + +import com.orangeforms.courseclassservice.service.AreaCodeService; +import com.orangeforms.courseclassservice.dao.AreaCodeMapper; +import com.orangeforms.courseclassservice.model.AreaCode; +import com.orangeforms.common.core.cache.MapTreeDictionaryCache; +import com.orangeforms.common.core.base.service.BaseDictService; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.Collection; + +/** + * 行政区划的Service类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Service("areaCodeService") +public class AreaCodeServiceImpl extends BaseDictService implements AreaCodeService { + + @Autowired + private AreaCodeMapper areaCodeMapper; + + public AreaCodeServiceImpl() { + super(); + this.dictionaryCache = MapTreeDictionaryCache.create(AreaCode::getAreaId, AreaCode::getParentId); + } + + @PostConstruct + public void init() { + this.reloadCachedData(true); + } + + @Override + protected BaseDaoMapper mapper() { + return areaCodeMapper; + } + + /** + * 根据上级行政区划Id,获取其下级行政区划列表。 + * + * @param parentId 上级行政区划Id。 + * @return 下级行政区划列表。 + */ + @Override + public Collection getListByParentId(Long parentId) { + return ((MapTreeDictionaryCache) dictionaryCache).getListByParentId(parentId); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/CourseServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/CourseServiceImpl.java new file mode 100644 index 00000000..f9df6d3e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/CourseServiceImpl.java @@ -0,0 +1,249 @@ +package com.orangeforms.courseclassservice.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.courseclassservice.service.*; +import com.orangeforms.courseclassservice.dao.*; +import com.orangeforms.courseclassservice.model.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 课程数据数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("courseService") +public class CourseServiceImpl extends BaseService implements CourseService { + + @Autowired + private CourseMapper courseMapper; + @Autowired + private ClassCourseMapper classCourseMapper; + @Autowired + private GradeService gradeService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return courseMapper; + } + + /** + * 保存新增对象。 + * + * @param course 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Course saveNew(Course course) { + courseMapper.insert(this.buildDefaultValue(course)); + return course; + } + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param courseList 新增对象列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewBatch(List courseList) { + if (CollUtil.isNotEmpty(courseList)) { + courseList.forEach(this::buildDefaultValue); + courseMapper.insertList(courseList); + } + } + + /** + * 更新数据对象。 + * + * @param course 更新的对象。 + * @param originalCourse 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(Course course, Course originalCourse) { + course.setCreateUserId(originalCourse.getCreateUserId()); + course.setCreateTime(originalCourse.getCreateTime()); + course.setUpdateTime(new Date()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(course, course.getCourseId()); + return courseMapper.update(course, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param courseId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long courseId) { + if (courseMapper.deleteById(courseId) == 0) { + return false; + } + // 开始删除与本地多对多父表的关联 + ClassCourse classCourse = new ClassCourse(); + classCourse.setCourseId(courseId); + classCourseMapper.delete(new QueryWrapper<>(classCourse)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getCourseList(Course filter, String orderBy) { + return courseMapper.getCourseList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getCourseList( + String inFilterField, Set inFilterValues, Course filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, Course.class); + return courseMapper.getCourseList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getCourseList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getCourseListWithRelation(Course filter, String orderBy) { + List resultList = courseMapper.getCourseList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getCourseList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getCourseListWithRelation( + String inFilterField, Set inFilterValues, Course filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, Course.class); + List resultList = + courseMapper.getCourseList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getNotInCourseListByClassId(Long classId, Course filter, String orderBy) { + List resultList = + courseMapper.getNotInCourseListByClassId(classId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getCourseListByClassId(Long classId, Course filter, String orderBy) { + List resultList = + courseMapper.getCourseListByClassId(classId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param course 最新数据对象。 + * @param originalCourse 原有数据对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + @Override + public CallResult verifyRelatedData(Course course, Course originalCourse) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(course, originalCourse, Course::getGradeId) + && !gradeService.existId(course.getGradeId())) { + return CallResult.error(String.format(errorMessageFormat, "所属年级")); + } + return CallResult.ok(); + } + + private Course buildDefaultValue(Course course) { + course.setCourseId(idGenerator.nextLongId()); + TokenData tokenData = TokenData.takeFromRequest(); + course.setCreateUserId(tokenData.getUserId()); + Date now = new Date(); + course.setCreateTime(now); + course.setUpdateTime(now); + return course; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/GradeServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/GradeServiceImpl.java new file mode 100644 index 00000000..de295be3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/GradeServiceImpl.java @@ -0,0 +1,50 @@ +package com.orangeforms.courseclassservice.service.impl; + +import com.orangeforms.common.redis.cache.RedisDictionaryCache; +import com.orangeforms.common.core.base.service.BaseDictService; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.courseclassservice.service.GradeService; +import com.orangeforms.courseclassservice.dao.GradeMapper; +import com.orangeforms.courseclassservice.model.Grade; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; + +/** + * 年级字典数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("gradeService") +public class GradeServiceImpl extends BaseDictService implements GradeService { + + @Autowired + private GradeMapper gradeMapper; + @Autowired + private RedissonClient redissonClient; + + public GradeServiceImpl() { + super(); + } + + @PostConstruct + public void init() { + this.dictionaryCache = RedisDictionaryCache.create( + redissonClient, "Grade", Grade.class, Grade::getGradeId); + } + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return gradeMapper; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/StudentClassServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/StudentClassServiceImpl.java new file mode 100644 index 00000000..571d3165 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/StudentClassServiceImpl.java @@ -0,0 +1,341 @@ +package com.orangeforms.courseclassservice.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.courseclassservice.service.*; +import com.orangeforms.courseclassservice.dao.*; +import com.orangeforms.courseclassservice.model.*; +import com.orangeforms.upmsapi.client.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 班级数据数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("studentClassService") +public class StudentClassServiceImpl extends BaseService implements StudentClassService { + + @Autowired + private StudentClassMapper studentClassMapper; + @Autowired + private ClassCourseMapper classCourseMapper; + @Autowired + private ClassStudentMapper classStudentMapper; + @Autowired + private StudentService studentService; + @Autowired + private SysDeptClient sysDeptClient; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return studentClassMapper; + } + + /** + * 保存新增对象。 + * + * @param studentClass 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public StudentClass saveNew(StudentClass studentClass) { + studentClassMapper.insert(this.buildDefaultValue(studentClass)); + return studentClass; + } + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param studentClassList 新增对象列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewBatch(List studentClassList) { + if (CollUtil.isNotEmpty(studentClassList)) { + studentClassList.forEach(this::buildDefaultValue); + studentClassMapper.insertList(studentClassList); + } + } + + /** + * 更新数据对象。 + * + * @param studentClass 更新的对象。 + * @param originalStudentClass 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(StudentClass studentClass, StudentClass originalStudentClass) { + studentClass.setCreateUserId(originalStudentClass.getCreateUserId()); + studentClass.setCreateTime(originalStudentClass.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(studentClass, studentClass.getClassId()); + return studentClassMapper.update(studentClass, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param classId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long classId) { + if (studentClassMapper.deleteById(classId) == 0) { + return false; + } + // 开始删除多对多中间表的关联 + ClassCourse classCourse = new ClassCourse(); + classCourse.setClassId(classId); + classCourseMapper.delete(new QueryWrapper<>(classCourse)); + ClassStudent classStudent = new ClassStudent(); + classStudent.setClassId(classId); + classStudentMapper.delete(new QueryWrapper<>(classStudent)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentClassListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentClassList(StudentClass filter, String orderBy) { + return studentClassMapper.getStudentClassList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentClassListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentClassList( + String inFilterField, Set inFilterValues, StudentClass filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, StudentClass.class); + return studentClassMapper.getStudentClassList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getStudentClassList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentClassListWithRelation(StudentClass filter, String orderBy) { + List resultList = studentClassMapper.getStudentClassList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentClassList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentClassListWithRelation( + String inFilterField, Set inFilterValues, StudentClass filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, StudentClass.class); + List resultList = + studentClassMapper.getStudentClassList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 批量添加多对多关联关系。 + * + * @param classCourseList 多对多关联表对象集合。 + * @param classId 主表Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addClassCourseList(List classCourseList, Long classId) { + for (ClassCourse classCourse : classCourseList) { + classCourse.setClassId(classId); + MyModelUtil.setDefaultValue(classCourse, "courseOrder", 0); + classCourseMapper.insert(classCourse); + } + } + + /** + * 更新中间表数据。 + * + * @param classCourse 中间表对象。 + * @return 更新成功与否。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean updateClassCourse(ClassCourse classCourse) { + ClassCourse filter = new ClassCourse(); + filter.setClassId(classCourse.getClassId()); + filter.setCourseId(classCourse.getCourseId()); + UpdateWrapper uw = + BaseService.createUpdateQueryForNullValue(classCourse, ClassCourse.class); + uw.setEntity(filter); + return classCourseMapper.update(classCourse, uw) > 0; + } + + /** + * 获取中间表数据。 + * + * @param classId 主表Id。 + * @param courseId 从表Id。 + * @return 中间表对象。 + */ + @Override + public ClassCourse getClassCourse(Long classId, Long courseId) { + ClassCourse filter = new ClassCourse(); + filter.setClassId(classId); + filter.setCourseId(courseId); + return classCourseMapper.selectOne(new QueryWrapper<>(filter)); + } + + /** + * 移除单条多对多关系。 + * + * @param classId 主表Id。 + * @param courseId 从表Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeClassCourse(Long classId, Long courseId) { + ClassCourse filter = new ClassCourse(); + filter.setClassId(classId); + filter.setCourseId(courseId); + return classCourseMapper.delete(new QueryWrapper<>(filter)) > 0; + } + + /** + * 批量添加多对多关联关系。 + * + * @param classStudentList 多对多关联表对象集合。 + * @param classId 主表Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addClassStudentList(List classStudentList, Long classId) { + for (ClassStudent classStudent : classStudentList) { + classStudent.setClassId(classId); + classStudentMapper.insert(classStudent); + } + } + + /** + * 移除单条多对多关系。 + * + * @param classId 主表Id。 + * @param studentId 从表Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeClassStudent(Long classId, Long studentId) { + ClassStudent filter = new ClassStudent(); + filter.setClassId(classId); + filter.setStudentId(studentId); + return classStudentMapper.delete(new QueryWrapper<>(filter)) > 0; + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param studentClass 最新数据对象。 + * @param originalStudentClass 原有数据对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + @Override + public CallResult verifyRelatedData(StudentClass studentClass, StudentClass originalStudentClass) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(studentClass, originalStudentClass, StudentClass::getLeaderId) + && !studentService.existId(studentClass.getLeaderId())) { + return CallResult.error(String.format(errorMessageFormat, "班长")); + } + return CallResult.ok(); + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的远程字典数据和多对一主表数据是否都是合法数据。 + * + * @param studentClass 最新数据对象。 + * @param originalStudentClass 原有数据对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + @Override + public CallResult verifyRemoteRelatedData(StudentClass studentClass, StudentClass originalStudentClass) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(studentClass, originalStudentClass, StudentClass::getSchoolId)) { + ResponseResult responseResult = + sysDeptClient.existId(studentClass.getSchoolId()); + if (this.hasErrorOfVerifyRemoteRelatedData(responseResult)) { + return CallResult.error(String.format(errorMessageFormat, "所属校区")); + } + } + return CallResult.ok(); + } + + private StudentClass buildDefaultValue(StudentClass studentClass) { + studentClass.setClassId(idGenerator.nextLongId()); + TokenData tokenData = TokenData.takeFromRequest(); + studentClass.setCreateUserId(tokenData.getUserId()); + studentClass.setCreateTime(new Date()); + studentClass.setStatus(GlobalDeletedFlag.NORMAL); + return studentClass; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/StudentServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/StudentServiceImpl.java new file mode 100644 index 00000000..b49ae046 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/java/com/orangeforms/courseclassservice/service/impl/StudentServiceImpl.java @@ -0,0 +1,282 @@ +package com.orangeforms.courseclassservice.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.application.common.constant.StudentStatus; +import com.orangeforms.courseclassservice.service.*; +import com.orangeforms.courseclassservice.dao.*; +import com.orangeforms.courseclassservice.model.*; +import com.orangeforms.upmsapi.client.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 学生数据数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("studentService") +public class StudentServiceImpl extends BaseService implements StudentService { + + @Autowired + private StudentMapper studentMapper; + @Autowired + private ClassStudentMapper classStudentMapper; + @Autowired + private AreaCodeService areaCodeService; + @Autowired + private GradeService gradeService; + @Autowired + private SysDeptClient sysDeptClient; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return studentMapper; + } + + /** + * 保存新增对象。 + * + * @param student 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Student saveNew(Student student) { + studentMapper.insert(this.buildDefaultValue(student)); + return student; + } + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param studentList 新增对象列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewBatch(List studentList) { + if (CollUtil.isNotEmpty(studentList)) { + studentList.forEach(this::buildDefaultValue); + studentMapper.insertList(studentList); + } + } + + /** + * 更新数据对象。 + * + * @param student 更新的对象。 + * @param originalStudent 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(Student student, Student originalStudent) { + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(student, student.getStudentId()); + return studentMapper.update(student, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param studentId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long studentId) { + if (studentMapper.deleteById(studentId) == 0) { + return false; + } + // 开始删除与本地多对多父表的关联 + ClassStudent classStudent = new ClassStudent(); + classStudent.setStudentId(studentId); + classStudentMapper.delete(new QueryWrapper<>(classStudent)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentList(Student filter, String orderBy) { + return studentMapper.getStudentList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentList( + String inFilterField, Set inFilterValues, Student filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, Student.class); + return studentMapper.getStudentList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getStudentList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentListWithRelation(Student filter, String orderBy) { + List resultList = studentMapper.getStudentList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentListWithRelation( + String inFilterField, Set inFilterValues, Student filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, Student.class); + List resultList = + studentMapper.getStudentList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回不与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getNotInStudentListByClassId(Long classId, Student filter, String orderBy) { + List resultList = + studentMapper.getNotInStudentListByClassId(classId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 在多对多关系中,当前Service的数据表为从表,返回与指定主表主键Id存在对多对关系的列表。 + * + * @param classId 主表的关联键Id。 + * @param filter 从表的过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentListByClassId(Long classId, Student filter, String orderBy) { + List resultList = + studentMapper.getStudentListByClassId(classId, filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + return resultList; + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param student 最新数据对象。 + * @param originalStudent 原有数据对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + @Override + public CallResult verifyRelatedData(Student student, Student originalStudent) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(student, originalStudent, Student::getProvinceId) + && !areaCodeService.existId(student.getProvinceId())) { + return CallResult.error(String.format(errorMessageFormat, "所在省份")); + } + if (this.needToVerify(student, originalStudent, Student::getCityId) + && !areaCodeService.existId(student.getCityId())) { + return CallResult.error(String.format(errorMessageFormat, "所在城市")); + } + if (this.needToVerify(student, originalStudent, Student::getDistrictId) + && !areaCodeService.existId(student.getDistrictId())) { + return CallResult.error(String.format(errorMessageFormat, "所在区县")); + } + if (this.needToVerify(student, originalStudent, Student::getGradeId) + && !gradeService.existId(student.getGradeId())) { + return CallResult.error(String.format(errorMessageFormat, "年级")); + } + return CallResult.ok(); + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的远程字典数据和多对一主表数据是否都是合法数据。 + * + * @param student 最新数据对象。 + * @param originalStudent 原有数据对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + @Override + public CallResult verifyRemoteRelatedData(Student student, Student originalStudent) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(student, originalStudent, Student::getSchoolId)) { + ResponseResult responseResult = + sysDeptClient.existId(student.getSchoolId()); + if (this.hasErrorOfVerifyRemoteRelatedData(responseResult)) { + return CallResult.error(String.format(errorMessageFormat, "所属校区")); + } + } + return CallResult.ok(); + } + + private Student buildDefaultValue(Student student) { + student.setStudentId(idGenerator.nextLongId()); + MyModelUtil.setDefaultValue(student, "totalCoin", 0); + MyModelUtil.setDefaultValue(student, "leftCoin", 0); + MyModelUtil.setDefaultValue(student, "status", StudentStatus.NORMAL); + return student; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/bootstrap.yml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..e256893f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/bootstrap.yml @@ -0,0 +1,30 @@ +spring: + application: + name: course-class + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: localhost:8848 + config: + server-addr: localhost:8848 + file-extension: yaml + # 共享配置文件,排序越高后,优先级越高。 + shared-configs: + - data-id: application-dev.yaml + group: DEFAULT_GROUP + refresh: true + sentinel: + eager: true + datasource: + ds1: + nacos: + server-addr: localhost:8848 + data-id: ${spring.application.name}-dev-sentinel + group-id: DEFAULT_GROUP + data-type: json + # 如果是降级服务,需要改为degrade + rule-type: flow + main: + allow-bean-definition-overriding: true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/log4j2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/log4j2.xml new file mode 100644 index 00000000..4de16038 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/log4j2.xml @@ -0,0 +1,79 @@ + + + + + + + + + + ./zzlogs/course-class + + ./zzlogs/course-class/backup + + info + + + + + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] T:[%X{traceId}] S:[%X{sessionId}] U:[%X{userId}] [%t] ==> [%traceId] %msg%n + + + 31 + + 20M + + + + + + + localhost:9092 + 10000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/template/views/print_error.ftl b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/template/views/print_error.ftl new file mode 100644 index 00000000..af8b36a7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class-service/src/main/resources/template/views/print_error.ftl @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
天津公安警官职业学院2017—2018学年度第一学期课程表
班 级星期一星期二星期三星期四星期五
第1节第2节第3节第1节第2节第3节第1节第2节第3节第1节第2节第3节第1节第2节
16 级 刑 事 技 术 班 课程刑法自习刑事图像民 法(选修)派出所工作刑事图像法医学派出所工作法医学国内安全保卫体能自习刑事技术总论刑法
自习自习自习
教师曾岚陈磊邵刚杨丽伟陈磊于辉杨丽伟于辉朱学强张付海王 伟(刑技)曾岚
   
教室206206206206206206206206206操场206206
   
16 级 刑 事 侦 查 课程自习侦查措施经济案件侦查公安信息化公安信息化刑法体能自习痕迹检验刑法国内安全保卫经济案件侦查痕迹检验民 法(选修)
侦查措施
教师徐宏涛张静赵晓松赵晓松王骏强张付海郭海川王骏强朱学强张静郭海川邵刚
徐宏涛
教室2022023号机房3号机房202操场202202202202202202
16 级 治 安 管 理 班 课程刑事技术体能刑事技术治安秩序管理刑事侦查概论刑法群众工作与纠纷调解群众工作与纠纷调解公共关系(选修)刑事侦查概论刑法自习自习自习
q
教师郭海川 韩易浦张付海郭海川 韩易浦翟政亮邵妍薛强刘晓鹏刘晓鹏尚欣邵妍薛强
翟政亮
教室218操场218218218218218218218218218
16 网 络 安 全 监 察 1 班课程应用写作数据库系统应用周二中午:计算机安全管理及实用技术刑事诉讼法周一中午:数据库系统应用民法体育VB语言程序设计选修VB语言程序设计刑事诉讼法选修应用写作犯罪心理
民法犯罪心理
教师关利杨斌赵晓松王伟杨斌李静程军赵伟赵伟王伟关利张学林
李静张学林
教室东阶梯2号机房主楼2011012号机房101操场3号机房3号机房101东阶梯主楼201
主楼201
注:1、课程一栏中有两科次的,上面的课程单周上课,下面的课程双周上课。2、每天上课时间:上午第1节8:30至9:55;第2节10:15至11:40;中午上课时间12:30至13:55;下午第3节14:00至15:25。
+ + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class.iml new file mode 100644 index 00000000..851d7040 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/course-class.iml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/pom.xml new file mode 100644 index 00000000..db06ff91 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/course-class/pom.xml @@ -0,0 +1,18 @@ + + + + com.orangeforms + application + 1.0.0 + + 4.0.0 + + course-class + pom + + + course-class-api + course-class-service + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/gateway.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/gateway.iml new file mode 100644 index 00000000..77e6e94e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/gateway.iml @@ -0,0 +1,286 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/pom.xml new file mode 100644 index 00000000..e301ed9a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/pom.xml @@ -0,0 +1,89 @@ + + + + com.orangeforms + application + 1.0.0 + + 4.0.0 + + gateway + 1.0.0 + gateway + jar + + + + + com.github.xiaoymin + knife4j-spring-ui + ${knife4j.version} + + + io.springfox + springfox-swagger2 + ${springfox.version} + + + io.swagger + swagger-models + + + + + io.swagger + swagger-models + ${zz-swagger.version} + + + io.springfox + springfox-bean-validators + ${springfox.version} + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + com.alibaba.csp + sentinel-spring-cloud-gateway-adapter + + + com.orangeforms + common-redis + 1.0.0 + + + + com.orangeforms + common-core + 1.0.0 + + + mysql-connector-java + mysql + + + druid-spring-boot-starter + com.alibaba + + + spring-boot-starter-web + org.springframework.boot + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/GatewayApplication.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/GatewayApplication.java new file mode 100644 index 00000000..43c94230 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/GatewayApplication.java @@ -0,0 +1,58 @@ +package com.orangeforms.gateway; + +import com.orangeforms.common.core.util.ApplicationContextHolder; +import com.orangeforms.gateway.filter.AuthenticationPostFilter; +import com.orangeforms.gateway.filter.AuthenticationPreFilter; +import com.orangeforms.gateway.filter.RequestLogFilter; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cloud.client.SpringCloudApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 网关服务启动类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) +@SpringCloudApplication +public class GatewayApplication { + + @RestController + @RequestMapping("/fallback") + static class FallbackController { + @GetMapping("") + public String fallback() { + return "GATEWAY FALLBACK!!!"; + } + } + + @Bean + public AuthenticationPreFilter authenticationPreFilter() { + return new AuthenticationPreFilter(); + } + + @Bean + public AuthenticationPostFilter authenticationPostFilter() { + return new AuthenticationPostFilter(); + } + + @Bean + public RequestLogFilter requestLogPreFilter() { + return new RequestLogFilter(); + } + + @Bean + ApplicationContextHolder applicationContextHolder() { + return new ApplicationContextHolder(); + } + + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class, args); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/ApplicationConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/ApplicationConfig.java new file mode 100644 index 00000000..ad2fa3ff --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/ApplicationConfig.java @@ -0,0 +1,55 @@ +package com.orangeforms.gateway.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import java.util.Set; + +/** + * 网关业务配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@RefreshScope +@Configuration +@ConfigurationProperties(prefix = "application") +public class ApplicationConfig { + + /** + * token加密用的密钥,该值的长度最少10个字符(过短会报错)。 + */ + private String tokenSigningKey; + /** + * 客户端或者浏览器在提交http请求时,携带token的header name,如 Authorization + */ + private String tokenHeaderKey; + /** + * 令牌Token在被刷新之后,服务器Http应答的header name,客户端或浏览器需要保存并替换原有的token,用于下次发送时携带 + */ + private String refreshedTokenHeaderKey; + /** + * 令牌的过期时间,单位毫秒 + */ + private Long expiration; + /** + * 授信ip列表,没有填写表示全部信任。多个ip之间逗号分隔,如: http://10.10.10.1:8080,http://10.10.10.2:8080 + */ + private String credentialIpList; + /** + * Session会话和用户权限在Redis中的过期时间(秒)。 + * 缺省值是 one day + */ + private int sessionExpiredSeconds = 86400; + /** + * 基于完全等于(equals)判定规则的白名单地址集合,过滤效率高于whitelistUrlPattern。 + */ + private Set whitelistUrl; + /** + * 基于Ant Pattern模式判定规则的白名单地址集合。如:/aa/**。 + */ + private Set whitelistUrlPattern; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/CorsConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/CorsConfig.java new file mode 100644 index 00000000..fcc4b41c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/CorsConfig.java @@ -0,0 +1,39 @@ +package com.orangeforms.gateway.config; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.reactive.CorsWebFilter; +import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; +import org.springframework.web.util.pattern.PathPatternParser; + +/** + * 跨域信任配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class CorsConfig { + + @Bean + public CorsWebFilter corsFilter(ApplicationConfig appConfig) { + UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(new PathPatternParser()); + CorsConfiguration config = new CorsConfiguration(); + if (StringUtils.isNotBlank(appConfig.getCredentialIpList())) { + String[] credentialIpList = StringUtils.split(appConfig.getCredentialIpList(), ","); + if (credentialIpList.length > 0) { + for (String ip : credentialIpList) { + config.addAllowedOrigin(ip); + } + } + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + config.addExposedHeader(appConfig.getRefreshedTokenHeaderKey()); + config.setAllowCredentials(true); + configSource.registerCorsConfiguration("/**", config); + } + return new CorsWebFilter(configSource); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/FilterConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/FilterConfig.java new file mode 100644 index 00000000..15c27fd9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/FilterConfig.java @@ -0,0 +1,30 @@ +package com.orangeforms.gateway.config; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.servlet.Filter; +import java.nio.charset.StandardCharsets; + +/** + * Web通用过滤器配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class FilterConfig { + + @Bean + public FilterRegistrationBean characterEncodingFilterRegistration() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>( + new org.springframework.web.filter.CharacterEncodingFilter()); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.addInitParameter("encoding", StandardCharsets.UTF_8.name()); + // forceEncoding强制response也被编码,另外即使request中已经设置encoding,forceEncoding也会重新设置 + filterRegistrationBean.addInitParameter("forceEncoding", "true"); + filterRegistrationBean.setAsyncSupported(true); + return filterRegistrationBean; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/SentinelConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/SentinelConfig.java new file mode 100644 index 00000000..ddd9f6c1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/SentinelConfig.java @@ -0,0 +1,47 @@ +package com.orangeforms.gateway.config; + +import com.alibaba.csp.sentinel.adapter.gateway.sc.SentinelGatewayFilter; +import com.alibaba.csp.sentinel.adapter.gateway.sc.exception.SentinelGatewayBlockExceptionHandler; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.http.codec.ServerCodecConfigurer; +import org.springframework.web.reactive.result.view.ViewResolver; + +import java.util.*; + +/** + * Spring Cloud Gateway的Sentinel流控配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class SentinelConfig { + + private final List viewResolvers; + private final ServerCodecConfigurer serverCodecConfigurer; + + public SentinelConfig( + ObjectProvider> viewResolversProvider, + ServerCodecConfigurer serverCodecConfigurer) { + this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList); + this.serverCodecConfigurer = serverCodecConfigurer; + } + + @Bean + @Order(Ordered.HIGHEST_PRECEDENCE) + public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() { + // Register the block exception handler for Spring Cloud Gateway. + return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer); + } + + @Bean + @Order(Ordered.HIGHEST_PRECEDENCE) + public GlobalFilter sentinelGatewayFilter() { + return new SentinelGatewayFilter(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/SwaggerResourceConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/SwaggerResourceConfig.java new file mode 100644 index 00000000..2c1f8e9f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/config/SwaggerResourceConfig.java @@ -0,0 +1,52 @@ +package com.orangeforms.gateway.config; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.gateway.config.GatewayProperties; +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.support.NameUtils; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; +import springfox.documentation.swagger.web.SwaggerResource; +import springfox.documentation.swagger.web.SwaggerResourcesProvider; + +import java.util.ArrayList; +import java.util.List; + +/*** + * 返回Swagger UI需要读取的资源数据,这里是微服务的路由数据。 + * + * @author Knife4j Team。 + * @date 2020-08-08 + */ +@Slf4j +@Component +@Primary +@AllArgsConstructor +public class SwaggerResourceConfig implements SwaggerResourcesProvider { + + private final RouteLocator routeLocator; + private final GatewayProperties gatewayProperties; + + @Override + public List get() { + List resources = new ArrayList<>(); + List routes = new ArrayList<>(); + routeLocator.getRoutes().subscribe(route -> routes.add(route.getId())); + gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId())) + .forEach(route -> route.getPredicates().stream() + .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName())) + .forEach(predicateDefinition -> resources.add(swaggerResource(route.getId(), + predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0") + .replace("**", "v2/api-docs"))))); + return resources; + } + + private SwaggerResource swaggerResource(String name, String location) { + SwaggerResource swaggerResource = new SwaggerResource(); + swaggerResource.setName(name); + swaggerResource.setLocation(location); + swaggerResource.setSwaggerVersion("2.0"); + return swaggerResource; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/constant/GatewayConstant.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/constant/GatewayConstant.java new file mode 100644 index 00000000..9de3c94d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/constant/GatewayConstant.java @@ -0,0 +1,46 @@ +package com.orangeforms.gateway.constant; + +/** + * 网关业务相关的常量对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class GatewayConstant { + + /** + * 请求进入网关的开始时间。 + */ + public static final String START_TIME_ATTRIBUTE = "startTime"; + + /** + * 登录URL。 + */ + public static final String ADMIN_LOGIN_URL = "/admin/upms/login/doLogin"; + + /** + * UAA登录URL。 + */ + public static final String ADMIN_LOGIN_BY_UAA_URL = "/admin/upms/login/doLoginByUaa"; + + /** + * 获取UAA登录验证的重定向URL。 + */ + public static final String GET_UAA_LOGIN_URL = "/admin/upms/login/getUaaLoginUrl"; + + /** + * 登出URL。 + */ + public static final String ADMIN_LOGOUT_URL = "/admin/upms/login/doLogout"; + + /** + * sessionId的键名称。 + */ + public static final String SESSION_ID_KEY_NAME = "sessionId"; + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private GatewayConstant() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/AuthenticationPostFilter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/AuthenticationPostFilter.java new file mode 100644 index 00000000..7eba4707 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/AuthenticationPostFilter.java @@ -0,0 +1,233 @@ +package com.orangeforms.gateway.filter; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.util.JwtUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.util.RedisKeyUtil; +import com.orangeforms.gateway.config.ApplicationConfig; +import com.orangeforms.gateway.constant.GatewayConstant; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.reactivestreams.Publisher; +import org.redisson.api.RBucket; +import org.redisson.api.RSet; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.http.server.reactive.ServerHttpResponseDecorator; +import org.springframework.lang.NonNull; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 全局后处理过滤器。主要用于将用户的会话信息存到缓存服务器,以及在登出时清除缓存中的会话数据。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class AuthenticationPostFilter implements GlobalFilter, Ordered { + + @Autowired + private ApplicationConfig appConfig; + @Autowired + private RedissonClient redissonClient; + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest originalRequest = exchange.getRequest(); + ServerHttpResponse originalResponse = exchange.getResponse(); + String refreshedToken = + (String) exchange.getAttributes().get(appConfig.getRefreshedTokenHeaderKey()); + if (refreshedToken != null) { + originalResponse.getHeaders().add(appConfig.getRefreshedTokenHeaderKey(), refreshedToken); + } + if (!originalRequest.getURI().getPath().equals(GatewayConstant.ADMIN_LOGIN_URL) + && !originalRequest.getURI().getPath().equals(GatewayConstant.ADMIN_LOGIN_BY_UAA_URL) + && !originalRequest.getURI().getPath().equals(GatewayConstant.ADMIN_LOGOUT_URL)) { + return chain.filter(exchange); + } + DataBufferFactory bufferFactory = originalResponse.bufferFactory(); + ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { + @SuppressWarnings("unchecked") + @Override + public Mono writeWith(@NonNull Publisher bodyData) { + StringBuilder sb = new StringBuilder(128); + sb.append("url: ") + .append(originalRequest.getURI().getPath()) + .append(" -- status: ") + .append(getStatusCode()); + if (getStatusCode() != HttpStatus.OK) { + log.error(sb.toString()); + return super.writeWith(bodyData); + } + if (!(bodyData instanceof Flux)) { + return super.writeWith(bodyData); + } + Flux fluxBody = (Flux) bodyData; + return super.writeWith(fluxBody.buffer().map(dataBuffers -> { + // 读取完整的服务应答消息体。 + String responseBody = readResponseBody(dataBuffers); + originalResponse.getHeaders().setContentType(MediaType.APPLICATION_JSON); + // 先判断body中是否包含数据。 + if (StringUtils.isBlank(responseBody)) { + sb.append(" -- Internal Error, no RESPONSE DATA returns !!"); + log.error(sb.toString()); + String errorMessage = "后台服务没有任何数据返回!"; + responseBody = JSON.toJSONString( + ResponseResult.error(ErrorCodeEnum.SERVER_INTERNAL_ERROR, errorMessage)); + byte[] uppedContent = new String(responseBody.getBytes(), StandardCharsets.UTF_8).getBytes(); + originalResponse.getHeaders().setContentLength(uppedContent.length); + return bufferFactory.wrap(uppedContent); + } + // 处理登录和登出请求。 + String result; + try { + result = doProcess(exchange, responseBody); + } catch (Exception e) { + setStatusCode(HttpStatus.BAD_REQUEST); + String errorMsg = "Server Internal Error"; + sb.append(errorMsg); + log.error(sb.toString(), e); + result = JSON.toJSONString( + ResponseResult.error(ErrorCodeEnum.SERVER_INTERNAL_ERROR, errorMsg)); + } + byte[] uppedContent = new String(result.getBytes(), StandardCharsets.UTF_8).getBytes(); + originalResponse.getHeaders().setContentLength(uppedContent.length); + return bufferFactory.wrap(uppedContent); + })); + } + }; + return chain.filter(exchange.mutate().response(decoratedResponse).build()); + } + + /** + * 返回过滤器在在调用链上的优先级。 + * + * @return 数值越低,优先级越高。 + */ + @Override + public int getOrder() { + // -1 is response write filter, must be called before that + return -2; + } + + private String readResponseBody(List dataBuffers) { + int dataCount = 0; + for (DataBuffer dataBuffer : dataBuffers) { + dataCount += dataBuffer.readableByteCount(); + } + byte[] allBytes = new byte[dataCount]; + int offset = 0; + for (DataBuffer dataBuffer : dataBuffers) { + int length = dataBuffer.readableByteCount(); + dataBuffer.read(allBytes, offset, length); + DataBufferUtils.release(dataBuffer); + offset += length; + } + return new String(allBytes, StandardCharsets.UTF_8); + } + + @SuppressWarnings("unchecked") + private String doProcess(ServerWebExchange exchange, String responseBody) { + // 这个解析出来的就是upms登录或登出接口返回的ResponseResult对象。 + ServerHttpRequest originalRequest = exchange.getRequest(); + if (originalRequest.getURI().getPath().equals(GatewayConstant.ADMIN_LOGIN_BY_UAA_URL) + || originalRequest.getURI().getPath().equals(GatewayConstant.ADMIN_LOGIN_URL)) { + // 处理登录服务的消息体,同时重构该消息体,并最终返回前端。 + ResponseResult result = processLoginResponse(responseBody); + return JSON.toJSONString(result); + } + if (originalRequest.getURI().getPath().equals(GatewayConstant.ADMIN_LOGOUT_URL)) { + ResponseResult result = JSON.parseObject(responseBody, ResponseResult.class); + if (result.isSuccess()) { + String sessionId = (String) exchange.getAttributes().get(GatewayConstant.SESSION_ID_KEY_NAME); + redissonClient.getBucket(RedisKeyUtil.makeSessionIdKey(sessionId)).deleteAsync(); + redissonClient.getSet(RedisKeyUtil.makeSessionPermIdKey(sessionId)).deleteAsync(); + } + return responseBody; + } + return null; + } + + @SuppressWarnings("unchecked") + private ResponseResult processLoginResponse(String responseBody) { + ResponseResult responseResult = JSON.parseObject(responseBody, ResponseResult.class); + if (!responseResult.isSuccess()) { + return responseResult; + } + JSONObject loginData = responseResult.getData(); + // 1. 先验证登陆服务器返回的应答数据是否正确 + JSONObject tokenData = loginData.getJSONObject(TokenData.REQUEST_ATTRIBUTE_NAME); + ErrorCodeEnum errorCode = ErrorCodeEnum.SERVER_INTERNAL_ERROR; + if (tokenData == null) { + return ResponseResult.error(errorCode, "内部错误,用户登录令牌对象没有正确返回!"); + } + Long userId = tokenData.getLong("userId"); + if (MyCommonUtil.isBlankOrNull(userId)) { + return ResponseResult.error(errorCode, "内部错误,用户Id没有正确返回!"); + } + Boolean isAdmin = tokenData.getBoolean("isAdmin"); + if (isAdmin == null) { + return ResponseResult.error(errorCode, "内部错误,是否为管理员标记没有正确返回!"); + } + String showName = tokenData.getString("showName"); + if (StringUtils.isBlank(showName)) { + return ResponseResult.error(errorCode, "内部错误,用户显示名没有正确返回!"); + } + String loginName = tokenData.getString("loginName"); + if (StringUtils.isBlank(loginName)) { + return ResponseResult.error(errorCode, "内部错误,用户登录名没有正确返回!"); + } + String sessionId = tokenData.getString("sessionId"); + if (StringUtils.isBlank(sessionId)) { + return ResponseResult.error(errorCode, "内部错误,SESSION_ID没有正确返回!"); + } + // 2. 生成sessionId并存放到token中 + Map claims = new HashMap<>(1); + claims.put(GatewayConstant.SESSION_ID_KEY_NAME, sessionId); + String token = JwtUtil.generateToken(claims, appConfig.getExpiration(), appConfig.getTokenSigningKey()); + // 3. 更新缓存 + String sessionIdKey = RedisKeyUtil.makeSessionIdKey(sessionId); + String sessionData = JSON.toJSONString(tokenData, SerializerFeature.WriteNonStringValueAsString); + RBucket bucket = redissonClient.getBucket(sessionIdKey); + bucket.set(sessionData); + bucket.expire(appConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS); + // 3.2 sessionId -> permList 是set结构的缓存 + JSONArray permSet = loginData.getJSONArray("permSet"); + if (permSet != null) { + String sessionPermKey = RedisKeyUtil.makeSessionPermIdKey(sessionId); + RSet redisPermSet = redissonClient.getSet(sessionPermKey); + redisPermSet.addAll(permSet.stream().map(Object::toString).collect(Collectors.toSet())); + redisPermSet.expire(appConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS); + } + // 4. 构造返回给用户的应答,将加密后的令牌返回给前端。 + loginData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token); + // 5. 这里需要移除权限资源集合的数据,验证在后端进行,无需返回给前端。 + loginData.remove("permSet"); + return ResponseResult.success(loginData); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/AuthenticationPreFilter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/AuthenticationPreFilter.java new file mode 100644 index 00000000..02b70bed --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/AuthenticationPreFilter.java @@ -0,0 +1,190 @@ +package com.orangeforms.gateway.filter; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.util.JwtUtil; +import com.orangeforms.common.core.util.RedisKeyUtil; +import com.orangeforms.common.core.util.IpUtil; +import com.orangeforms.gateway.config.ApplicationConfig; +import com.orangeforms.gateway.constant.GatewayConstant; +import io.jsonwebtoken.Claims; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.util.AntPathMatcher; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * 全局前处理过滤器。主要用于用户操作权限验证。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class AuthenticationPreFilter implements GlobalFilter, Ordered { + + @Autowired + private ApplicationConfig appConfig; + @Autowired + private RedissonClient redissonClient; + /** + * Ant Pattern模式的白名单地址匹配器。 + */ + private final AntPathMatcher antMatcher = new AntPathMatcher(); + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + ServerHttpResponse response = exchange.getResponse(); + String url = request.getURI().getPath(); + // 判断是否为白名单请求,以及一些内置不需要验证的请求。(登录请求也包含其中)。 + if (this.shouldNotFilter(url)) { + return chain.filter(exchange); + } + String token = this.getTokenFromRequest(request); + Claims c = JwtUtil.parseToken(token, appConfig.getTokenSigningKey()); + if (JwtUtil.isNullOrExpired(c)) { + log.warn("EXPIRED request [{}] from REMOTE-IP [{}].", url, IpUtil.getRemoteIpAddress(request)); + response.setStatusCode(HttpStatus.UNAUTHORIZED); + response.getHeaders().setContentType(MediaType.APPLICATION_JSON); + byte[] responseBody = JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.UNAUTHORIZED_LOGIN, + "用户登录已过期或尚未登录,请重新登录!")).getBytes(StandardCharsets.UTF_8); + return response.writeWith(Flux.just(response.bufferFactory().wrap(responseBody))); + } + // 这里判断是否需要定时刷新token + if (JwtUtil.needToRefresh(c)) { + exchange.getAttributes().put(appConfig.getRefreshedTokenHeaderKey(), + JwtUtil.generateToken(c, appConfig.getExpiration(), appConfig.getTokenSigningKey())); + } + // 先基于sessionId获取userInfo + String sessionId = (String) c.get(GatewayConstant.SESSION_ID_KEY_NAME); + String sessionIdKey = RedisKeyUtil.makeSessionIdKey(sessionId); + RBucket sessionData = redissonClient.getBucket(sessionIdKey); + JSONObject tokenData = null; + if (sessionData.isExists()) { + tokenData = JSON.parseObject(sessionData.get()); + } + if (tokenData == null) { + log.warn("UNAUTHORIZED request [{}] from REMOTE-IP [{}] because no sessionId exists in redis.", + url, IpUtil.getRemoteIpAddress(request)); + response.setStatusCode(HttpStatus.UNAUTHORIZED); + response.getHeaders().setContentType(MediaType.APPLICATION_JSON); + byte[] responseBody = JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.UNAUTHORIZED_LOGIN, + "用户会话已失效,请重新登录!")).getBytes(StandardCharsets.UTF_8); + return response.writeWith(Flux.just(response.bufferFactory().wrap(responseBody))); + } + String userId = tokenData.getString("userId"); + if (StringUtils.isBlank(userId)) { + log.warn("UNAUTHORIZED request [{}] from REMOTE-IP [{}] because userId is empty in redis.", + url, IpUtil.getRemoteIpAddress(request)); + response.setStatusCode(HttpStatus.UNAUTHORIZED); + response.getHeaders().setContentType(MediaType.APPLICATION_JSON); + byte[] responseBody = JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.UNAUTHORIZED_LOGIN, + "用户登录验证信息已过期,请重新登录!")).getBytes(StandardCharsets.UTF_8); + return response.writeWith(Flux.just(response.bufferFactory().wrap(responseBody))); + } + String showName = tokenData.getString("showName"); + // 因为http header中不支持中文传输,所以需要编码。 + try { + showName = URLEncoder.encode(showName, StandardCharsets.UTF_8.name()); + tokenData.put("showName", showName); + } catch (UnsupportedEncodingException e) { + log.error("Failed to call AuthenticationPreFilter.filter.", e); + } + boolean isAdmin = tokenData.getBoolean("isAdmin"); + if (Boolean.FALSE.equals(isAdmin) && !this.hasPermission(redissonClient, sessionId, url)) { + log.warn("FORBIDDEN request [{}] from REMOTE-IP [{}] for USER [{} -- {}] no perm!", + url, IpUtil.getRemoteIpAddress(request), userId, showName); + response.setStatusCode(HttpStatus.FORBIDDEN); + response.getHeaders().setContentType(MediaType.APPLICATION_JSON); + byte[] responseBody = JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION, + "用户对该URL没有访问权限,请核对!")).getBytes(StandardCharsets.UTF_8); + return response.writeWith(Flux.just(response.bufferFactory().wrap(responseBody))); + } + // 将session中关联的用户信息,添加到当前的Request中。转发后,业务服务可以根据需要自定读取。 + tokenData.put("sessionId", sessionId); + exchange.getAttributes().put(GatewayConstant.SESSION_ID_KEY_NAME, sessionId); + ServerHttpRequest mutableReq = exchange.getRequest().mutate().header( + TokenData.REQUEST_ATTRIBUTE_NAME, tokenData.toJSONString()).build(); + ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build(); + return chain.filter(mutableExchange); + } + + /** + * 返回过滤器在在调用链上的优先级。 + * + * @return 数值越低,优先级越高。 + */ + @Override + public int getOrder() { + return HIGHEST_PRECEDENCE + 10000; + } + + private String getTokenFromRequest(ServerHttpRequest request) { + String token = request.getHeaders().getFirst(appConfig.getTokenHeaderKey()); + if (StringUtils.isBlank(token)) { + token = request.getQueryParams().getFirst(appConfig.getTokenHeaderKey()); + } + return token; + } + + private boolean hasPermission(RedissonClient redissonClient, String sessionId, String url) { + // 对于退出登录操作,不需要进行权限验证,仅仅确认是已经登录的合法用户即可。 + if (url.equals(GatewayConstant.ADMIN_LOGOUT_URL)) { + return true; + } + String permKey = RedisKeyUtil.makeSessionPermIdKey(sessionId); + return redissonClient.getSet(permKey).contains(url); + } + + /** + * 判断当前请求的url是否为配置中的白名单地址。以及一些内置的不需要登录即可访问的url。 + * @param url 请求的url。 + * @return 是返回true,否则false。 + */ + private boolean shouldNotFilter(String url) { + // 这里过滤和swagger相关的url + if (url.endsWith("/v2/api-docs") || url.endsWith("/v2/api-docs-ext")) { + return true; + } + if (url.equals(GatewayConstant.ADMIN_LOGIN_BY_UAA_URL) + || url.equals(GatewayConstant.GET_UAA_LOGIN_URL) + || url.equals(GatewayConstant.ADMIN_LOGIN_URL)) { + return true; + } + // 先过滤直接匹配的白名单url。 + if (CollectionUtils.isNotEmpty(appConfig.getWhitelistUrl())) { + if (appConfig.getWhitelistUrl().contains(url)) { + return true; + } + } + // 过滤ant pattern模式的白名单url。 + if (CollectionUtils.isNotEmpty(appConfig.getWhitelistUrlPattern())) { + for (String urlPattern : appConfig.getWhitelistUrlPattern()) { + if (antMatcher.match(urlPattern, url)) { + return true; + } + } + } + return false; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/RequestLogFilter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/RequestLogFilter.java new file mode 100644 index 00000000..b62e3f35 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/filter/RequestLogFilter.java @@ -0,0 +1,61 @@ +package com.orangeforms.gateway.filter; + +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.gateway.constant.GatewayConstant; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +/** + * 链路日志前置过虑器。 + * 为整个链路生成唯一的traceId,并存储在Request Head中。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class RequestLogFilter implements GlobalFilter, Ordered { + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + final String traceId = MyCommonUtil.generateUuid(); + MDC.put(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + log.info("开始请求,app={gateway}, url={}", exchange.getRequest().getURI().getPath()); + // 分别记录traceId和执行开始时间。 + exchange.getAttributes().put(GatewayConstant.START_TIME_ATTRIBUTE, System.currentTimeMillis()); + ServerHttpRequest mutableReq = exchange.getRequest().mutate().header( + ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId).build(); + ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build(); + ServerHttpResponse response = mutableExchange.getResponse(); + response.beforeCommit(() -> { + response.getHeaders().set(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + return Mono.empty(); + }); + return chain.filter(mutableExchange).then(Mono.fromRunnable(() -> { + Long startTime = exchange.getAttribute(GatewayConstant.START_TIME_ATTRIBUTE); + MDC.put(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + long elapse = 0; + if (startTime != null) { + elapse = System.currentTimeMillis() - startTime; + } + log.info("请求完成, app={gateway}, url={},elapse={}", exchange.getRequest().getURI().getPath(), elapse); + })); + } + + /** + * 返回过滤器在在调用链上的优先级。 + * + * @return 数值越低,优先级越高。 + */ + @Override + public int getOrder() { + return HIGHEST_PRECEDENCE + 9900; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/handler/SwaggerHandler.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/handler/SwaggerHandler.java new file mode 100644 index 00000000..e2fc52d3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/java/com/orangeforms/gateway/handler/SwaggerHandler.java @@ -0,0 +1,53 @@ +package com.orangeforms.gateway.handler; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; +import springfox.documentation.swagger.web.*; + +import java.util.Optional; + +/** + * Swagger的资源请求处理器。 + * + * @author Knife4j Team。 + * @date 2020-08-08 + */ +@RestController +public class SwaggerHandler { + + @Autowired(required = false) + private SecurityConfiguration securityConfiguration; + + @Autowired(required = false) + private UiConfiguration uiConfiguration; + + private final SwaggerResourcesProvider swaggerResources; + + @Autowired + public SwaggerHandler(SwaggerResourcesProvider swaggerResources) { + this.swaggerResources = swaggerResources; + } + + @GetMapping("/swagger-resources/configuration/security") + public Mono> securityConfiguration() { + return Mono.just(new ResponseEntity<>( + Optional.ofNullable(securityConfiguration) + .orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK)); + } + + @GetMapping("/swagger-resources/configuration/ui") + public Mono> uiConfiguration() { + return Mono.just(new ResponseEntity<>( + Optional.ofNullable(uiConfiguration) + .orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK)); + } + + @GetMapping("/swagger-resources") + public Mono swaggerResources() { + return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK))); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/resources/bootstrap.yml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..b5b28ebe --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/resources/bootstrap.yml @@ -0,0 +1,19 @@ +spring: + application: + name: gateway + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: localhost:8848 + config: + server-addr: localhost:8848 + file-extension: yaml + # 共享配置文件,排序越高后,优先级越高。 + shared-configs: + - data-id: application-dev.yaml + group: DEFAULT_GROUP + refresh: true + main: + allow-bean-definition-overriding: true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/resources/log4j2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/resources/log4j2.xml new file mode 100644 index 00000000..c637836f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/gateway/src/main/resources/log4j2.xml @@ -0,0 +1,73 @@ + + + + + + + + + + ./zzlogs/gateway + + ./zzlogs/gateway/backup + + info + + + + + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] T:[%X{traceId}] [%t] ==> [%traceId] %msg%n + + + 31 + + 20M + + + + + + + localhost:9092 + 10000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/pom.xml new file mode 100644 index 00000000..6c71c6b7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/pom.xml @@ -0,0 +1,40 @@ + + + + OrangeMultiDemo + com.orangeforms + 1.0.0 + + 4.0.0 + + application + pom + + + application-common + gateway + course-class + stats + upms + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + com.alibaba.csp + sentinel-datasource-nacos + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/pom.xml new file mode 100644 index 00000000..e471a2f7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/pom.xml @@ -0,0 +1,18 @@ + + + + com.orangeforms + application + 1.0.0 + + 4.0.0 + + stats + pom + + + stats-api + stats-service + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/pom.xml new file mode 100644 index 00000000..fbf1b3e5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/pom.xml @@ -0,0 +1,41 @@ + + + + com.orangeforms + stats + 1.0.0 + + 4.0.0 + + stats-api + 1.0.0 + stats-api + jar + + + + + com.orangeforms + application-common + 1.0.0 + + + + com.orangeforms + common-core + 1.0.0 + + + com.orangeforms + common-datafilter + 1.0.0 + + + + com.orangeforms + common-swagger + 1.0.0 + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/CourseTransStatsClient.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/CourseTransStatsClient.java new file mode 100644 index 00000000..edd0ab91 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/CourseTransStatsClient.java @@ -0,0 +1,178 @@ +package com.orangeforms.statsapi.client; + +import com.orangeforms.common.core.base.client.BaseFallbackFactory; +import com.orangeforms.common.core.config.FeignConfig; +import com.orangeforms.common.core.base.client.BaseClient; +import com.orangeforms.common.core.object.*; +import com.orangeforms.statsapi.dto.CourseTransStatsDto; +import com.orangeforms.statsapi.vo.CourseTransStatsVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 课程统计服务远程数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +@FeignClient( + name = "stats", + configuration = FeignConfig.class, + fallbackFactory = CourseTransStatsClient.CourseTransStatsClientFallbackFactory.class) +public interface CourseTransStatsClient extends BaseClient { + + /** + * 基于主键的(In-list)条件获取远程数据接口。 + * + * @param statsIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象的数据集合。 + */ + @Override + @PostMapping("/courseTransStats/listByIds") + ResponseResult> listByIds( + @RequestParam("statsIds") Set statsIds, + @RequestParam("withDict") Boolean withDict); + + /** + * 基于主键Id,获取远程对象。 + * + * @param statsId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @Override + @PostMapping("/courseTransStats/getById") + ResponseResult getById( + @RequestParam("statsId") Long statsId, + @RequestParam("withDict") Boolean withDict); + + /** + * 判断参数列表中指定的主键Id,是否都存在。 + * + * @param statsIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @Override + @PostMapping("/courseTransStats/existIds") + ResponseResult existIds(@RequestParam("statsIds") Set statsIds); + + /** + * 判断主键Id是否存在。 + * + * @param statsId 参数主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @Override + @PostMapping("/courseTransStats/existId") + ResponseResult existId(@RequestParam("statsId") Long statsId); + + /** + * 根据最新对象和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/courseTransStats/verifyRelatedData") + ResponseResult verifyRelatedData(@RequestBody CourseTransStatsDto data); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/courseTransStats/verifyRelatedDataList") + ResponseResult verifyRelatedDataList(@RequestBody List dataList); + + /** + * 删除主键Id关联的对象。 + * + * @param statsId 主键Id。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/courseTransStats/deleteById") + ResponseResult deleteById(@RequestParam("statsId") Long statsId); + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含删除数量。 + */ + @Override + @PostMapping("/courseTransStats/deleteBy") + ResponseResult deleteBy(@RequestBody CourseTransStatsDto filter); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象集合。 + */ + @Override + @PostMapping("/courseTransStats/listBy") + ResponseResult> listBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的单条数据对象。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象。 + */ + @Override + @PostMapping("/courseTransStats/getBy") + ResponseResult getBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * 和listBy接口相比,以Map列表的方式返回的主要目的是,降低服务之间的耦合度。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含主对象集合。 + */ + @Override + @PostMapping("/courseTransStats/listMapBy") + ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据数量。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @Override + @PostMapping("/courseTransStats/countBy") + ResponseResult countBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @Override + @PostMapping("/courseTransStats/aggregateBy") + ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam); + + @Component("StatsCourseTransStatsClientFallbackFactory") + @Slf4j + class CourseTransStatsClientFallbackFactory + extends BaseFallbackFactory implements CourseTransStatsClient { + + @Override + public CourseTransStatsClient create(Throwable throwable) { + log.error("Exception For Feign Remote Call.", throwable); + return new CourseTransStatsClientFallbackFactory(); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/StudentActionStatsClient.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/StudentActionStatsClient.java new file mode 100644 index 00000000..4e8542f2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/StudentActionStatsClient.java @@ -0,0 +1,178 @@ +package com.orangeforms.statsapi.client; + +import com.orangeforms.common.core.base.client.BaseFallbackFactory; +import com.orangeforms.common.core.config.FeignConfig; +import com.orangeforms.common.core.base.client.BaseClient; +import com.orangeforms.common.core.object.*; +import com.orangeforms.statsapi.dto.StudentActionStatsDto; +import com.orangeforms.statsapi.vo.StudentActionStatsVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 学生行为统计服务远程数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +@FeignClient( + name = "stats", + configuration = FeignConfig.class, + fallbackFactory = StudentActionStatsClient.StudentActionStatsClientFallbackFactory.class) +public interface StudentActionStatsClient extends BaseClient { + + /** + * 基于主键的(In-list)条件获取远程数据接口。 + * + * @param statsIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象的数据集合。 + */ + @Override + @PostMapping("/studentActionStats/listByIds") + ResponseResult> listByIds( + @RequestParam("statsIds") Set statsIds, + @RequestParam("withDict") Boolean withDict); + + /** + * 基于主键Id,获取远程对象。 + * + * @param statsId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @Override + @PostMapping("/studentActionStats/getById") + ResponseResult getById( + @RequestParam("statsId") Long statsId, + @RequestParam("withDict") Boolean withDict); + + /** + * 判断参数列表中指定的主键Id,是否都存在。 + * + * @param statsIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @Override + @PostMapping("/studentActionStats/existIds") + ResponseResult existIds(@RequestParam("statsIds") Set statsIds); + + /** + * 判断主键Id是否存在。 + * + * @param statsId 参数主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @Override + @PostMapping("/studentActionStats/existId") + ResponseResult existId(@RequestParam("statsId") Long statsId); + + /** + * 根据最新对象和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/studentActionStats/verifyRelatedData") + ResponseResult verifyRelatedData(@RequestBody StudentActionStatsDto data); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/studentActionStats/verifyRelatedDataList") + ResponseResult verifyRelatedDataList(@RequestBody List dataList); + + /** + * 删除主键Id关联的对象。 + * + * @param statsId 主键Id。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/studentActionStats/deleteById") + ResponseResult deleteById(@RequestParam("statsId") Long statsId); + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含删除数量。 + */ + @Override + @PostMapping("/studentActionStats/deleteBy") + ResponseResult deleteBy(@RequestBody StudentActionStatsDto filter); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象集合。 + */ + @Override + @PostMapping("/studentActionStats/listBy") + ResponseResult> listBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的单条数据对象。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象。 + */ + @Override + @PostMapping("/studentActionStats/getBy") + ResponseResult getBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * 和listBy接口相比,以Map列表的方式返回的主要目的是,降低服务之间的耦合度。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含主对象集合。 + */ + @Override + @PostMapping("/studentActionStats/listMapBy") + ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据数量。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @Override + @PostMapping("/studentActionStats/countBy") + ResponseResult countBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @Override + @PostMapping("/studentActionStats/aggregateBy") + ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam); + + @Component("StatsStudentActionStatsClientFallbackFactory") + @Slf4j + class StudentActionStatsClientFallbackFactory + extends BaseFallbackFactory implements StudentActionStatsClient { + + @Override + public StudentActionStatsClient create(Throwable throwable) { + log.error("Exception For Feign Remote Call.", throwable); + return new StudentActionStatsClientFallbackFactory(); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/StudentActionTransClient.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/StudentActionTransClient.java new file mode 100644 index 00000000..aaa6c8b7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/client/StudentActionTransClient.java @@ -0,0 +1,198 @@ +package com.orangeforms.statsapi.client; + +import com.orangeforms.common.core.base.client.BaseFallbackFactory; +import com.orangeforms.common.core.config.FeignConfig; +import com.orangeforms.common.core.base.client.BaseClient; +import com.orangeforms.common.core.object.*; +import com.orangeforms.statsapi.dto.StudentActionTransDto; +import com.orangeforms.statsapi.vo.StudentActionTransVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 学生行为流水服务远程数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +@FeignClient( + name = "stats", + configuration = FeignConfig.class, + fallbackFactory = StudentActionTransClient.StudentActionTransClientFallbackFactory.class) +public interface StudentActionTransClient extends BaseClient { + + /** + * 基于主键的(In-list)条件获取远程数据接口。 + * + * @param transIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象的数据集合。 + */ + @Override + @PostMapping("/studentActionTrans/listByIds") + ResponseResult> listByIds( + @RequestParam("transIds") Set transIds, + @RequestParam("withDict") Boolean withDict); + + /** + * 基于主键Id,获取远程对象。 + * + * @param transId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @Override + @PostMapping("/studentActionTrans/getById") + ResponseResult getById( + @RequestParam("transId") Long transId, + @RequestParam("withDict") Boolean withDict); + + /** + * 判断参数列表中指定的主键Id,是否都存在。 + * + * @param transIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @Override + @PostMapping("/studentActionTrans/existIds") + ResponseResult existIds(@RequestParam("transIds") Set transIds); + + /** + * 判断主键Id是否存在。 + * + * @param transId 参数主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @Override + @PostMapping("/studentActionTrans/existId") + ResponseResult existId(@RequestParam("transId") Long transId); + + /** + * 保存或更新数据。 + * + * @param data 主键Id为null时表示新增数据,否则更新数据。 + * @return 应答结果对象,主键Id。 + */ + @Override + @PostMapping("/studentActionTrans/saveNewOrUpdate") + ResponseResult saveNewOrUpdate(@RequestBody StudentActionTransDto data); + + /** + * 批量新增或保存数据列表。 + * + * @param dataList 数据列表。主键Id为null时表示新增数据,否则更新数据。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/studentActionTrans/saveNewOrUpdateBatch") + ResponseResult saveNewOrUpdateBatch(@RequestBody List dataList); + + /** + * 根据最新对象和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/studentActionTrans/verifyRelatedData") + ResponseResult verifyRelatedData(@RequestBody StudentActionTransDto data); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/studentActionTrans/verifyRelatedDataList") + ResponseResult verifyRelatedDataList(@RequestBody List dataList); + + /** + * 删除主键Id关联的对象。 + * + * @param transId 主键Id。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/studentActionTrans/deleteById") + ResponseResult deleteById(@RequestParam("transId") Long transId); + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含删除数量。 + */ + @Override + @PostMapping("/studentActionTrans/deleteBy") + ResponseResult deleteBy(@RequestBody StudentActionTransDto filter); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象集合。 + */ + @Override + @PostMapping("/studentActionTrans/listBy") + ResponseResult> listBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的单条数据对象。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象。 + */ + @Override + @PostMapping("/studentActionTrans/getBy") + ResponseResult getBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * 和listBy接口相比,以Map列表的方式返回的主要目的是,降低服务之间的耦合度。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含主对象集合。 + */ + @Override + @PostMapping("/studentActionTrans/listMapBy") + ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据数量。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @Override + @PostMapping("/studentActionTrans/countBy") + ResponseResult countBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @Override + @PostMapping("/studentActionTrans/aggregateBy") + ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam); + + @Component("StatsStudentActionTransClientFallbackFactory") + @Slf4j + class StudentActionTransClientFallbackFactory + extends BaseFallbackFactory implements StudentActionTransClient { + + @Override + public StudentActionTransClient create(Throwable throwable) { + log.error("Exception For Feign Remote Call.", throwable); + return new StudentActionTransClientFallbackFactory(); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/CourseTransStatsDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/CourseTransStatsDto.java new file mode 100644 index 00000000..8b7767e1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/CourseTransStatsDto.java @@ -0,0 +1,105 @@ +package com.orangeforms.statsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.application.common.constant.Subject; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; + +import java.util.Date; + +/** + * CourseTransStatsDto对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("CourseTransStatsDto对象") +@Data +public class CourseTransStatsDto { + + /** + * 主键Id。 + */ + @ApiModelProperty(value = "主键Id", required = true) + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long statsId; + + /** + * 统计日期。 + */ + @ApiModelProperty(value = "统计日期", required = true) + @NotNull(message = "数据验证失败,统计日期不能为空!") + private Date statsDate; + + /** + * 科目Id。 + */ + @ApiModelProperty(value = "科目Id", required = true) + @NotNull(message = "数据验证失败,所属科目不能为空!") + @ConstDictRef(constDictClass = Subject.class, message = "数据验证失败,所属科目为无效值!") + private Integer subjectId; + + /** + * 年级Id。 + */ + @ApiModelProperty(value = "年级Id", required = true) + @NotNull(message = "数据验证失败,所属年级不能为空!") + private Integer gradeId; + + /** + * 年级名称。 + */ + @ApiModelProperty(value = "年级名称") + private String gradeName; + + /** + * 课程Id。 + */ + @ApiModelProperty(value = "课程Id", required = true) + @NotNull(message = "数据验证失败,课程ID不能为空!") + private Long courseId; + + /** + * 课程名称。 + */ + @ApiModelProperty(value = "课程名称") + private String courseName; + + /** + * 学生上课次数。 + */ + @ApiModelProperty(value = "学生上课次数", required = true) + @NotNull(message = "数据验证失败,上课次数不能为空!") + private Integer studentAttendCount; + + /** + * 学生献花数量。 + */ + @ApiModelProperty(value = "学生献花数量", required = true) + @NotNull(message = "数据验证失败,献花数量不能为空!") + private Integer studentFlowerAmount; + + /** + * 学生献花次数。 + */ + @ApiModelProperty(value = "学生献花次数", required = true) + @NotNull(message = "数据验证失败,献花次数不能为空!") + private Integer studentFlowerCount; + + /** + * statsDate 范围过滤起始值(>=)。 + */ + @ApiModelProperty(value = "statsDate 范围过滤起始值(>=)") + private String statsDateStart; + + /** + * statsDate 范围过滤结束值(<=)。 + */ + @ApiModelProperty(value = "statsDate 范围过滤结束值(<=)") + private String statsDateEnd; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/StudentActionStatsDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/StudentActionStatsDto.java new file mode 100644 index 00000000..e007addf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/StudentActionStatsDto.java @@ -0,0 +1,180 @@ +package com.orangeforms.statsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; + +import java.util.Date; + +/** + * StudentActionStatsDto对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("StudentActionStatsDto对象") +@Data +public class StudentActionStatsDto { + + /** + * 主键Id。 + */ + @ApiModelProperty(value = "主键Id", required = true) + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long statsId; + + /** + * 统计日期。 + */ + @ApiModelProperty(value = "统计日期", required = true) + @NotNull(message = "数据验证失败,统计日期不能为空!") + private Date statsDate; + + /** + * 统计小时。 + */ + @ApiModelProperty(value = "统计小时") + private Date statsMonth; + + /** + * 年级Id。 + */ + @ApiModelProperty(value = "年级Id", required = true) + @NotNull(message = "数据验证失败,所属年级不能为空!") + private Integer gradeId; + + /** + * 学生所在省Id。 + */ + @ApiModelProperty(value = "学生所在省Id", required = true) + @NotNull(message = "数据验证失败,所在省份不能为空!") + private Long provinceId; + + /** + * 学生所在城市Id。 + */ + @ApiModelProperty(value = "学生所在城市Id", required = true) + @NotNull(message = "数据验证失败,所在城市不能为空!") + private Long cityId; + + /** + * 购课学币数量。 + */ + @ApiModelProperty(value = "购课学币数量", required = true) + @NotNull(message = "数据验证失败,购课学币数量不能为空!") + private Integer buyCourseAmount; + + /** + * 购买课程次数。 + */ + @ApiModelProperty(value = "购买课程次数", required = true) + @NotNull(message = "数据验证失败,购买课程次数不能为空!") + private Integer buyCourseCount; + + /** + * 购买视频学币数量。 + */ + @ApiModelProperty(value = "购买视频学币数量", required = true) + @NotNull(message = "数据验证失败,购买视频学币数量不能为空!") + private Integer buyVideoAmount; + + /** + * 购买视频次数。 + */ + @ApiModelProperty(value = "购买视频次数", required = true) + @NotNull(message = "数据验证失败,购买视频次数不能为空!") + private Integer buyVideoCount; + + /** + * 购买作业学币数量。 + */ + @ApiModelProperty(value = "购买作业学币数量", required = true) + @NotNull(message = "数据验证失败,购买作业学币数量不能为空!") + private Integer buyPaperAmount; + + /** + * 购买作业次数。 + */ + @ApiModelProperty(value = "购买作业次数", required = true) + @NotNull(message = "数据验证失败,购买作业次数不能为空!") + private Integer buyPaperCount; + + /** + * 购买献花数量。 + */ + @ApiModelProperty(value = "购买献花数量", required = true) + @NotNull(message = "数据验证失败,购买献花数量不能为空!") + private Integer buyFlowerAmount; + + /** + * 购买献花次数。 + */ + @ApiModelProperty(value = "购买献花次数", required = true) + @NotNull(message = "数据验证失败,购买献花次数不能为空!") + private Integer buyFlowerCount; + + /** + * 充值学币数量。 + */ + @ApiModelProperty(value = "充值学币数量", required = true) + @NotNull(message = "数据验证失败,充值学币数量不能为空!") + private Integer rechargeCoinAmount; + + /** + * 充值学币次数。 + */ + @ApiModelProperty(value = "充值学币次数", required = true) + @NotNull(message = "数据验证失败,充值学币次数不能为空!") + private Integer rechargeCoinCount; + + /** + * 线下课程上课次数。 + */ + @ApiModelProperty(value = "线下课程上课次数", required = true) + @NotNull(message = "数据验证失败,线下课程上课次数不能为空!") + private Integer doCourseCount; + + /** + * 观看视频次数。 + */ + @ApiModelProperty(value = "观看视频次数", required = true) + @NotNull(message = "数据验证失败,观看视频次数不能为空!") + private Integer watchVideoCount; + + /** + * 购买献花消费学币数量。 + */ + @ApiModelProperty(value = "购买献花消费学币数量", required = true) + @NotNull(message = "数据验证失败,购买献花消费学币数量不能为空!") + private Integer watchVideoTotalSecond; + + /** + * 做题数量。 + */ + @ApiModelProperty(value = "做题数量", required = true) + @NotNull(message = "数据验证失败,做题数量不能为空!") + private Integer doExerciseCount; + + /** + * 做题正确的数量。 + */ + @ApiModelProperty(value = "做题正确的数量", required = true) + @NotNull(message = "数据验证失败,做题正确的数量不能为空!") + private Integer doExerciseCorrectCount; + + /** + * statsDate 范围过滤起始值(>=)。 + */ + @ApiModelProperty(value = "statsDate 范围过滤起始值(>=)") + private String statsDateStart; + + /** + * statsDate 范围过滤结束值(<=)。 + */ + @ApiModelProperty(value = "statsDate 范围过滤结束值(<=)") + private String statsDateEnd; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/StudentActionTransDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/StudentActionTransDto.java new file mode 100644 index 00000000..104f9740 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/dto/StudentActionTransDto.java @@ -0,0 +1,136 @@ +package com.orangeforms.statsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.application.common.constant.StudentActionType; +import com.orangeforms.application.common.constant.DeviceType; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; + +import java.util.Date; + +/** + * StudentActionTransDto对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("StudentActionTransDto对象") +@Data +public class StudentActionTransDto { + + /** + * 主键Id。 + */ + @ApiModelProperty(value = "主键Id", required = true) + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + private Long transId; + + /** + * 学生Id。 + */ + @ApiModelProperty(value = "学生Id", required = true) + @NotNull(message = "数据验证失败,学生Id不能为空!") + private Long studentId; + + /** + * 学生名称。 + */ + @ApiModelProperty(value = "学生名称", required = true) + @NotBlank(message = "数据验证失败,学生名称不能为空!") + private String studentName; + + /** + * 学生校区。 + */ + @ApiModelProperty(value = "学生校区", required = true) + @NotNull(message = "数据验证失败,学生校区不能为空!") + private Long schoolId; + + /** + * 年级Id。 + */ + @ApiModelProperty(value = "年级Id", required = true) + @NotNull(message = "数据验证失败,所属年级不能为空!") + private Integer gradeId; + + /** + * 行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)。 + */ + @ApiModelProperty(value = "行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)", required = true) + @NotNull(message = "数据验证失败,行为类型不能为空!") + @ConstDictRef(constDictClass = StudentActionType.class, message = "数据验证失败,行为类型为无效值!") + private Integer actionType; + + /** + * 设备类型(0: iOS 1: Android 2: PC)。 + */ + @ApiModelProperty(value = "设备类型(0: iOS 1: Android 2: PC)", required = true) + @NotNull(message = "数据验证失败,设备类型不能为空!") + @ConstDictRef(constDictClass = DeviceType.class, message = "数据验证失败,设备类型为无效值!") + private Integer deviceType; + + /** + * 看视频秒数。 + */ + @ApiModelProperty(value = "看视频秒数") + private Integer watchVideoSeconds; + + /** + * 购买献花数量。 + */ + @ApiModelProperty(value = "购买献花数量") + private Integer flowerCount; + + /** + * 购买作业数量。 + */ + @ApiModelProperty(value = "购买作业数量") + private Integer paperCount; + + /** + * 购买视频数量。 + */ + @ApiModelProperty(value = "购买视频数量") + private Integer videoCount; + + /** + * 购买课程数量。 + */ + @ApiModelProperty(value = "购买课程数量") + private Integer courseCount; + + /** + * 充值学币数量。 + */ + @ApiModelProperty(value = "充值学币数量") + private Integer coinCount; + + /** + * 做题是否正确标记。 + */ + @ApiModelProperty(value = "做题是否正确标记") + private Integer exerciseCorrectFlag; + + /** + * 发生时间。 + */ + @ApiModelProperty(value = "发生时间") + private Date createTime; + + /** + * createTime 范围过滤起始值(>=)。 + */ + @ApiModelProperty(value = "createTime 范围过滤起始值(>=)") + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + @ApiModelProperty(value = "createTime 范围过滤结束值(<=)") + private String createTimeEnd; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/CourseTransStatsVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/CourseTransStatsVo.java new file mode 100644 index 00000000..0edbc093 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/CourseTransStatsVo.java @@ -0,0 +1,97 @@ +package com.orangeforms.statsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * CourseTransStatsVO视图对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("CourseTransStatsVO视图对象") +@Data +public class CourseTransStatsVo { + + /** + * 主键Id。 + */ + @ApiModelProperty(value = "主键Id") + private Long statsId; + + /** + * 统计日期。 + */ + @ApiModelProperty(value = "统计日期") + private Date statsDate; + + /** + * 科目Id。 + */ + @ApiModelProperty(value = "科目Id") + private Integer subjectId; + + /** + * 年级Id。 + */ + @ApiModelProperty(value = "年级Id") + private Integer gradeId; + + /** + * 年级名称。 + */ + @ApiModelProperty(value = "年级名称") + private String gradeName; + + /** + * 课程Id。 + */ + @ApiModelProperty(value = "课程Id") + private Long courseId; + + /** + * 课程名称。 + */ + @ApiModelProperty(value = "课程名称") + private String courseName; + + /** + * 学生上课次数。 + */ + @ApiModelProperty(value = "学生上课次数") + private Integer studentAttendCount; + + /** + * 学生献花数量。 + */ + @ApiModelProperty(value = "学生献花数量") + private Integer studentFlowerAmount; + + /** + * 学生献花次数。 + */ + @ApiModelProperty(value = "学生献花次数") + private Integer studentFlowerCount; + + /** + * gradeId 字典关联数据。 + */ + @ApiModelProperty(value = "gradeId 字典关联数据") + private Map gradeIdDictMap; + + /** + * courseId 字典关联数据。 + */ + @ApiModelProperty(value = "courseId 字典关联数据") + private Map courseIdDictMap; + + /** + * subjectId 常量字典关联数据。 + */ + @ApiModelProperty(value = "subjectId 常量字典关联数据") + private Map subjectIdDictMap; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/StudentActionStatsVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/StudentActionStatsVo.java new file mode 100644 index 00000000..20149213 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/StudentActionStatsVo.java @@ -0,0 +1,163 @@ +package com.orangeforms.statsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * StudentActionStatsVO视图对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("StudentActionStatsVO视图对象") +@Data +public class StudentActionStatsVo { + + /** + * 主键Id。 + */ + @ApiModelProperty(value = "主键Id") + private Long statsId; + + /** + * 统计日期。 + */ + @ApiModelProperty(value = "统计日期") + private Date statsDate; + + /** + * 统计小时。 + */ + @ApiModelProperty(value = "统计小时") + private Date statsMonth; + + /** + * 年级Id。 + */ + @ApiModelProperty(value = "年级Id") + private Integer gradeId; + + /** + * 学生所在省Id。 + */ + @ApiModelProperty(value = "学生所在省Id") + private Long provinceId; + + /** + * 学生所在城市Id。 + */ + @ApiModelProperty(value = "学生所在城市Id") + private Long cityId; + + /** + * 购课学币数量。 + */ + @ApiModelProperty(value = "购课学币数量") + private Integer buyCourseAmount; + + /** + * 购买课程次数。 + */ + @ApiModelProperty(value = "购买课程次数") + private Integer buyCourseCount; + + /** + * 购买视频学币数量。 + */ + @ApiModelProperty(value = "购买视频学币数量") + private Integer buyVideoAmount; + + /** + * 购买视频次数。 + */ + @ApiModelProperty(value = "购买视频次数") + private Integer buyVideoCount; + + /** + * 购买作业学币数量。 + */ + @ApiModelProperty(value = "购买作业学币数量") + private Integer buyPaperAmount; + + /** + * 购买作业次数。 + */ + @ApiModelProperty(value = "购买作业次数") + private Integer buyPaperCount; + + /** + * 购买献花数量。 + */ + @ApiModelProperty(value = "购买献花数量") + private Integer buyFlowerAmount; + + /** + * 购买献花次数。 + */ + @ApiModelProperty(value = "购买献花次数") + private Integer buyFlowerCount; + + /** + * 充值学币数量。 + */ + @ApiModelProperty(value = "充值学币数量") + private Integer rechargeCoinAmount; + + /** + * 充值学币次数。 + */ + @ApiModelProperty(value = "充值学币次数") + private Integer rechargeCoinCount; + + /** + * 线下课程上课次数。 + */ + @ApiModelProperty(value = "线下课程上课次数") + private Integer doCourseCount; + + /** + * 观看视频次数。 + */ + @ApiModelProperty(value = "观看视频次数") + private Integer watchVideoCount; + + /** + * 购买献花消费学币数量。 + */ + @ApiModelProperty(value = "购买献花消费学币数量") + private Integer watchVideoTotalSecond; + + /** + * 做题数量。 + */ + @ApiModelProperty(value = "做题数量") + private Integer doExerciseCount; + + /** + * 做题正确的数量。 + */ + @ApiModelProperty(value = "做题正确的数量") + private Integer doExerciseCorrectCount; + + /** + * gradeId 字典关联数据。 + */ + @ApiModelProperty(value = "gradeId 字典关联数据") + private Map gradeIdDictMap; + + /** + * provinceId 字典关联数据。 + */ + @ApiModelProperty(value = "provinceId 字典关联数据") + private Map provinceIdDictMap; + + /** + * cityId 字典关联数据。 + */ + @ApiModelProperty(value = "cityId 字典关联数据") + private Map cityIdDictMap; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/StudentActionTransVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/StudentActionTransVo.java new file mode 100644 index 00000000..4ee32a02 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/src/main/java/com/orangeforms/statsapi/vo/StudentActionTransVo.java @@ -0,0 +1,133 @@ +package com.orangeforms.statsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.Map; + +/** + * StudentActionTransVO视图对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("StudentActionTransVO视图对象") +@Data +public class StudentActionTransVo { + + /** + * 主键Id。 + */ + @ApiModelProperty(value = "主键Id") + private Long transId; + + /** + * 学生Id。 + */ + @ApiModelProperty(value = "学生Id") + private Long studentId; + + /** + * 学生名称。 + */ + @ApiModelProperty(value = "学生名称") + private String studentName; + + /** + * 学生校区。 + */ + @ApiModelProperty(value = "学生校区") + private Long schoolId; + + /** + * 年级Id。 + */ + @ApiModelProperty(value = "年级Id") + private Integer gradeId; + + /** + * 行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)。 + */ + @ApiModelProperty(value = "行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)") + private Integer actionType; + + /** + * 设备类型(0: iOS 1: Android 2: PC)。 + */ + @ApiModelProperty(value = "设备类型(0: iOS 1: Android 2: PC)") + private Integer deviceType; + + /** + * 看视频秒数。 + */ + @ApiModelProperty(value = "看视频秒数") + private Integer watchVideoSeconds; + + /** + * 购买献花数量。 + */ + @ApiModelProperty(value = "购买献花数量") + private Integer flowerCount; + + /** + * 购买作业数量。 + */ + @ApiModelProperty(value = "购买作业数量") + private Integer paperCount; + + /** + * 购买视频数量。 + */ + @ApiModelProperty(value = "购买视频数量") + private Integer videoCount; + + /** + * 购买课程数量。 + */ + @ApiModelProperty(value = "购买课程数量") + private Integer courseCount; + + /** + * 充值学币数量。 + */ + @ApiModelProperty(value = "充值学币数量") + private Integer coinCount; + + /** + * 做题是否正确标记。 + */ + @ApiModelProperty(value = "做题是否正确标记") + private Integer exerciseCorrectFlag; + + /** + * 发生时间。 + */ + @ApiModelProperty(value = "发生时间") + private Date createTime; + + /** + * schoolId 字典关联数据。 + */ + @ApiModelProperty(value = "schoolId 字典关联数据") + private Map schoolIdDictMap; + + /** + * gradeId 字典关联数据。 + */ + @ApiModelProperty(value = "gradeId 字典关联数据") + private Map gradeIdDictMap; + + /** + * actionType 常量字典关联数据。 + */ + @ApiModelProperty(value = "actionType 常量字典关联数据") + private Map actionTypeDictMap; + + /** + * deviceType 常量字典关联数据。 + */ + @ApiModelProperty(value = "deviceType 常量字典关联数据") + private Map deviceTypeDictMap; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/stats-api.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/stats-api.iml new file mode 100644 index 00000000..b62ebf4a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-api/stats-api.iml @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/pom.xml new file mode 100644 index 00000000..7fd9813d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/pom.xml @@ -0,0 +1,75 @@ + + + + com.orangeforms + stats + 1.0.0 + + 4.0.0 + + stats-service + 1.0.0 + stats-service + jar + + + + + com.orangeforms + stats-api + 1.0.0 + + + com.orangeforms + course-class-api + 1.0.0 + + + com.orangeforms + upms-api + 1.0.0 + + + com.orangeforms + common-log + 1.0.0 + + + com.orangeforms + common-redis + 1.0.0 + + + com.orangeforms + common-sequence + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/StatsApplication.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/StatsApplication.java new file mode 100644 index 00000000..32800bd4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/StatsApplication.java @@ -0,0 +1,22 @@ +package com.orangeforms.statsservice; + +import org.springframework.boot.SpringApplication; +import org.springframework.cloud.client.SpringCloudApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; + +/** + * stats服务启动类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@SpringCloudApplication +@EnableFeignClients(basePackages = "com.orangeforms") +@ComponentScan("com.orangeforms") +public class StatsApplication { + + public static void main(String[] args) { + SpringApplication.run(StatsApplication.class, args); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/config/ApplicationConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/config/ApplicationConfig.java new file mode 100644 index 00000000..25d5b6f6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/config/ApplicationConfig.java @@ -0,0 +1,37 @@ +package com.orangeforms.statsservice.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 应用程序自定义的程序属性配置文件。 + * 在yml格式的配置文件中,配置application开头应用配置信息,如: + * + * application: + * uploadFileBaseDir: /user/xxx/fileRoot/ + * defaultSomething: defaultValue + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@RefreshScope +@Configuration +@ConfigurationProperties(prefix = "application") +public class ApplicationConfig { + /** + * 上传文件的基础目录 + */ + private String uploadFileBaseDir; + /** + * 每个微服务的url目录上下文,如(/admin/upms),通常和网关的路由目录一致。 + */ + private String serviceContextPath; + /** + * 是否忽略远程调用中出现的任何错误,包括逻辑异常和系统异常。 + * 通常在调试和测试阶段设置为false,以便及时发现问题。 + */ + private Boolean ignoreRpcError; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/config/DataSourceConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/config/DataSourceConfig.java new file mode 100644 index 00000000..817e1e0c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/config/DataSourceConfig.java @@ -0,0 +1,30 @@ +package com.orangeforms.statsservice.config; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.mybatis.spring.annotation.MapperScan; + +import javax.sql.DataSource; + +/** + * 数据源配置Bean对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +@EnableTransactionManagement +@MapperScan(value = {"com.orangeforms.*.dao", "com.orangeforms.common.*.dao"}) +public class DataSourceConfig { + + @Bean(initMethod = "init", destroyMethod = "close") + @Primary + @ConfigurationProperties(prefix = "spring.datasource.druid") + public DataSource druidDataSource() { + return DruidDataSourceBuilder.create().build(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/CourseTransStatsController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/CourseTransStatsController.java new file mode 100644 index 00000000..e04f8d3e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/CourseTransStatsController.java @@ -0,0 +1,280 @@ +package com.orangeforms.statsservice.controller; + +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.statsservice.model.*; +import com.orangeforms.statsservice.service.*; +import com.orangeforms.statsapi.dto.*; +import com.orangeforms.statsapi.vo.*; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.*; +import com.orangeforms.common.core.base.controller.BaseController; +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.annotation.MyRequestBody; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 课程统计操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "课程统计管理接口") +@Slf4j +@RestController +@RequestMapping("/courseTransStats") +public class CourseTransStatsController extends BaseController { + + @Autowired + private CourseTransStatsService courseTransStatsService; + + @Override + protected IBaseService service() { + return courseTransStatsService; + } + + /** + * 列出符合过滤条件的课程统计列表。 + * + * @param courseTransStatsDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody CourseTransStatsDto courseTransStatsDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + CourseTransStats courseTransStatsFilter = MyModelUtil.copyTo(courseTransStatsDtoFilter, CourseTransStats.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, CourseTransStats.class); + List courseTransStatsList = + courseTransStatsService.getCourseTransStatsListWithRelation(courseTransStatsFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(courseTransStatsList, CourseTransStats.INSTANCE)); + } + + /** + * 分组列出符合过滤条件的课程统计列表。 + * + * @param courseTransStatsDtoFilter 过滤对象。 + * @param groupParam 分组参数。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/listWithGroup") + public ResponseResult> listWithGroup( + @MyRequestBody CourseTransStatsDto courseTransStatsDtoFilter, + @MyRequestBody(required = true) MyGroupParam groupParam, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + String orderBy = MyOrderParam.buildOrderBy(orderParam, CourseTransStats.class); + groupParam = MyGroupParam.buildGroupBy(groupParam, CourseTransStats.class); + if (groupParam == null) { + return ResponseResult.error( + ErrorCodeEnum.INVALID_ARGUMENT_FORMAT, "数据参数错误,分组参数不能为空!"); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + CourseTransStats filter = MyModelUtil.copyTo(courseTransStatsDtoFilter, CourseTransStats.class); + MyGroupCriteria criteria = groupParam.getGroupCriteria(); + List resultList = courseTransStatsService.getGroupedCourseTransStatsListWithRelation( + filter, criteria.getGroupSelect(), criteria.getGroupBy(), orderBy); + // 分页连同对象数据转换copy工作,下面的方法一并完成。 + return ResponseResult.success(MyPageUtil.makeResponseData(resultList, CourseTransStats.INSTANCE)); + } + + /** + * 查看指定课程统计对象详情。 + * + * @param statsId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long statsId) { + if (MyCommonUtil.existBlankArgument(statsId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + CourseTransStats courseTransStats = courseTransStatsService.getByIdWithRelation(statsId, MyRelationParam.full()); + if (courseTransStats == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + CourseTransStatsVo courseTransStatsVo = CourseTransStats.INSTANCE.fromModel(courseTransStats); + return ResponseResult.success(courseTransStatsVo); + } + + /** + * 根据主键Id集合,获取数据对象集合。仅限于微服务间远程接口调用。 + * + * @param statsIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象集合。 + */ + @ApiOperation(hidden = true, value = "listByIds") + @PostMapping("/listByIds") + public ResponseResult> listByIds( + @RequestParam Set statsIds, @RequestParam Boolean withDict) { + return super.baseListByIds(statsIds, withDict, CourseTransStats.INSTANCE); + } + + /** + * 根据主键Id,获取数据对象。仅限于微服务间远程接口调用。 + * + * @param statsId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @ApiOperation(hidden = true, value = "getById") + @PostMapping("/getById") + public ResponseResult getById( + @RequestParam Long statsId, @RequestParam Boolean withDict) { + return super.baseGetById(statsId, withDict, CourseTransStats.INSTANCE); + } + + /** + * 判断参数列表中指定的主键Id集合,是否全部存在。仅限于微服务间远程接口调用。 + * + * @param statsIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existIds") + @PostMapping("/existIds") + public ResponseResult existIds(@RequestParam Set statsIds) { + return super.baseExistIds(statsIds); + } + + /** + * 判断参数列表中指定的主键Id是否存在。仅限于微服务间远程接口调用。 + * + * @param statsId 主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existId") + @PostMapping("/existId") + public ResponseResult existId(@RequestParam Long statsId) { + return super.baseExistId(statsId); + } + + /** + * 根据最新对象列表和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedData") + @PostMapping("/verifyRelatedData") + public ResponseResult verifyRelatedData(@RequestBody CourseTransStatsDto data) { + CourseTransStats courseTransStats = MyModelUtil.copyTo(data, CourseTransStats.class); + return super.baseVerifyRelatedData(courseTransStats, CourseTransStats::getStatsId); + } + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedDataList") + @PostMapping("/verifyRelatedDataList") + public ResponseResult verifyRelatedDataList(@RequestBody List dataList) { + List courseTransStatsList = MyModelUtil.copyCollectionTo(dataList, CourseTransStats.class); + return super.baseVerifyRelatedDataList(courseTransStatsList, CourseTransStats::getStatsId); + } + + /** + * 根据主键Id删除数据。 + * + * @param statsId 主键Id。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteById") + @PostMapping("/deleteById") + public ResponseResult deleteById(@RequestParam Long statsId) throws Exception { + CourseTransStats filter = new CourseTransStats(); + filter.setStatsId(statsId); + return super.baseDeleteBy(filter); + } + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteBy") + @PostMapping("/deleteBy") + public ResponseResult deleteBy(@RequestBody CourseTransStatsDto filter) throws Exception { + return super.baseDeleteBy(MyModelUtil.copyTo(filter, CourseTransStats.class)); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listBy") + @PostMapping("/listBy") + public ResponseResult> listBy(@RequestBody MyQueryParam queryParam) { + return super.baseListBy(queryParam, CourseTransStats.INSTANCE); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listMapBy") + @PostMapping("/listMapBy") + public ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam) { + return super.baseListMapBy(queryParam, CourseTransStats.INSTANCE); + } + + /** + * 复杂的查询调用,仅返回单体记录。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含符合查询过滤条件的对象结果集。 + */ + @ApiOperation(hidden = true, value = "getBy") + @PostMapping("/getBy") + public ResponseResult getBy(@RequestBody MyQueryParam queryParam) { + return super.baseGetBy(queryParam, CourseTransStats.INSTANCE); + } + + /** + * 获取远程主对象中符合查询条件的数据数量。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @ApiOperation(hidden = true, value = "countBy") + @PostMapping("/countBy") + public ResponseResult countBy(@RequestBody MyQueryParam queryParam) { + return super.baseCountBy(queryParam); + } + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @ApiOperation(hidden = true, value = "aggregateBy") + @PostMapping("/aggregateBy") + public ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam) { + return super.baseAggregateBy(aggregationParam); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/StudentActionStatsController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/StudentActionStatsController.java new file mode 100644 index 00000000..147b09a6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/StudentActionStatsController.java @@ -0,0 +1,280 @@ +package com.orangeforms.statsservice.controller; + +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.statsservice.model.*; +import com.orangeforms.statsservice.service.*; +import com.orangeforms.statsapi.dto.*; +import com.orangeforms.statsapi.vo.*; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.*; +import com.orangeforms.common.core.base.controller.BaseController; +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.annotation.MyRequestBody; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 学生行为统计操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "学生行为统计管理接口") +@Slf4j +@RestController +@RequestMapping("/studentActionStats") +public class StudentActionStatsController extends BaseController { + + @Autowired + private StudentActionStatsService studentActionStatsService; + + @Override + protected IBaseService service() { + return studentActionStatsService; + } + + /** + * 列出符合过滤条件的学生行为统计列表。 + * + * @param studentActionStatsDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody StudentActionStatsDto studentActionStatsDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + StudentActionStats studentActionStatsFilter = MyModelUtil.copyTo(studentActionStatsDtoFilter, StudentActionStats.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, StudentActionStats.class); + List studentActionStatsList = + studentActionStatsService.getStudentActionStatsListWithRelation(studentActionStatsFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(studentActionStatsList, StudentActionStats.INSTANCE)); + } + + /** + * 分组列出符合过滤条件的学生行为统计列表。 + * + * @param studentActionStatsDtoFilter 过滤对象。 + * @param groupParam 分组参数。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/listWithGroup") + public ResponseResult> listWithGroup( + @MyRequestBody StudentActionStatsDto studentActionStatsDtoFilter, + @MyRequestBody(required = true) MyGroupParam groupParam, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + String orderBy = MyOrderParam.buildOrderBy(orderParam, StudentActionStats.class); + groupParam = MyGroupParam.buildGroupBy(groupParam, StudentActionStats.class); + if (groupParam == null) { + return ResponseResult.error( + ErrorCodeEnum.INVALID_ARGUMENT_FORMAT, "数据参数错误,分组参数不能为空!"); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + StudentActionStats filter = MyModelUtil.copyTo(studentActionStatsDtoFilter, StudentActionStats.class); + MyGroupCriteria criteria = groupParam.getGroupCriteria(); + List resultList = studentActionStatsService.getGroupedStudentActionStatsListWithRelation( + filter, criteria.getGroupSelect(), criteria.getGroupBy(), orderBy); + // 分页连同对象数据转换copy工作,下面的方法一并完成。 + return ResponseResult.success(MyPageUtil.makeResponseData(resultList, StudentActionStats.INSTANCE)); + } + + /** + * 查看指定学生行为统计对象详情。 + * + * @param statsId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long statsId) { + if (MyCommonUtil.existBlankArgument(statsId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + StudentActionStats studentActionStats = studentActionStatsService.getByIdWithRelation(statsId, MyRelationParam.full()); + if (studentActionStats == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + StudentActionStatsVo studentActionStatsVo = StudentActionStats.INSTANCE.fromModel(studentActionStats); + return ResponseResult.success(studentActionStatsVo); + } + + /** + * 根据主键Id集合,获取数据对象集合。仅限于微服务间远程接口调用。 + * + * @param statsIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象集合。 + */ + @ApiOperation(hidden = true, value = "listByIds") + @PostMapping("/listByIds") + public ResponseResult> listByIds( + @RequestParam Set statsIds, @RequestParam Boolean withDict) { + return super.baseListByIds(statsIds, withDict, StudentActionStats.INSTANCE); + } + + /** + * 根据主键Id,获取数据对象。仅限于微服务间远程接口调用。 + * + * @param statsId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @ApiOperation(hidden = true, value = "getById") + @PostMapping("/getById") + public ResponseResult getById( + @RequestParam Long statsId, @RequestParam Boolean withDict) { + return super.baseGetById(statsId, withDict, StudentActionStats.INSTANCE); + } + + /** + * 判断参数列表中指定的主键Id集合,是否全部存在。仅限于微服务间远程接口调用。 + * + * @param statsIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existIds") + @PostMapping("/existIds") + public ResponseResult existIds(@RequestParam Set statsIds) { + return super.baseExistIds(statsIds); + } + + /** + * 判断参数列表中指定的主键Id是否存在。仅限于微服务间远程接口调用。 + * + * @param statsId 主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existId") + @PostMapping("/existId") + public ResponseResult existId(@RequestParam Long statsId) { + return super.baseExistId(statsId); + } + + /** + * 根据最新对象列表和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedData") + @PostMapping("/verifyRelatedData") + public ResponseResult verifyRelatedData(@RequestBody StudentActionStatsDto data) { + StudentActionStats studentActionStats = MyModelUtil.copyTo(data, StudentActionStats.class); + return super.baseVerifyRelatedData(studentActionStats, StudentActionStats::getStatsId); + } + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedDataList") + @PostMapping("/verifyRelatedDataList") + public ResponseResult verifyRelatedDataList(@RequestBody List dataList) { + List studentActionStatsList = MyModelUtil.copyCollectionTo(dataList, StudentActionStats.class); + return super.baseVerifyRelatedDataList(studentActionStatsList, StudentActionStats::getStatsId); + } + + /** + * 根据主键Id删除数据。 + * + * @param statsId 主键Id。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteById") + @PostMapping("/deleteById") + public ResponseResult deleteById(@RequestParam Long statsId) throws Exception { + StudentActionStats filter = new StudentActionStats(); + filter.setStatsId(statsId); + return super.baseDeleteBy(filter); + } + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteBy") + @PostMapping("/deleteBy") + public ResponseResult deleteBy(@RequestBody StudentActionStatsDto filter) throws Exception { + return super.baseDeleteBy(MyModelUtil.copyTo(filter, StudentActionStats.class)); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listBy") + @PostMapping("/listBy") + public ResponseResult> listBy(@RequestBody MyQueryParam queryParam) { + return super.baseListBy(queryParam, StudentActionStats.INSTANCE); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listMapBy") + @PostMapping("/listMapBy") + public ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam) { + return super.baseListMapBy(queryParam, StudentActionStats.INSTANCE); + } + + /** + * 复杂的查询调用,仅返回单体记录。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含符合查询过滤条件的对象结果集。 + */ + @ApiOperation(hidden = true, value = "getBy") + @PostMapping("/getBy") + public ResponseResult getBy(@RequestBody MyQueryParam queryParam) { + return super.baseGetBy(queryParam, StudentActionStats.INSTANCE); + } + + /** + * 获取远程主对象中符合查询条件的数据数量。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @ApiOperation(hidden = true, value = "countBy") + @PostMapping("/countBy") + public ResponseResult countBy(@RequestBody MyQueryParam queryParam) { + return super.baseCountBy(queryParam); + } + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @ApiOperation(hidden = true, value = "aggregateBy") + @PostMapping("/aggregateBy") + public ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam) { + return super.baseAggregateBy(aggregationParam); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/StudentActionTransController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/StudentActionTransController.java new file mode 100644 index 00000000..cfc03280 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/controller/StudentActionTransController.java @@ -0,0 +1,367 @@ +package com.orangeforms.statsservice.controller; + +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.statsservice.model.*; +import com.orangeforms.statsservice.service.*; +import com.orangeforms.statsapi.dto.*; +import com.orangeforms.statsapi.vo.*; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.*; +import com.orangeforms.common.core.base.controller.BaseController; +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 学生行为流水操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "学生行为流水管理接口") +@Slf4j +@RestController +@RequestMapping("/studentActionTrans") +public class StudentActionTransController extends BaseController { + + @Autowired + private StudentActionTransService studentActionTransService; + + @Override + protected IBaseService service() { + return studentActionTransService; + } + + /** + * 新增学生行为流水数据。 + * + * @param studentActionTransDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @ApiOperationSupport(ignoreParameters = { + "studentActionTransDto.transId", + "studentActionTransDto.createTimeStart", + "studentActionTransDto.createTimeEnd"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add(@MyRequestBody StudentActionTransDto studentActionTransDto) { + String errorMessage = MyCommonUtil.getModelValidationError(studentActionTransDto, false); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + StudentActionTrans studentActionTrans = MyModelUtil.copyTo(studentActionTransDto, StudentActionTrans.class); + // 验证关联Id的数据合法性 + CallResult callResult = studentActionTransService.verifyAllRelatedData(studentActionTrans, null); + if (!callResult.isSuccess()) { + return ResponseResult.errorFrom(callResult); + } + studentActionTrans = studentActionTransService.saveNew(studentActionTrans); + return ResponseResult.success(studentActionTrans.getTransId()); + } + + /** + * 更新学生行为流水数据。 + * + * @param studentActionTransDto 更新对象。 + * @return 应答结果对象。 + */ + @ApiOperationSupport(ignoreParameters = { + "StudentActionTransDto.createTimeStart", + "StudentActionTransDto.createTimeEnd"}) + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update(@MyRequestBody StudentActionTransDto studentActionTransDto) { + String errorMessage = MyCommonUtil.getModelValidationError(studentActionTransDto, true); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + StudentActionTrans studentActionTrans = MyModelUtil.copyTo(studentActionTransDto, StudentActionTrans.class); + StudentActionTrans originalStudentActionTrans = studentActionTransService.getById(studentActionTrans.getTransId()); + if (originalStudentActionTrans == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = studentActionTransService.verifyAllRelatedData(studentActionTrans, originalStudentActionTrans); + if (!callResult.isSuccess()) { + return ResponseResult.errorFrom(callResult); + } + if (!studentActionTransService.update(studentActionTrans, originalStudentActionTrans)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除学生行为流水数据。 + * + * @param transId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long transId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(transId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + StudentActionTrans originalStudentActionTrans = studentActionTransService.getById(transId); + if (originalStudentActionTrans == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!studentActionTransService.remove(transId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的学生行为流水列表。 + * + * @param studentActionTransDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody StudentActionTransDto studentActionTransDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + StudentActionTrans studentActionTransFilter = MyModelUtil.copyTo(studentActionTransDtoFilter, StudentActionTrans.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, StudentActionTrans.class); + List studentActionTransList = + studentActionTransService.getStudentActionTransListWithRelation(studentActionTransFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(studentActionTransList, StudentActionTrans.INSTANCE)); + } + + /** + * 查看指定学生行为流水对象详情。 + * + * @param transId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long transId) { + if (MyCommonUtil.existBlankArgument(transId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + StudentActionTrans studentActionTrans = studentActionTransService.getByIdWithRelation(transId, MyRelationParam.full()); + if (studentActionTrans == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + StudentActionTransVo studentActionTransVo = StudentActionTrans.INSTANCE.fromModel(studentActionTrans); + return ResponseResult.success(studentActionTransVo); + } + + /** + * 根据主键Id集合,获取数据对象集合。仅限于微服务间远程接口调用。 + * + * @param transIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象集合。 + */ + @ApiOperation(hidden = true, value = "listByIds") + @PostMapping("/listByIds") + public ResponseResult> listByIds( + @RequestParam Set transIds, @RequestParam Boolean withDict) { + return super.baseListByIds(transIds, withDict, StudentActionTrans.INSTANCE); + } + + /** + * 根据主键Id,获取数据对象。仅限于微服务间远程接口调用。 + * + * @param transId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @ApiOperation(hidden = true, value = "getById") + @PostMapping("/getById") + public ResponseResult getById( + @RequestParam Long transId, @RequestParam Boolean withDict) { + return super.baseGetById(transId, withDict, StudentActionTrans.INSTANCE); + } + + /** + * 判断参数列表中指定的主键Id集合,是否全部存在。仅限于微服务间远程接口调用。 + * + * @param transIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existIds") + @PostMapping("/existIds") + public ResponseResult existIds(@RequestParam Set transIds) { + return super.baseExistIds(transIds); + } + + /** + * 判断参数列表中指定的主键Id是否存在。仅限于微服务间远程接口调用。 + * + * @param transId 主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existId") + @PostMapping("/existId") + public ResponseResult existId(@RequestParam Long transId) { + return super.baseExistId(transId); + } + + /** + * 保存或更新数据。 + * + * @param data 主键Id为null时表示新增数据,否则更新数据。 + * @return 应答结果对象,主键Id。 + */ + @ApiOperation(hidden = true, value = "saveNewOrUpdate") + @PostMapping("/saveNewOrUpdate") + public ResponseResult saveNewOrUpdate(@RequestBody StudentActionTransDto data) { + StudentActionTrans studentActionTrans = MyModelUtil.copyTo(data, StudentActionTrans.class); + service().saveNewOrUpdate(studentActionTrans, studentActionTransService::saveNew, studentActionTransService::update); + return ResponseResult.success(StudentActionTrans.INSTANCE.fromModel(studentActionTrans)); + } + + /** + * 批量新增或保存数据列表。 + * + * @param dataList 数据列表。主键Id为null时表示新增数据,否则更新数据。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "saveNewOrUpdateBatch") + @PostMapping("/saveNewOrUpdateBatch") + public ResponseResult saveNewOrUpdateBatch(@RequestBody List dataList) { + List studentActionTransList = MyModelUtil.copyCollectionTo(dataList, StudentActionTrans.class); + service().saveNewOrUpdateBatch(studentActionTransList, studentActionTransService::saveNewBatch, studentActionTransService::update); + return ResponseResult.success(); + } + + /** + * 根据最新对象列表和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedData") + @PostMapping("/verifyRelatedData") + public ResponseResult verifyRelatedData(@RequestBody StudentActionTransDto data) { + StudentActionTrans studentActionTrans = MyModelUtil.copyTo(data, StudentActionTrans.class); + return super.baseVerifyRelatedData(studentActionTrans, StudentActionTrans::getTransId); + } + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedDataList") + @PostMapping("/verifyRelatedDataList") + public ResponseResult verifyRelatedDataList(@RequestBody List dataList) { + List studentActionTransList = MyModelUtil.copyCollectionTo(dataList, StudentActionTrans.class); + return super.baseVerifyRelatedDataList(studentActionTransList, StudentActionTrans::getTransId); + } + + /** + * 根据主键Id删除数据。 + * + * @param transId 主键Id。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteById") + @PostMapping("/deleteById") + public ResponseResult deleteById(@RequestParam Long transId) throws Exception { + StudentActionTrans filter = new StudentActionTrans(); + filter.setTransId(transId); + return super.baseDeleteBy(filter); + } + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteBy") + @PostMapping("/deleteBy") + public ResponseResult deleteBy(@RequestBody StudentActionTransDto filter) throws Exception { + return super.baseDeleteBy(MyModelUtil.copyTo(filter, StudentActionTrans.class)); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listBy") + @PostMapping("/listBy") + public ResponseResult> listBy(@RequestBody MyQueryParam queryParam) { + return super.baseListBy(queryParam, StudentActionTrans.INSTANCE); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listMapBy") + @PostMapping("/listMapBy") + public ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam) { + return super.baseListMapBy(queryParam, StudentActionTrans.INSTANCE); + } + + /** + * 复杂的查询调用,仅返回单体记录。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含符合查询过滤条件的对象结果集。 + */ + @ApiOperation(hidden = true, value = "getBy") + @PostMapping("/getBy") + public ResponseResult getBy(@RequestBody MyQueryParam queryParam) { + return super.baseGetBy(queryParam, StudentActionTrans.INSTANCE); + } + + /** + * 获取远程主对象中符合查询条件的数据数量。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @ApiOperation(hidden = true, value = "countBy") + @PostMapping("/countBy") + public ResponseResult countBy(@RequestBody MyQueryParam queryParam) { + return super.baseCountBy(queryParam); + } + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @ApiOperation(hidden = true, value = "aggregateBy") + @PostMapping("/aggregateBy") + public ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam) { + return super.baseAggregateBy(aggregationParam); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/CourseTransStatsMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/CourseTransStatsMapper.java new file mode 100644 index 00000000..1862e236 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/CourseTransStatsMapper.java @@ -0,0 +1,66 @@ +package com.orangeforms.statsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.statsservice.model.CourseTransStats; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 课程统计数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface CourseTransStatsMapper extends BaseDaoMapper { + + /** + * 批量插入对象列表。 + * + * @param courseTransStatsList 新增对象列表。 + */ + void insertList(List courseTransStatsList); + + /** + * 获取分组计算后的数据对象列表。 + * + * @param courseTransStatsFilter 主表过滤对象。 + * @param groupSelect 分组显示字段列表字符串,SELECT从句的参数。 + * @param groupBy 分组字段列表字符串,GROUP BY从句的参数。 + * @param orderBy 排序字符串,ORDER BY从句的参数。 + * @return 对象列表。 + */ + List getGroupedCourseTransStatsList( + @Param("courseTransStatsFilter") CourseTransStats courseTransStatsFilter, + @Param("groupSelect") String groupSelect, + @Param("groupBy") String groupBy, + @Param("orderBy") String orderBy); + + /** + * 获取过滤后的对象列表。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param courseTransStatsFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getCourseTransStatsList( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("courseTransStatsFilter") CourseTransStats courseTransStatsFilter, + @Param("orderBy") String orderBy); + + /** + * 获取对象列表,过滤条件中包含like和between条件,以及指定属性的(in list)过滤条件。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param courseTransStatsFilter 过滤对象。 + * @return 对象列表。 + */ + Integer getCourseTransStatsCount( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("courseTransStatsFilter") CourseTransStats courseTransStatsFilter); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/GradeMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/GradeMapper.java new file mode 100644 index 00000000..bdd4a855 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/GradeMapper.java @@ -0,0 +1,22 @@ +package com.orangeforms.statsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.statsservice.model.Grade; + +import java.util.*; + +/** + * 数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface GradeMapper extends BaseDaoMapper { + + /** + * 批量插入对象列表。 + * + * @param gradeList 新增对象列表。 + */ + void insertList(List gradeList); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/StudentActionStatsMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/StudentActionStatsMapper.java new file mode 100644 index 00000000..c1bdcce2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/StudentActionStatsMapper.java @@ -0,0 +1,66 @@ +package com.orangeforms.statsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.statsservice.model.StudentActionStats; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 学生行为统计数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface StudentActionStatsMapper extends BaseDaoMapper { + + /** + * 批量插入对象列表。 + * + * @param studentActionStatsList 新增对象列表。 + */ + void insertList(List studentActionStatsList); + + /** + * 获取分组计算后的数据对象列表。 + * + * @param studentActionStatsFilter 主表过滤对象。 + * @param groupSelect 分组显示字段列表字符串,SELECT从句的参数。 + * @param groupBy 分组字段列表字符串,GROUP BY从句的参数。 + * @param orderBy 排序字符串,ORDER BY从句的参数。 + * @return 对象列表。 + */ + List getGroupedStudentActionStatsList( + @Param("studentActionStatsFilter") StudentActionStats studentActionStatsFilter, + @Param("groupSelect") String groupSelect, + @Param("groupBy") String groupBy, + @Param("orderBy") String orderBy); + + /** + * 获取过滤后的对象列表。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param studentActionStatsFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getStudentActionStatsList( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("studentActionStatsFilter") StudentActionStats studentActionStatsFilter, + @Param("orderBy") String orderBy); + + /** + * 获取对象列表,过滤条件中包含like和between条件,以及指定属性的(in list)过滤条件。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param studentActionStatsFilter 过滤对象。 + * @return 对象列表。 + */ + Integer getStudentActionStatsCount( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("studentActionStatsFilter") StudentActionStats studentActionStatsFilter); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/StudentActionTransMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/StudentActionTransMapper.java new file mode 100644 index 00000000..c6b71cd6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/StudentActionTransMapper.java @@ -0,0 +1,51 @@ +package com.orangeforms.statsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.statsservice.model.StudentActionTrans; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 学生行为流水数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface StudentActionTransMapper extends BaseDaoMapper { + + /** + * 批量插入对象列表。 + * + * @param studentActionTransList 新增对象列表。 + */ + void insertList(List studentActionTransList); + + /** + * 获取过滤后的对象列表。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param studentActionTransFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getStudentActionTransList( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("studentActionTransFilter") StudentActionTrans studentActionTransFilter, + @Param("orderBy") String orderBy); + + /** + * 获取对象列表,过滤条件中包含like和between条件,以及指定属性的(in list)过滤条件。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param studentActionTransFilter 过滤对象。 + * @return 对象列表。 + */ + Integer getStudentActionTransCount( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("studentActionTransFilter") StudentActionTrans studentActionTransFilter); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/CourseTransStatsMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/CourseTransStatsMapper.xml new file mode 100644 index 00000000..7f4cb59d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/CourseTransStatsMapper.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + INSERT INTO zz_course_trans_stats + (stats_id, + stats_date, + subject_id, + grade_id, + grade_name, + course_id, + course_name, + student_attend_count, + student_flower_amount, + student_flower_count) + VALUES + + (#{item.statsId}, + #{item.statsDate}, + #{item.subjectId}, + #{item.gradeId}, + #{item.gradeName}, + #{item.courseId}, + #{item.courseName}, + #{item.studentAttendCount}, + #{item.studentFlowerAmount}, + #{item.studentFlowerCount}) + + + + + + + + + + + + + + AND zz_course_trans_stats.stats_date >= #{courseTransStatsFilter.statsDateStart} + + + AND zz_course_trans_stats.stats_date <= #{courseTransStatsFilter.statsDateEnd} + + + AND zz_course_trans_stats.subject_id = #{courseTransStatsFilter.subjectId} + + + AND zz_course_trans_stats.grade_id = #{courseTransStatsFilter.gradeId} + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/GradeMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/GradeMapper.xml new file mode 100644 index 00000000..a74dd03e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/GradeMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + INSERT INTO zz_grade + (grade_id, + grade_name, + status) + VALUES + + (#{item.gradeId}, + #{item.gradeName}, + #{item.status}) + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/StudentActionStatsMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/StudentActionStatsMapper.xml new file mode 100644 index 00000000..845c85ca --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/StudentActionStatsMapper.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO zz_student_action_stats + (stats_id, + stats_date, + stats_month, + grade_id, + province_id, + city_id, + buy_course_amount, + buy_course_count, + buy_video_amount, + buy_video_count, + buy_paper_amount, + buy_paper_count, + buy_flower_amount, + buy_flower_count, + recharge_coin_amount, + recharge_coin_count, + do_course_count, + watch_video_count, + watch_video_total_second, + do_exercise_count, + do_exercise_correct_count) + VALUES + + (#{item.statsId}, + #{item.statsDate}, + #{item.statsMonth}, + #{item.gradeId}, + #{item.provinceId}, + #{item.cityId}, + #{item.buyCourseAmount}, + #{item.buyCourseCount}, + #{item.buyVideoAmount}, + #{item.buyVideoCount}, + #{item.buyPaperAmount}, + #{item.buyPaperCount}, + #{item.buyFlowerAmount}, + #{item.buyFlowerCount}, + #{item.rechargeCoinAmount}, + #{item.rechargeCoinCount}, + #{item.doCourseCount}, + #{item.watchVideoCount}, + #{item.watchVideoTotalSecond}, + #{item.doExerciseCount}, + #{item.doExerciseCorrectCount}) + + + + + + + + + + + + + + AND zz_student_action_stats.stats_date >= #{studentActionStatsFilter.statsDateStart} + + + AND zz_student_action_stats.stats_date <= #{studentActionStatsFilter.statsDateEnd} + + + AND zz_student_action_stats.grade_id = #{studentActionStatsFilter.gradeId} + + + AND zz_student_action_stats.province_id = #{studentActionStatsFilter.provinceId} + + + AND zz_student_action_stats.city_id = #{studentActionStatsFilter.cityId} + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/StudentActionTransMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/StudentActionTransMapper.xml new file mode 100644 index 00000000..5e6ba1c7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/dao/mapper/StudentActionTransMapper.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO zz_student_action_trans + (trans_id, + student_id, + student_name, + school_id, + grade_id, + action_type, + device_type, + watch_video_seconds, + flower_count, + paper_count, + video_count, + course_count, + coin_count, + exercise_correct_flag, + create_time) + VALUES + + (#{item.transId}, + #{item.studentId}, + #{item.studentName}, + #{item.schoolId}, + #{item.gradeId}, + #{item.actionType}, + #{item.deviceType}, + #{item.watchVideoSeconds}, + #{item.flowerCount}, + #{item.paperCount}, + #{item.videoCount}, + #{item.courseCount}, + #{item.coinCount}, + #{item.exerciseCorrectFlag}, + #{item.createTime}) + + + + + + + + + + + + + + AND zz_student_action_trans.student_id = #{studentActionTransFilter.studentId} + + + AND zz_student_action_trans.school_id = #{studentActionTransFilter.schoolId} + + + AND zz_student_action_trans.grade_id = #{studentActionTransFilter.gradeId} + + + AND zz_student_action_trans.action_type = #{studentActionTransFilter.actionType} + + + AND zz_student_action_trans.device_type = #{studentActionTransFilter.deviceType} + + + AND zz_student_action_trans.create_time >= #{studentActionTransFilter.createTimeStart} + + + AND zz_student_action_trans.create_time <= #{studentActionTransFilter.createTimeEnd} + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/CourseTransStats.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/CourseTransStats.java new file mode 100644 index 00000000..60b97a25 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/CourseTransStats.java @@ -0,0 +1,145 @@ +package com.orangeforms.statsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.statsapi.vo.CourseTransStatsVo; +import com.orangeforms.courseclassapi.vo.CourseVo; +import com.orangeforms.courseclassapi.client.CourseClient; +import com.orangeforms.courseclassapi.vo.GradeVo; +import com.orangeforms.courseclassapi.client.GradeClient; +import com.orangeforms.application.common.constant.Subject; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * CourseTransStats实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_course_trans_stats") +public class CourseTransStats { + + /** + * 主键Id。 + */ + @TableId(value = "stats_id", type = IdType.AUTO) + private Long statsId; + + /** + * 统计日期。 + */ + @TableField(value = "stats_date") + private Date statsDate; + + /** + * 科目Id。 + */ + @TableField(value = "subject_id") + private Integer subjectId; + + /** + * 年级Id。 + */ + @TableField(value = "grade_id") + private Integer gradeId; + + /** + * 年级名称。 + */ + @TableField(value = "grade_name") + private String gradeName; + + /** + * 课程Id。 + */ + @TableField(value = "course_id") + private Long courseId; + + /** + * 课程名称。 + */ + @TableField(value = "course_name") + private String courseName; + + /** + * 学生上课次数。 + */ + @TableField(value = "student_attend_count") + private Integer studentAttendCount; + + /** + * 学生献花数量。 + */ + @TableField(value = "student_flower_amount") + private Integer studentFlowerAmount; + + /** + * 学生献花次数。 + */ + @TableField(value = "student_flower_count") + private Integer studentFlowerCount; + + /** + * statsDate 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String statsDateStart; + + /** + * statsDate 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String statsDateEnd; + + @RelationDict( + masterIdField = "gradeId", + slaveClientClass = GradeClient.class, + slaveModelClass = GradeVo.class, + slaveIdField = "gradeId", + slaveNameField = "gradeName") + @TableField(exist = false) + private Map gradeIdDictMap; + + @RelationDict( + masterIdField = "courseId", + slaveClientClass = CourseClient.class, + slaveModelClass = CourseVo.class, + slaveIdField = "courseId", + slaveNameField = "courseName") + @TableField(exist = false) + private Map courseIdDictMap; + + @RelationConstDict( + masterIdField = "subjectId", + constantDictClass = Subject.class) + @TableField(exist = false) + private Map subjectIdDictMap; + + @Mapper + public interface CourseTransStatsModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param courseTransStatsVo 域对象。 + * @return 实体对象。 + */ + @Override + CourseTransStats toModel(CourseTransStatsVo courseTransStatsVo); + /** + * 转换实体对象到VO对象。 + * + * @param courseTransStats 实体对象。 + * @return 域对象。 + */ + @Override + CourseTransStatsVo fromModel(CourseTransStats courseTransStats); + } + public static final CourseTransStatsModelMapper INSTANCE = Mappers.getMapper(CourseTransStatsModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/Grade.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/Grade.java new file mode 100644 index 00000000..9c3caf0f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/Grade.java @@ -0,0 +1,33 @@ +package com.orangeforms.statsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * Grade实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_grade") +public class Grade { + + /** + * 主键Id。 + */ + @TableId(value = "grade_id", type = IdType.AUTO) + private Integer gradeId; + + /** + * 年级名称。 + */ + @TableField(value = "grade_name") + private String gradeName; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + private Integer status; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/StudentActionStats.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/StudentActionStats.java new file mode 100644 index 00000000..83580dd5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/StudentActionStats.java @@ -0,0 +1,213 @@ +package com.orangeforms.statsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.statsapi.vo.StudentActionStatsVo; +import com.orangeforms.courseclassapi.vo.AreaCodeVo; +import com.orangeforms.courseclassapi.vo.GradeVo; +import com.orangeforms.courseclassapi.client.AreaCodeClient; +import com.orangeforms.courseclassapi.client.GradeClient; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * StudentActionStats实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_student_action_stats") +public class StudentActionStats { + + /** + * 主键Id。 + */ + @TableId(value = "stats_id") + private Long statsId; + + /** + * 统计日期。 + */ + @TableField(value = "stats_date") + private Date statsDate; + + /** + * 统计小时。 + */ + @TableField(value = "stats_month") + private Date statsMonth; + + /** + * 年级Id。 + */ + @TableField(value = "grade_id") + private Integer gradeId; + + /** + * 学生所在省Id。 + */ + @TableField(value = "province_id") + private Long provinceId; + + /** + * 学生所在城市Id。 + */ + @TableField(value = "city_id") + private Long cityId; + + /** + * 购课学币数量。 + */ + @TableField(value = "buy_course_amount") + private Integer buyCourseAmount; + + /** + * 购买课程次数。 + */ + @TableField(value = "buy_course_count") + private Integer buyCourseCount; + + /** + * 购买视频学币数量。 + */ + @TableField(value = "buy_video_amount") + private Integer buyVideoAmount; + + /** + * 购买视频次数。 + */ + @TableField(value = "buy_video_count") + private Integer buyVideoCount; + + /** + * 购买作业学币数量。 + */ + @TableField(value = "buy_paper_amount") + private Integer buyPaperAmount; + + /** + * 购买作业次数。 + */ + @TableField(value = "buy_paper_count") + private Integer buyPaperCount; + + /** + * 购买献花数量。 + */ + @TableField(value = "buy_flower_amount") + private Integer buyFlowerAmount; + + /** + * 购买献花次数。 + */ + @TableField(value = "buy_flower_count") + private Integer buyFlowerCount; + + /** + * 充值学币数量。 + */ + @TableField(value = "recharge_coin_amount") + private Integer rechargeCoinAmount; + + /** + * 充值学币次数。 + */ + @TableField(value = "recharge_coin_count") + private Integer rechargeCoinCount; + + /** + * 线下课程上课次数。 + */ + @TableField(value = "do_course_count") + private Integer doCourseCount; + + /** + * 观看视频次数。 + */ + @TableField(value = "watch_video_count") + private Integer watchVideoCount; + + /** + * 购买献花消费学币数量。 + */ + @TableField(value = "watch_video_total_second") + private Integer watchVideoTotalSecond; + + /** + * 做题数量。 + */ + @TableField(value = "do_exercise_count") + private Integer doExerciseCount; + + /** + * 做题正确的数量。 + */ + @TableField(value = "do_exercise_correct_count") + private Integer doExerciseCorrectCount; + + /** + * statsDate 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String statsDateStart; + + /** + * statsDate 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String statsDateEnd; + + @RelationDict( + masterIdField = "gradeId", + slaveClientClass = GradeClient.class, + slaveModelClass = GradeVo.class, + slaveIdField = "gradeId", + slaveNameField = "gradeName") + @TableField(exist = false) + private Map gradeIdDictMap; + + @RelationDict( + masterIdField = "provinceId", + slaveClientClass = AreaCodeClient.class, + slaveModelClass = AreaCodeVo.class, + slaveIdField = "areaId", + slaveNameField = "areaName") + @TableField(exist = false) + private Map provinceIdDictMap; + + @RelationDict( + masterIdField = "cityId", + slaveClientClass = AreaCodeClient.class, + slaveModelClass = AreaCodeVo.class, + slaveIdField = "areaId", + slaveNameField = "areaName") + @TableField(exist = false) + private Map cityIdDictMap; + + @Mapper + public interface StudentActionStatsModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param studentActionStatsVo 域对象。 + * @return 实体对象。 + */ + @Override + StudentActionStats toModel(StudentActionStatsVo studentActionStatsVo); + /** + * 转换实体对象到VO对象。 + * + * @param studentActionStats 实体对象。 + * @return 域对象。 + */ + @Override + StudentActionStatsVo fromModel(StudentActionStats studentActionStats); + } + public static final StudentActionStatsModelMapper INSTANCE = Mappers.getMapper(StudentActionStatsModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/StudentActionTrans.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/StudentActionTrans.java new file mode 100644 index 00000000..af1602a6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/model/StudentActionTrans.java @@ -0,0 +1,182 @@ +package com.orangeforms.statsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.statsapi.vo.StudentActionTransVo; +import com.orangeforms.upmsapi.client.SysDeptClient; +import com.orangeforms.upmsapi.vo.SysDeptVo; +import com.orangeforms.courseclassapi.vo.GradeVo; +import com.orangeforms.courseclassapi.client.GradeClient; +import com.orangeforms.application.common.constant.StudentActionType; +import com.orangeforms.application.common.constant.DeviceType; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import lombok.Data; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * StudentActionTrans实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_student_action_trans") +public class StudentActionTrans { + + /** + * 主键Id。 + */ + @TableId(value = "trans_id") + private Long transId; + + /** + * 学生Id。 + */ + @TableField(value = "student_id") + private Long studentId; + + /** + * 学生名称。 + */ + @TableField(value = "student_name") + private String studentName; + + /** + * 学生校区。 + */ + @TableField(value = "school_id") + private Long schoolId; + + /** + * 年级Id。 + */ + @TableField(value = "grade_id") + private Integer gradeId; + + /** + * 行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)。 + */ + @TableField(value = "action_type") + private Integer actionType; + + /** + * 设备类型(0: iOS 1: Android 2: PC)。 + */ + @TableField(value = "device_type") + private Integer deviceType; + + /** + * 看视频秒数。 + */ + @TableField(value = "watch_video_seconds") + private Integer watchVideoSeconds; + + /** + * 购买献花数量。 + */ + @TableField(value = "flower_count") + private Integer flowerCount; + + /** + * 购买作业数量。 + */ + @TableField(value = "paper_count") + private Integer paperCount; + + /** + * 购买视频数量。 + */ + @TableField(value = "video_count") + private Integer videoCount; + + /** + * 购买课程数量。 + */ + @TableField(value = "course_count") + private Integer courseCount; + + /** + * 充值学币数量。 + */ + @TableField(value = "coin_count") + private Integer coinCount; + + /** + * 做题是否正确标记。 + */ + @TableField(value = "exercise_correct_flag") + private Integer exerciseCorrectFlag; + + /** + * 发生时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * createTime 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String createTimeEnd; + + @RelationDict( + masterIdField = "schoolId", + slaveClientClass = SysDeptClient.class, + slaveModelClass = SysDeptVo.class, + slaveIdField = "deptId", + slaveNameField = "deptName") + @TableField(exist = false) + private Map schoolIdDictMap; + + @RelationDict( + masterIdField = "gradeId", + slaveClientClass = GradeClient.class, + slaveModelClass = GradeVo.class, + slaveIdField = "gradeId", + slaveNameField = "gradeName") + @TableField(exist = false) + private Map gradeIdDictMap; + + @RelationConstDict( + masterIdField = "actionType", + constantDictClass = StudentActionType.class) + @TableField(exist = false) + private Map actionTypeDictMap; + + @RelationConstDict( + masterIdField = "deviceType", + constantDictClass = DeviceType.class) + @TableField(exist = false) + private Map deviceTypeDictMap; + + @Mapper + public interface StudentActionTransModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param studentActionTransVo 域对象。 + * @return 实体对象。 + */ + @Override + StudentActionTrans toModel(StudentActionTransVo studentActionTransVo); + /** + * 转换实体对象到VO对象。 + * + * @param studentActionTrans 实体对象。 + * @return 域对象。 + */ + @Override + StudentActionTransVo fromModel(StudentActionTrans studentActionTrans); + } + public static final StudentActionTransModelMapper INSTANCE = Mappers.getMapper(StudentActionTransModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/CourseTransStatsService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/CourseTransStatsService.java new file mode 100644 index 00000000..6f91a932 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/CourseTransStatsService.java @@ -0,0 +1,74 @@ +package com.orangeforms.statsservice.service; + +import com.orangeforms.statsservice.model.*; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 课程统计数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface CourseTransStatsService extends IBaseService { + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseTransStatsListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getCourseTransStatsList(CourseTransStats filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseTransStatsListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getCourseTransStatsList(String inFilterField, Set inFilterValues, CourseTransStats filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getCourseTransStatsList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getCourseTransStatsListWithRelation(CourseTransStats filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getCourseTransStatsList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getCourseTransStatsListWithRelation( + String inFilterField, Set inFilterValues, CourseTransStats filter, String orderBy); + + /** + * 获取分组过滤后的数据查询结果,以及关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param filter 过滤对象。 + * @param groupSelect 分组显示列表参数。位于SQL语句SELECT的后面。 + * @param groupBy 分组参数。位于SQL语句的GROUP BY后面。 + * @param orderBy 排序字符串,ORDER BY从句的参数。 + * @return 分组过滤结果集。 + */ + List getGroupedCourseTransStatsListWithRelation( + CourseTransStats filter, String groupSelect, String groupBy, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/StudentActionStatsService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/StudentActionStatsService.java new file mode 100644 index 00000000..c2972e08 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/StudentActionStatsService.java @@ -0,0 +1,74 @@ +package com.orangeforms.statsservice.service; + +import com.orangeforms.statsservice.model.*; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 学生行为统计数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface StudentActionStatsService extends IBaseService { + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionStatsListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentActionStatsList(StudentActionStats filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionStatsListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentActionStatsList(String inFilterField, Set inFilterValues, StudentActionStats filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionStatsList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentActionStatsListWithRelation(StudentActionStats filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionStatsList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentActionStatsListWithRelation( + String inFilterField, Set inFilterValues, StudentActionStats filter, String orderBy); + + /** + * 获取分组过滤后的数据查询结果,以及关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param filter 过滤对象。 + * @param groupSelect 分组显示列表参数。位于SQL语句SELECT的后面。 + * @param groupBy 分组参数。位于SQL语句的GROUP BY后面。 + * @param orderBy 排序字符串,ORDER BY从句的参数。 + * @return 分组过滤结果集。 + */ + List getGroupedStudentActionStatsListWithRelation( + StudentActionStats filter, String groupSelect, String groupBy, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/StudentActionTransService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/StudentActionTransService.java new file mode 100644 index 00000000..631aa41f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/StudentActionTransService.java @@ -0,0 +1,94 @@ +package com.orangeforms.statsservice.service; + +import com.orangeforms.statsservice.model.*; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 学生行为流水数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface StudentActionTransService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param studentActionTrans 新增对象。 + * @return 返回新增对象。 + */ + StudentActionTrans saveNew(StudentActionTrans studentActionTrans); + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param studentActionTransList 新增对象列表。 + */ + void saveNewBatch(List studentActionTransList); + + /** + * 更新数据对象。 + * + * @param studentActionTrans 更新的对象。 + * @param originalStudentActionTrans 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(StudentActionTrans studentActionTrans, StudentActionTrans originalStudentActionTrans); + + /** + * 删除指定数据。 + * + * @param transId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long transId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionTransListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentActionTransList(StudentActionTrans filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionTransListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getStudentActionTransList(String inFilterField, Set inFilterValues, StudentActionTrans filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionTransList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentActionTransListWithRelation(StudentActionTrans filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionTransList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getStudentActionTransListWithRelation( + String inFilterField, Set inFilterValues, StudentActionTrans filter, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/CourseTransStatsServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/CourseTransStatsServiceImpl.java new file mode 100644 index 00000000..17af578c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/CourseTransStatsServiceImpl.java @@ -0,0 +1,136 @@ +package com.orangeforms.statsservice.service.impl; + +import com.orangeforms.statsservice.service.*; +import com.orangeforms.statsservice.dao.*; +import com.orangeforms.statsservice.model.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import lombok.extern.slf4j.Slf4j; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 课程统计数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("courseTransStatsService") +public class CourseTransStatsServiceImpl extends BaseService implements CourseTransStatsService { + + @Autowired + private CourseTransStatsMapper courseTransStatsMapper; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return courseTransStatsMapper; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseTransStatsListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getCourseTransStatsList(CourseTransStats filter, String orderBy) { + return courseTransStatsMapper.getCourseTransStatsList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getCourseTransStatsListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getCourseTransStatsList( + String inFilterField, Set inFilterValues, CourseTransStats filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, CourseTransStats.class); + return courseTransStatsMapper.getCourseTransStatsList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getCourseTransStatsList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getCourseTransStatsListWithRelation(CourseTransStats filter, String orderBy) { + List resultList = courseTransStatsMapper.getCourseTransStatsList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getCourseTransStatsList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getCourseTransStatsListWithRelation( + String inFilterField, Set inFilterValues, CourseTransStats filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, CourseTransStats.class); + List resultList = + courseTransStatsMapper.getCourseTransStatsList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 获取分组过滤后的数据查询结果,以及关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param filter 过滤对象。 + * @param groupSelect 分组显示列表参数。位于SQL语句SELECT的后面。 + * @param groupBy 分组参数。位于SQL语句的GROUP BY后面。 + * @param orderBy 排序字符串,ORDER BY从句的参数。 + * @return 分组过滤结果集。 + */ + @Override + public List getGroupedCourseTransStatsListWithRelation( + CourseTransStats filter, String groupSelect, String groupBy, String orderBy) { + List resultList = + courseTransStatsMapper.getGroupedCourseTransStatsList(filter, groupSelect, groupBy, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + // NOTE: 这里只是包含了本地关联数据和远程关联数据,本地聚合计算数据和远程聚合计算数据没有包含。 + // 主要原因是,由于聚合字段通常被视为普通字段使用,不会在group by的从句中出现,语义上也不会在此关联。 + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/StudentActionStatsServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/StudentActionStatsServiceImpl.java new file mode 100644 index 00000000..f0d089c7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/StudentActionStatsServiceImpl.java @@ -0,0 +1,136 @@ +package com.orangeforms.statsservice.service.impl; + +import com.orangeforms.statsservice.service.*; +import com.orangeforms.statsservice.dao.*; +import com.orangeforms.statsservice.model.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import lombok.extern.slf4j.Slf4j; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 学生行为统计数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("studentActionStatsService") +public class StudentActionStatsServiceImpl extends BaseService implements StudentActionStatsService { + + @Autowired + private StudentActionStatsMapper studentActionStatsMapper; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return studentActionStatsMapper; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionStatsListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionStatsList(StudentActionStats filter, String orderBy) { + return studentActionStatsMapper.getStudentActionStatsList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionStatsListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionStatsList( + String inFilterField, Set inFilterValues, StudentActionStats filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, StudentActionStats.class); + return studentActionStatsMapper.getStudentActionStatsList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionStatsList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionStatsListWithRelation(StudentActionStats filter, String orderBy) { + List resultList = studentActionStatsMapper.getStudentActionStatsList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionStatsList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionStatsListWithRelation( + String inFilterField, Set inFilterValues, StudentActionStats filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, StudentActionStats.class); + List resultList = + studentActionStatsMapper.getStudentActionStatsList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 获取分组过滤后的数据查询结果,以及关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param filter 过滤对象。 + * @param groupSelect 分组显示列表参数。位于SQL语句SELECT的后面。 + * @param groupBy 分组参数。位于SQL语句的GROUP BY后面。 + * @param orderBy 排序字符串,ORDER BY从句的参数。 + * @return 分组过滤结果集。 + */ + @Override + public List getGroupedStudentActionStatsListWithRelation( + StudentActionStats filter, String groupSelect, String groupBy, String orderBy) { + List resultList = + studentActionStatsMapper.getGroupedStudentActionStatsList(filter, groupSelect, groupBy, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + // NOTE: 这里只是包含了本地关联数据和远程关联数据,本地聚合计算数据和远程聚合计算数据没有包含。 + // 主要原因是,由于聚合字段通常被视为普通字段使用,不会在group by的从句中出现,语义上也不会在此关联。 + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/StudentActionTransServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/StudentActionTransServiceImpl.java new file mode 100644 index 00000000..fcefb675 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/java/com/orangeforms/statsservice/service/impl/StudentActionTransServiceImpl.java @@ -0,0 +1,215 @@ +package com.orangeforms.statsservice.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.statsservice.service.*; +import com.orangeforms.statsservice.dao.*; +import com.orangeforms.statsservice.model.*; +import com.orangeforms.upmsapi.client.*; +import com.orangeforms.courseclassapi.client.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 学生行为流水数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("studentActionTransService") +public class StudentActionTransServiceImpl extends BaseService implements StudentActionTransService { + + @Autowired + private StudentActionTransMapper studentActionTransMapper; + @Autowired + private SysDeptClient sysDeptClient; + @Autowired + private GradeClient gradeClient; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return studentActionTransMapper; + } + + /** + * 保存新增对象。 + * + * @param studentActionTrans 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public StudentActionTrans saveNew(StudentActionTrans studentActionTrans) { + studentActionTransMapper.insert(this.buildDefaultValue(studentActionTrans)); + return studentActionTrans; + } + + /** + * 利用数据库的insertList语法,批量插入对象列表。 + * + * @param studentActionTransList 新增对象列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewBatch(List studentActionTransList) { + if (CollUtil.isNotEmpty(studentActionTransList)) { + studentActionTransList.forEach(this::buildDefaultValue); + studentActionTransMapper.insertList(studentActionTransList); + } + } + + /** + * 更新数据对象。 + * + * @param studentActionTrans 更新的对象。 + * @param originalStudentActionTrans 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(StudentActionTrans studentActionTrans, StudentActionTrans originalStudentActionTrans) { + studentActionTrans.setCreateTime(originalStudentActionTrans.getCreateTime()); + // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。 + UpdateWrapper uw = this.createUpdateQueryForNullValue(studentActionTrans, studentActionTrans.getTransId()); + return studentActionTransMapper.update(studentActionTrans, uw) == 1; + } + + /** + * 删除指定数据。 + * + * @param transId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long transId) { + return studentActionTransMapper.deleteById(transId) == 1; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionTransListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionTransList(StudentActionTrans filter, String orderBy) { + return studentActionTransMapper.getStudentActionTransList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getStudentActionTransListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionTransList( + String inFilterField, Set inFilterValues, StudentActionTrans filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, StudentActionTrans.class); + return studentActionTransMapper.getStudentActionTransList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionTransList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionTransListWithRelation(StudentActionTrans filter, String orderBy) { + List resultList = studentActionTransMapper.getStudentActionTransList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getStudentActionTransList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getStudentActionTransListWithRelation( + String inFilterField, Set inFilterValues, StudentActionTrans filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, StudentActionTrans.class); + List resultList = + studentActionTransMapper.getStudentActionTransList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 根据最新对象和原有对象的数据对比,判断关联的远程字典数据和多对一主表数据是否都是合法数据。 + * + * @param studentActionTrans 最新数据对象。 + * @param originalStudentActionTrans 原有数据对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + @Override + public CallResult verifyRemoteRelatedData(StudentActionTrans studentActionTrans, StudentActionTrans originalStudentActionTrans) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + if (this.needToVerify(studentActionTrans, originalStudentActionTrans, StudentActionTrans::getSchoolId)) { + ResponseResult responseResult = + sysDeptClient.existId(studentActionTrans.getSchoolId()); + if (this.hasErrorOfVerifyRemoteRelatedData(responseResult)) { + return CallResult.error(String.format(errorMessageFormat, "学生校区")); + } + } + if (this.needToVerify(studentActionTrans, originalStudentActionTrans, StudentActionTrans::getGradeId)) { + ResponseResult responseResult = + gradeClient.existId(studentActionTrans.getGradeId()); + if (this.hasErrorOfVerifyRemoteRelatedData(responseResult)) { + return CallResult.error(String.format(errorMessageFormat, "所属年级")); + } + } + return CallResult.ok(); + } + + private StudentActionTrans buildDefaultValue(StudentActionTrans studentActionTrans) { + studentActionTrans.setTransId(idGenerator.nextLongId()); + studentActionTrans.setCreateTime(new Date()); + return studentActionTrans; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/bootstrap.yml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..b572903a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/bootstrap.yml @@ -0,0 +1,30 @@ +spring: + application: + name: stats + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: localhost:8848 + config: + server-addr: localhost:8848 + file-extension: yaml + # 共享配置文件,排序越高后,优先级越高。 + shared-configs: + - data-id: application-dev.yaml + group: DEFAULT_GROUP + refresh: true + sentinel: + eager: true + datasource: + ds1: + nacos: + server-addr: localhost:8848 + data-id: ${spring.application.name}-dev-sentinel + group-id: DEFAULT_GROUP + data-type: json + # 如果是降级服务,需要改为degrade + rule-type: flow + main: + allow-bean-definition-overriding: true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/log4j2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/log4j2.xml new file mode 100644 index 00000000..a65c063b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/log4j2.xml @@ -0,0 +1,79 @@ + + + + + + + + + + ./zzlogs/stats + + ./zzlogs/stats/backup + + info + + + + + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] T:[%X{traceId}] S:[%X{sessionId}] U:[%X{userId}] [%t] ==> [%traceId] %msg%n + + + 31 + + 20M + + + + + + + localhost:9092 + 10000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/template/views/print_error.ftl b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/template/views/print_error.ftl new file mode 100644 index 00000000..af8b36a7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/src/main/resources/template/views/print_error.ftl @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
天津公安警官职业学院2017—2018学年度第一学期课程表
班 级星期一星期二星期三星期四星期五
第1节第2节第3节第1节第2节第3节第1节第2节第3节第1节第2节第3节第1节第2节
16 级 刑 事 技 术 班 课程刑法自习刑事图像民 法(选修)派出所工作刑事图像法医学派出所工作法医学国内安全保卫体能自习刑事技术总论刑法
自习自习自习
教师曾岚陈磊邵刚杨丽伟陈磊于辉杨丽伟于辉朱学强张付海王 伟(刑技)曾岚
   
教室206206206206206206206206206操场206206
   
16 级 刑 事 侦 查 课程自习侦查措施经济案件侦查公安信息化公安信息化刑法体能自习痕迹检验刑法国内安全保卫经济案件侦查痕迹检验民 法(选修)
侦查措施
教师徐宏涛张静赵晓松赵晓松王骏强张付海郭海川王骏强朱学强张静郭海川邵刚
徐宏涛
教室2022023号机房3号机房202操场202202202202202202
16 级 治 安 管 理 班 课程刑事技术体能刑事技术治安秩序管理刑事侦查概论刑法群众工作与纠纷调解群众工作与纠纷调解公共关系(选修)刑事侦查概论刑法自习自习自习
q
教师郭海川 韩易浦张付海郭海川 韩易浦翟政亮邵妍薛强刘晓鹏刘晓鹏尚欣邵妍薛强
翟政亮
教室218操场218218218218218218218218218
16 网 络 安 全 监 察 1 班课程应用写作数据库系统应用周二中午:计算机安全管理及实用技术刑事诉讼法周一中午:数据库系统应用民法体育VB语言程序设计选修VB语言程序设计刑事诉讼法选修应用写作犯罪心理
民法犯罪心理
教师关利杨斌赵晓松王伟杨斌李静程军赵伟赵伟王伟关利张学林
李静张学林
教室东阶梯2号机房主楼2011012号机房101操场3号机房3号机房101东阶梯主楼201
主楼201
注:1、课程一栏中有两科次的,上面的课程单周上课,下面的课程双周上课。2、每天上课时间:上午第1节8:30至9:55;第2节10:15至11:40;中午上课时间12:30至13:55;下午第3节14:00至15:25。
+ + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/stats-service.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/stats-service.iml new file mode 100644 index 00000000..f0671b88 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats-service/stats-service.iml @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats.iml new file mode 100644 index 00000000..851d7040 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/stats/stats.iml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/pom.xml new file mode 100644 index 00000000..ef313dd2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/pom.xml @@ -0,0 +1,18 @@ + + + + com.orangeforms + application + 1.0.0 + + 4.0.0 + + upms + pom + + + upms-api + upms-service + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/pom.xml new file mode 100644 index 00000000..ef8c7bbd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/pom.xml @@ -0,0 +1,40 @@ + + + + com.orangeforms + upms + 1.0.0 + + 4.0.0 + + upms-api + 1.0.0 + upms-api + jar + + + + com.orangeforms + common-core + 1.0.0 + + + com.orangeforms + common-datafilter + 1.0.0 + + + + com.orangeforms + application-common + 1.0.0 + + + + com.orangeforms + common-swagger + 1.0.0 + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/client/SysDeptClient.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/client/SysDeptClient.java new file mode 100644 index 00000000..ca565002 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/client/SysDeptClient.java @@ -0,0 +1,178 @@ +package com.orangeforms.upmsapi.client; + +import com.orangeforms.common.core.base.client.BaseFallbackFactory; +import com.orangeforms.common.core.config.FeignConfig; +import com.orangeforms.common.core.base.client.BaseClient; +import com.orangeforms.common.core.object.*; +import com.orangeforms.upmsapi.dto.SysDeptDto; +import com.orangeforms.upmsapi.vo.SysDeptVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 部门管理服务远程数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +@FeignClient( + name = "upms", + configuration = FeignConfig.class, + fallbackFactory = SysDeptClient.SysDeptClientFallbackFactory.class) +public interface SysDeptClient extends BaseClient { + + /** + * 基于主键的(In-list)条件获取远程数据接口。 + * + * @param deptIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象的数据集合。 + */ + @Override + @PostMapping("/sysDept/listByIds") + ResponseResult> listByIds( + @RequestParam("deptIds") Set deptIds, + @RequestParam("withDict") Boolean withDict); + + /** + * 基于主键Id,获取远程对象。 + * + * @param deptId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @Override + @PostMapping("/sysDept/getById") + ResponseResult getById( + @RequestParam("deptId") Long deptId, + @RequestParam("withDict") Boolean withDict); + + /** + * 判断参数列表中指定的主键Id,是否都存在。 + * + * @param deptIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @Override + @PostMapping("/sysDept/existIds") + ResponseResult existIds(@RequestParam("deptIds") Set deptIds); + + /** + * 判断主键Id是否存在。 + * + * @param deptId 参数主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @Override + @PostMapping("/sysDept/existId") + ResponseResult existId(@RequestParam("deptId") Long deptId); + + /** + * 根据最新对象和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/sysDept/verifyRelatedData") + ResponseResult verifyRelatedData(@RequestBody SysDeptDto data); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/sysDept/verifyRelatedDataList") + ResponseResult verifyRelatedDataList(@RequestBody List dataList); + + /** + * 删除主键Id关联的对象。 + * + * @param deptId 主键Id。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/sysDept/deleteById") + ResponseResult deleteById(@RequestParam("deptId") Long deptId); + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含删除数量。 + */ + @Override + @PostMapping("/sysDept/deleteBy") + ResponseResult deleteBy(@RequestBody SysDeptDto filter); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象集合。 + */ + @Override + @PostMapping("/sysDept/listBy") + ResponseResult> listBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的单条数据对象。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象。 + */ + @Override + @PostMapping("/sysDept/getBy") + ResponseResult getBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * 和listBy接口相比,以Map列表的方式返回的主要目的是,降低服务之间的耦合度。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含主对象集合。 + */ + @Override + @PostMapping("/sysDept/listMapBy") + ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据数量。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @Override + @PostMapping("/sysDept/countBy") + ResponseResult countBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @Override + @PostMapping("/sysDept/aggregateBy") + ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam); + + @Component("UpmsSysDeptClientFallbackFactory") + @Slf4j + class SysDeptClientFallbackFactory + extends BaseFallbackFactory implements SysDeptClient { + + @Override + public SysDeptClient create(Throwable throwable) { + log.error("Exception For Feign Remote Call.", throwable); + return new SysDeptClientFallbackFactory(); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/client/SysUserClient.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/client/SysUserClient.java new file mode 100644 index 00000000..57e24cb5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/client/SysUserClient.java @@ -0,0 +1,210 @@ +package com.orangeforms.upmsapi.client; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.base.client.BaseFallbackFactory; +import com.orangeforms.common.core.config.FeignConfig; +import com.orangeforms.common.core.base.client.BaseClient; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import com.orangeforms.upmsapi.dto.SysUserDto; +import com.orangeforms.upmsapi.vo.SysUserVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 用户管理服务远程数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +@FeignClient( + name = "upms", + configuration = FeignConfig.class, + fallbackFactory = SysUserClient.SysUserClientFallbackFactory.class) +public interface SysUserClient extends BaseClient { + + /** + * 基于主键的(In-list)条件获取远程数据接口。 + * + * @param userIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象的数据集合。 + */ + @Override + @PostMapping("/sysUser/listByIds") + ResponseResult> listByIds( + @RequestParam("userIds") Set userIds, + @RequestParam("withDict") Boolean withDict); + + /** + * 基于主键Id,获取远程对象。 + * + * @param userId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @Override + @PostMapping("/sysUser/getById") + ResponseResult getById( + @RequestParam("userId") Long userId, + @RequestParam("withDict") Boolean withDict); + + /** + * 判断参数列表中指定的主键Id,是否都存在。 + * + * @param userIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @Override + @PostMapping("/sysUser/existIds") + ResponseResult existIds(@RequestParam("userIds") Set userIds); + + /** + * 判断主键Id是否存在。 + * + * @param userId 参数主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @Override + @PostMapping("/sysUser/existId") + ResponseResult existId(@RequestParam("userId") Long userId); + + /** + * 根据最新对象和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/sysUser/verifyRelatedData") + ResponseResult verifyRelatedData(@RequestBody SysUserDto data); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/sysUser/verifyRelatedDataList") + ResponseResult verifyRelatedDataList(@RequestBody List dataList); + + /** + * 删除主键Id关联的对象。 + * + * @param userId 主键Id。 + * @return 应答结果对象。 + */ + @Override + @PostMapping("/sysUser/deleteById") + ResponseResult deleteById(@RequestParam("userId") Long userId); + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含删除数量。 + */ + @Override + @PostMapping("/sysUser/deleteBy") + ResponseResult deleteBy(@RequestBody SysUserDto filter); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象集合。 + */ + @Override + @PostMapping("/sysUser/listBy") + ResponseResult> listBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的单条数据对象。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含实体对象。 + */ + @Override + @PostMapping("/sysUser/getBy") + ResponseResult getBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * 和listBy接口相比,以Map列表的方式返回的主要目的是,降低服务之间的耦合度。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含主对象集合。 + */ + @Override + @PostMapping("/sysUser/listMapBy") + ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程主对象中符合查询条件的数据数量。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @Override + @PostMapping("/sysUser/countBy") + ResponseResult countBy(@RequestBody MyQueryParam queryParam); + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @Override + @PostMapping("/sysUser/aggregateBy") + ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam); + + /** + * 获取指定角色Id集合的用户数据集合。 + * @param roleIds 角色Id集合。 + * @return 应该结果对象,包含查询后的用户列表。 + */ + @GetMapping("/sysUser/getSysUserListByRoleIds") + ResponseResult> getSysUserListByRoleIds(@RequestParam("roleIds") Set roleIds); + + /** + * 获取指定部门Id集合的用户数据集合。 + * @param deptIds 部门Id集合。 + * @return 应该结果对象,包含查询后的用户列表。 + */ + @GetMapping("/sysUser/getSysUserListByDeptIds") + ResponseResult> getSysUserListByDeptIds(@RequestParam("deptIds") Set deptIds); + + @Component("UpmsSysUserClientFallbackFactory") + @Slf4j + class SysUserClientFallbackFactory + extends BaseFallbackFactory implements SysUserClient { + + @Override + public SysUserClient create(Throwable throwable) { + log.error("Exception For Feign Remote Call.", throwable); + return new SysUserClientFallbackFactory(); + } + + @Override + public ResponseResult> getSysUserListByRoleIds(Set roleIds) { + log.error("Failed to Feign Remote call [getSysUserListByRoleIds] for roleIds {}", + JSON.toJSONString(roleIds)); + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult> getSysUserListByDeptIds(Set deptIds) { + log.error("Failed to Feign Remote call [getSysUserListByDeptIds] for deptIds {}", + JSON.toJSONString(deptIds)); + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysMenuType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysMenuType.java new file mode 100644 index 00000000..b744bb80 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysMenuType.java @@ -0,0 +1,54 @@ +package com.orangeforms.upmsapi.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 菜单类型常量对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class SysMenuType { + + /** + * 目录菜单。 + */ + public static final int TYPE_DIRECTORY = 0; + /** + * 普通菜单。 + */ + public static final int TYPE_MENU = 1; + /** + * 表单片段类型。 + */ + public static final int TYPE_UI_FRAGMENT = 2; + /** + * 按钮类型。 + */ + public static final int TYPE_BUTTON = 3; + + private static final Map DICT_MAP = new HashMap<>(4); + static { + DICT_MAP.put(TYPE_DIRECTORY, "目录菜单"); + DICT_MAP.put(TYPE_MENU, "普通菜单"); + DICT_MAP.put(TYPE_UI_FRAGMENT, "表单片段类型"); + DICT_MAP.put(TYPE_BUTTON, "按钮类型"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysMenuType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysOnlineMenuPermType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysOnlineMenuPermType.java new file mode 100644 index 00000000..205b7d7c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysOnlineMenuPermType.java @@ -0,0 +1,44 @@ +package com.orangeforms.upmsapi.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 菜单关联在线表单的控制权限类型。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class SysOnlineMenuPermType { + + /** + * 查看。 + */ + public static final int TYPE_VIEW = 0; + /** + * 编辑。 + */ + public static final int TYPE_EDIT = 1; + + private static final Map DICT_MAP = new HashMap<>(4); + static { + DICT_MAP.put(TYPE_VIEW, "查看"); + DICT_MAP.put(TYPE_EDIT, "编辑"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysOnlineMenuPermType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysPermCodeType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysPermCodeType.java new file mode 100644 index 00000000..56997c97 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysPermCodeType.java @@ -0,0 +1,49 @@ +package com.orangeforms.upmsapi.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 权限字类型常量对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class SysPermCodeType { + + /** + * 表单权限字。 + */ + public static final int TYPE_FORM = 0; + /** + * 表单片段布局权限字。 + */ + public static final int TYPE_FRAGMENT = 1; + /** + * 操作权限字。 + */ + public static final int TYPE_OPERATION = 2; + + private static final Map DICT_MAP = new HashMap<>(3); + static { + DICT_MAP.put(TYPE_FORM, "表单权限字"); + DICT_MAP.put(TYPE_FRAGMENT, "表单片段布局权限字"); + DICT_MAP.put(TYPE_OPERATION, "操作权限字"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysPermCodeType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysPermModuleType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysPermModuleType.java new file mode 100644 index 00000000..23d57c45 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysPermModuleType.java @@ -0,0 +1,44 @@ +package com.orangeforms.upmsapi.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 权限资源模块类型常量对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class SysPermModuleType { + + /** + * 普通模块。 + */ + public static final int TYPE_NORMAL = 0; + /** + * controller接口模块。 + */ + public static final int TYPE_CONTROLLER = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(TYPE_NORMAL, "普通模块"); + DICT_MAP.put(TYPE_CONTROLLER, "controller接口模块"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysPermModuleType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysUserStatus.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysUserStatus.java new file mode 100644 index 00000000..bb5e5de8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysUserStatus.java @@ -0,0 +1,44 @@ +package com.orangeforms.upmsapi.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 用户状态常量字典对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class SysUserStatus { + + /** + * 正常状态。 + */ + public static final int STATUS_NORMAL = 0; + /** + * 锁定状态。 + */ + public static final int STATUS_LOCKED = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(STATUS_NORMAL, "正常状态"); + DICT_MAP.put(STATUS_LOCKED, "锁定状态"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysUserStatus() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysUserType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysUserType.java new file mode 100644 index 00000000..bc74ab6d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/constant/SysUserType.java @@ -0,0 +1,49 @@ +package com.orangeforms.upmsapi.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 用户类型常量字典对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class SysUserType { + + /** + * 管理员。 + */ + public static final int TYPE_ADMIN = 0; + /** + * 系统操作员。 + */ + public static final int TYPE_SYSTEM = 1; + /** + * 普通操作员。 + */ + public static final int TYPE_OPERATOR = 2; + + private static final Map DICT_MAP = new HashMap<>(3); + static { + DICT_MAP.put(TYPE_ADMIN, "管理员"); + DICT_MAP.put(TYPE_SYSTEM, "系统操作员"); + DICT_MAP.put(TYPE_OPERATOR, "普通操作员"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysUserType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDataPermDeptDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDataPermDeptDto.java new file mode 100644 index 00000000..1efbdede --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDataPermDeptDto.java @@ -0,0 +1,28 @@ +package com.orangeforms.upmsapi.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 数据权限与部门关联Dto。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("数据权限与部门关联Dto") +@Data +public class SysDataPermDeptDto { + + /** + * 数据权限Id。 + */ + @ApiModelProperty(value = "数据权限Id", required = true) + private Long dataPermId; + + /** + * 关联部门Id。 + */ + @ApiModelProperty(value = "关联部门Id", required = true) + private Long deptId; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDataPermDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDataPermDto.java new file mode 100644 index 00000000..d81593d6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDataPermDto.java @@ -0,0 +1,56 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.common.datafilter.constant.DataPermRuleType; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 数据权限Dto。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("数据权限Dto") +@Data +public class SysDataPermDto { + + /** + * 数据权限Id。 + */ + @ApiModelProperty(value = "数据权限Id", required = true) + @NotNull(message = "数据权限Id不能为空!", groups = {UpdateGroup.class}) + private Long dataPermId; + + /** + * 显示名称。 + */ + @ApiModelProperty(value = "显示名称", required = true) + @NotBlank(message = "数据权限名称不能为空!") + private String dataPermName; + + /** + * 数据权限规则类型(0: 全部可见 1: 只看自己 2: 只看本部门 3: 本部门及子部门 4: 多部门及子部门 5: 自定义部门列表)。 + */ + @ApiModelProperty(value = "数据权限规则类型", required = true) + @NotNull(message = "数据权限规则类型不能为空!") + @ConstDictRef(constDictClass = DataPermRuleType.class) + private Integer ruleType; + + /** + * 部门Id列表(逗号分隔)。 + */ + @ApiModelProperty(hidden = true) + private String deptIdListString; + + /** + * 搜索字符串。 + */ + @ApiModelProperty(value = "LIKE 模糊搜索字符串") + private String searchString; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDeptDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDeptDto.java new file mode 100644 index 00000000..915a5f2d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysDeptDto.java @@ -0,0 +1,73 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; + +import java.util.Date; + +/** + * SysDeptDto对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("SysDeptDto对象") +@Data +public class SysDeptDto { + + /** + * 部门Id。 + */ + @ApiModelProperty(value = "部门Id", required = true) + @NotNull(message = "数据验证失败,部门Id不能为空!", groups = {UpdateGroup.class}) + private Long deptId; + + /** + * 部门名称。 + */ + @ApiModelProperty(value = "部门名称", required = true) + @NotBlank(message = "数据验证失败,部门名称不能为空!") + private String deptName; + + /** + * 显示顺序。 + */ + @ApiModelProperty(value = "显示顺序", required = true) + @NotNull(message = "数据验证失败,显示顺序不能为空!") + private Integer showOrder; + + /** + * 父部门Id。 + */ + @ApiModelProperty(value = "父部门Id") + private Long parentId; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysMenuDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysMenuDto.java new file mode 100644 index 00000000..d2e9c890 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysMenuDto.java @@ -0,0 +1,75 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.upmsapi.constant.SysMenuType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 菜单Dto。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("菜单Dto") +@Data +public class SysMenuDto { + + /** + * 菜单Id。 + */ + @ApiModelProperty(value = "菜单Id", required = true) + @NotNull(message = "菜单Id不能为空!", groups = {UpdateGroup.class}) + private Long menuId; + + /** + * 父菜单Id,目录菜单的父菜单为null + */ + @ApiModelProperty(value = "父菜单Id") + private Long parentId; + + /** + * 菜单显示名称。 + */ + @ApiModelProperty(value = "菜单显示名称", required = true) + @NotBlank(message = "菜单显示名称不能为空!") + private String menuName; + + /** + * 菜单类型 (0: 目录 1: 菜单 2: 按钮 3: UI片段)。 + */ + @ApiModelProperty(value = "菜单类型", required = true) + @NotNull(message = "菜单类型不能为空!") + @ConstDictRef(constDictClass = SysMenuType.class, message = "数据验证失败,菜单类型为无效值!") + private Integer menuType; + + /** + * 前端表单路由名称,仅用于menu_type为1的菜单类型。 + */ + @ApiModelProperty(value = "前端表单路由名称") + private String formRouterName; + + /** + * 在线表单主键Id,仅用于在线表单绑定的菜单。 + */ + @ApiModelProperty(value = "在线表单主键Id") + private Long onlineFormId; + + /** + * 菜单显示顺序 (值越小,排序越靠前)。 + */ + @ApiModelProperty(value = "菜单显示顺序", required = true) + @NotNull(message = "菜单显示顺序不能为空!") + private Integer showOrder; + + /** + * 菜单图标。 + */ + @ApiModelProperty(value = "菜单显示顺序") + private String icon; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysOperationLogDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysOperationLogDto.java new file mode 100644 index 00000000..7b120ce6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysOperationLogDto.java @@ -0,0 +1,78 @@ +package com.orangeforms.upmsapi.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 操作日志记录表 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("操作日志Dto") +@Data +public class SysOperationLogDto { + + /** + * 主键Id。 + */ + @ApiModelProperty(value = "主键Id") + private Long logId; + + /** + * 操作类型。 + * 常量值定义可参考SysOperationLogType对象。 + */ + @ApiModelProperty(value = "操作类型") + private Integer operationType; + + /** + * 每次请求的Id。 + * 对于微服务之间的调用,在同一个请求的调用链中,该值是相同的。 + */ + @ApiModelProperty(value = "每次请求的Id") + private String traceId; + + /** + * HTTP 请求地址。 + */ + @ApiModelProperty(value = "HTTP 请求地址") + private String requestUrl; + + /** + * 应答状态。 + */ + @ApiModelProperty(value = "应答状态") + private Boolean success; + + /** + * 操作员名称。 + */ + @ApiModelProperty(value = "操作员名称") + private String operatorName; + + /** + * 调用时长最小值。 + */ + @ApiModelProperty(value = "调用时长最小值") + private Long elapseMin; + + /** + * 调用时长最大值。 + */ + @ApiModelProperty(value = "调用时长最大值") + private Long elapseMax; + + /** + * 操作开始时间。 + */ + @ApiModelProperty(value = "操作开始时间") + private String operationTimeStart; + + /** + * 操作开始时间。 + */ + @ApiModelProperty(value = "操作开始时间") + private String operationTimeEnd; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermCodeDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermCodeDto.java new file mode 100644 index 00000000..beae3a4d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermCodeDto.java @@ -0,0 +1,64 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.upmsapi.constant.SysPermCodeType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 权限字Dto。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("权限字Dto") +@Data +public class SysPermCodeDto { + + /** + * 权限字Id。 + */ + @ApiModelProperty(value = "权限字Id", required = true) + @NotNull(message = "权限字Id不能为空!", groups = {UpdateGroup.class}) + private Long permCodeId; + + /** + * 权限字标识(一般为有含义的英文字符串)。 + */ + @ApiModelProperty(value = "权限字标识", required = true) + @NotBlank(message = "权限字编码不能为空!") + private String permCode; + + /** + * 上级权限字Id。 + */ + @ApiModelProperty(value = "上级权限字Id") + private Long parentId; + + /** + * 权限字类型(0: 表单 1: UI片段 2: 操作)。 + */ + @ApiModelProperty(value = "权限字类型", required = true) + @NotNull(message = "权限字类型不能为空!") + @ConstDictRef(constDictClass = SysPermCodeType.class, message = "数据验证失败,权限类型为无效值!") + private Integer permCodeType; + + /** + * 显示名称。 + */ + @ApiModelProperty(value = "显示名称", required = true) + @NotBlank(message = "权限字显示名称不能为空!") + private String showName; + + /** + * 显示顺序(数值越小,越靠前)。 + */ + @ApiModelProperty(value = "显示顺序", required = true) + @NotNull(message = "权限字显示顺序不能为空!") + private Integer showOrder; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermDto.java new file mode 100644 index 00000000..dfb26414 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermDto.java @@ -0,0 +1,61 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 权限资源Dto。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("权限资源Dto") +@Data +public class SysPermDto { + + /** + * 权限资源Id。 + */ + @ApiModelProperty(value = "权限资源Id", required = true) + @NotNull(message = "权限Id不能为空!", groups = {UpdateGroup.class}) + private Long permId; + + /** + * 权限资源名称。 + */ + @ApiModelProperty(value = "权限资源名称", required = true) + @NotBlank(message = "权限资源名称不能为空!") + private String permName; + + /** + * shiro格式的权限字,如(upms:sysUser:add)。 + */ + @ApiModelProperty(value = "权限字") + private String permCode; + + /** + * 权限所在的权限模块Id。 + */ + @ApiModelProperty(value = "权限所在的权限模块Id") + @NotNull(message = "权限模块Id不能为空!") + private Long moduleId; + + /** + * 关联的URL。 + */ + @ApiModelProperty(value = "关联的URL", required = true) + @NotBlank(message = "权限关联的url不能为空!") + private String url; + + /** + * 权限在当前模块下的顺序,由小到大。 + */ + @ApiModelProperty(value = "显示顺序", required = true) + @NotNull(message = "权限显示顺序不能为空!") + private Integer showOrder; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermModuleDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermModuleDto.java new file mode 100644 index 00000000..39674066 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysPermModuleDto.java @@ -0,0 +1,57 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.upmsapi.constant.SysPermModuleType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 权限资源模块Dto。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("权限资源模块Dto") +@Data +public class SysPermModuleDto { + + /** + * 权限模块Id。 + */ + @ApiModelProperty(value = "权限模块Id", required = true) + @NotNull(message = "权限模块Id不能为空!", groups = {UpdateGroup.class}) + private Long moduleId; + + /** + * 权限模块名称。 + */ + @ApiModelProperty(value = "权限模块名称", required = true) + @NotBlank(message = "权限模块名称不能为空!") + private String moduleName; + + /** + * 上级权限模块Id。 + */ + @ApiModelProperty(value = "上级权限模块Id") + private Long parentId; + + /** + * 权限模块类型(0: 普通模块 1: Controller模块)。 + */ + @ApiModelProperty(value = "权限模块类型", required = true) + @NotNull(message = "模块类型不能为空!") + @ConstDictRef(constDictClass = SysPermModuleType.class, message = "数据验证失败,权限模块类型为无效值!") + private Integer moduleType; + + /** + * 权限模块在当前层级下的顺序,由小到大。 + */ + @ApiModelProperty(value = "显示顺序", required = true) + @NotNull(message = "权限模块显示顺序不能为空!") + private Integer showOrder; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysRoleDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysRoleDto.java new file mode 100644 index 00000000..8761516b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysRoleDto.java @@ -0,0 +1,33 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; + +/** + * 角色Dto。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("角色Dto") +@Data +public class SysRoleDto { + + /** + * 角色Id。 + */ + @ApiModelProperty(value = "角色Id", required = true) + @NotNull(message = "角色Id不能为空!", groups = {UpdateGroup.class}) + private Long roleId; + + /** + * 角色名称。 + */ + @ApiModelProperty(value = "角色名称", required = true) + @NotBlank(message = "角色名称不能为空!") + private String roleName; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysUserDto.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysUserDto.java new file mode 100644 index 00000000..0fd398ed --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/dto/SysUserDto.java @@ -0,0 +1,111 @@ +package com.orangeforms.upmsapi.dto; + +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.upmsapi.constant.SysUserType; +import com.orangeforms.upmsapi.constant.SysUserStatus; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.*; + +import java.util.Date; + +/** + * SysUserDto对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("SysUserDto对象") +@Data +public class SysUserDto { + + /** + * 用户Id。 + */ + @ApiModelProperty(value = "用户Id", required = true) + @NotNull(message = "数据验证失败,用户Id不能为空!", groups = {UpdateGroup.class}) + private Long userId; + + /** + * 登录用户名。 + */ + @ApiModelProperty(value = "登录用户名", required = true) + @NotBlank(message = "数据验证失败,登录用户名不能为空!") + private String loginName; + + /** + * 用户显示名称。 + */ + @ApiModelProperty(value = "用户显示名称", required = true) + @NotBlank(message = "数据验证失败,用户显示名称不能为空!") + private String showName; + + /** + * 用户部门Id。 + */ + @ApiModelProperty(value = "用户部门Id", required = true) + @NotNull(message = "数据验证失败,用户部门Id不能为空!") + private Long deptId; + + /** + * 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。 + */ + @ApiModelProperty(value = "用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)", required = true) + @NotNull(message = "数据验证失败,用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)不能为空!") + @ConstDictRef(constDictClass = SysUserType.class, message = "数据验证失败,用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)为无效值!") + private Integer userType; + + /** + * 用户头像的Url。 + */ + @ApiModelProperty(value = "用户头像的Url") + private String headImageUrl; + + /** + * 用户状态(0: 正常 1: 锁定)。 + */ + @ApiModelProperty(value = "用户状态(0: 正常 1: 锁定)", required = true) + @NotNull(message = "数据验证失败,用户状态(0: 正常 1: 锁定)不能为空!") + @ConstDictRef(constDictClass = SysUserStatus.class, message = "数据验证失败,用户状态(0: 正常 1: 锁定)为无效值!") + private Integer userStatus; + + /** + * 创建用户Id。 + */ + @ApiModelProperty(value = "创建用户Id") + private Long createUserId; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * createTime 范围过滤起始值(>=)。 + */ + @ApiModelProperty(value = "createTime 范围过滤起始值(>=)") + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + @ApiModelProperty(value = "createTime 范围过滤结束值(<=)") + private String createTimeEnd; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDataPermDeptVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDataPermDeptVo.java new file mode 100644 index 00000000..b4b8211f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDataPermDeptVo.java @@ -0,0 +1,28 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 数据权限与部门关联VO。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("数据权限与部门关联VO") +@Data +public class SysDataPermDeptVo { + + /** + * 数据权限Id。 + */ + @ApiModelProperty(value = "数据权限Id") + private Long dataPermId; + + /** + * 关联部门Id。 + */ + @ApiModelProperty(value = "关联部门Id") + private Long deptId; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDataPermVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDataPermVo.java new file mode 100644 index 00000000..3851ac91 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDataPermVo.java @@ -0,0 +1,72 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.*; + +/** + * 数据权限VO。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("数据权限VO") +@Data +public class SysDataPermVo { + + /** + * 数据权限Id。 + */ + @ApiModelProperty(value = "数据权限Id") + private Long dataPermId; + + /** + * 显示名称。 + */ + @ApiModelProperty(value = "显示名称") + private String dataPermName; + + /** + * 数据权限规则类型(0: 全部可见 1: 只看自己 2: 只看本部门 3: 本部门及子部门 4: 多部门及子部门 5: 自定义部门列表)。 + */ + @ApiModelProperty(value = "数据权限规则类型") + private Integer ruleType; + + /** + * 部门Id列表(逗号分隔)。 + */ + @ApiModelProperty(value = "部门Id列表") + private String deptIdListString; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 数据权限与部门关联对象列表。 + */ + @ApiModelProperty(value = "数据权限与部门关联对象列表") + private List> dataPermDeptList; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDeptVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDeptVo.java new file mode 100644 index 00000000..98879e9c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysDeptVo.java @@ -0,0 +1,66 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * SysDeptVO视图对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("SysDeptVO视图对象") +@Data +public class SysDeptVo { + + /** + * 部门Id。 + */ + @ApiModelProperty(value = "部门Id") + private Long deptId; + + /** + * 部门名称。 + */ + @ApiModelProperty(value = "部门名称") + private String deptName; + + /** + * 显示顺序。 + */ + @ApiModelProperty(value = "显示顺序") + private Integer showOrder; + + /** + * 父部门Id。 + */ + @ApiModelProperty(value = "父部门Id") + private Long parentId; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysMenuVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysMenuVo.java new file mode 100644 index 00000000..788ad832 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysMenuVo.java @@ -0,0 +1,102 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.*; + +/** + * 菜单VO。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("菜单VO") +@Data +public class SysMenuVo { + + /** + * 菜单Id。 + */ + @ApiModelProperty(value = "菜单Id") + private Long menuId; + + /** + * 父菜单Id,目录菜单的父菜单为null + */ + @ApiModelProperty(value = "父菜单Id") + private Long parentId; + + /** + * 菜单显示名称。 + */ + @ApiModelProperty(value = "菜单显示名称") + private String menuName; + + /** + * 菜单类型 (0: 目录 1: 菜单 2: 按钮 3: UI片段)。 + */ + @ApiModelProperty(value = "菜单类型") + private Integer menuType; + + /** + * 前端表单路由名称,仅用于menu_type为1的菜单类型。 + */ + @ApiModelProperty(value = "前端表单路由名称") + private String formRouterName; + + /** + * 在线表单主键Id,仅用于在线表单绑定的菜单。 + */ + @ApiModelProperty(value = "在线表单主键Id") + private Long onlineFormId; + + /** + * 在线表单菜单的权限控制类型,具体值可参考SysOnlineMenuPermType常量对象。 + */ + @ApiModelProperty(value = "在线表单菜单的权限控制类型") + private Integer onlineMenuPermType; + + /** + * 菜单显示顺序 (值越小,排序越靠前)。 + */ + @ApiModelProperty(value = "菜单显示顺序") + private Integer showOrder; + + /** + * 菜单图标。 + */ + @ApiModelProperty(value = "菜单显示顺序") + private String icon; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 菜单与权限字关联对象列表。 + */ + @ApiModelProperty(value = "菜单与权限字关联对象列表") + private List> sysMenuPermCodeList; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysOperationLogVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysOperationLogVo.java new file mode 100644 index 00000000..16cefab4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysOperationLogVo.java @@ -0,0 +1,145 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 操作日志记录表 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("操作日志VO") +@Data +public class SysOperationLogVo { + + /** + * 操作日志主键Id。 + */ + @ApiModelProperty(value = "操作日志主键Id") + private Long logId; + + /** + * 日志描述。 + */ + @ApiModelProperty(value = "日志描述") + private String description; + + /** + * 操作类型。 + * 常量值定义可参考SysOperationLogType对象。 + */ + @ApiModelProperty(value = "操作类型") + private Integer operationType; + + /** + * 接口所在服务名称。 + * 通常为spring.application.name配置项的值。 + */ + @ApiModelProperty(value = "接口所在服务名称") + private String serviceName; + + /** + * 调用的controller全类名。 + * 之所以为独立字段,是为了便于查询和统计接口的调用频度。 + */ + @ApiModelProperty(value = "调用的controller全类名") + private String apiClass; + + /** + * 调用的controller中的方法。 + * 格式为:接口类名 + "." + 方法名。 + */ + @ApiModelProperty(value = "调用的controller中的方法") + private String apiMethod; + + /** + * 用户会话sessionId。 + * 主要是为了便于统计,以及跟踪查询定位问题。 + */ + @ApiModelProperty(value = "用户会话sessionId") + private String sessionId; + + /** + * 每次请求的Id。 + * 对于微服务之间的调用,在同一个请求的调用链中,该值是相同的。 + */ + @ApiModelProperty(value = "每次请求的Id") + private String traceId; + + /** + * 调用时长。 + */ + @ApiModelProperty(value = "调用时长") + private Long elapse; + + /** + * HTTP 请求方法,如GET。 + */ + @ApiModelProperty(value = "HTTP 请求方法") + private String requestMethod; + + /** + * HTTP 请求地址。 + */ + @ApiModelProperty(value = "HTTP 请求地址") + private String requestUrl; + + /** + * controller接口参数。 + */ + @ApiModelProperty(value = "controller接口参数") + private String requestArguments; + + /** + * controller应答结果。 + */ + @ApiModelProperty(value = "controller应答结果") + private String responseResult; + + /** + * 请求IP。 + */ + @ApiModelProperty(value = "请求IP") + private String requestIp; + + /** + * 应答状态。 + */ + @ApiModelProperty(value = "应答状态") + private Boolean success; + + /** + * 错误信息。 + */ + @ApiModelProperty(value = "错误信息") + private String errorMsg; + + /** + * 租户Id。 + * 仅用于多租户系统,是便于进行对租户的操作查询和统计分析。 + */ + @ApiModelProperty(value = "租户Id") + private Long tenantId; + + /** + * 操作员Id。 + */ + @ApiModelProperty(value = "操作员Id") + private Long operatorId; + + /** + * 操作员名称。 + */ + @ApiModelProperty(value = "操作员名称") + private String operatorName; + + /** + * 操作时间。 + */ + @ApiModelProperty(value = "操作时间") + private Date operationTime; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermCodeVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermCodeVo.java new file mode 100644 index 00000000..eb6e7207 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermCodeVo.java @@ -0,0 +1,84 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.*; + +/** + * 权限字VO。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("权限字VO") +@Data +public class SysPermCodeVo { + + /** + * 权限字Id。 + */ + @ApiModelProperty(value = "权限字Id") + private Long permCodeId; + + /** + * 权限字标识(一般为有含义的英文字符串)。 + */ + @ApiModelProperty(value = "权限字标识") + private String permCode; + + /** + * 上级权限字Id。 + */ + @ApiModelProperty(value = "上级权限字Id") + private Long parentId; + + /** + * 权限字类型(0: 表单 1: UI片段 2: 操作)。 + */ + @ApiModelProperty(value = "权限字类型") + private Integer permCodeType; + + /** + * 显示名称。 + */ + @ApiModelProperty(value = "显示名称") + private String showName; + + /** + * 显示顺序(数值越小,越靠前)。 + */ + @ApiModelProperty(value = "显示顺序") + private Integer showOrder; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 权限字与权限资源关联对象列表。 + */ + @ApiModelProperty(value = "权限字与权限资源关联对象列表") + private List> sysPermCodePermList; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermModuleVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermModuleVo.java new file mode 100644 index 00000000..b7d4c468 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermModuleVo.java @@ -0,0 +1,78 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.*; + +/** + * 权限资源模块VO。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("权限资源模块VO") +@Data +public class SysPermModuleVo { + + /** + * 权限模块Id。 + */ + @ApiModelProperty(value = "权限模块Id") + private Long moduleId; + + /** + * 权限模块名称。 + */ + @ApiModelProperty(value = "权限模块名称") + private String moduleName; + + /** + * 上级权限模块Id。 + */ + @ApiModelProperty(value = "上级权限模块Id") + private Long parentId; + + /** + * 权限模块类型(0: 普通模块 1: Controller模块)。 + */ + @ApiModelProperty(value = "权限模块类型") + private Integer moduleType; + + /** + * 权限模块在当前层级下的顺序,由小到大。 + */ + @ApiModelProperty(value = "显示顺序") + private Integer showOrder; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 权限资源对象列表。 + */ + @ApiModelProperty(value = "权限资源对象列表") + private List sysPermList; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermVo.java new file mode 100644 index 00000000..fbf6f00a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysPermVo.java @@ -0,0 +1,84 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.*; + +/** + * 权限资源VO。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("权限资源VO") +@Data +public class SysPermVo { + + /** + * 权限资源Id。 + */ + @ApiModelProperty(value = "权限资源Id") + private Long permId; + + /** + * 权限资源名称。 + */ + @ApiModelProperty(value = "权限资源名称") + private String permName; + + /** + * shiro格式的权限字,如(upms:sysUser:add)。 + */ + @ApiModelProperty(value = "权限字") + private String permCode; + + /** + * 权限所在的权限模块Id。 + */ + @ApiModelProperty(value = "权限所在的权限模块Id") + private Long moduleId; + + /** + * 关联的URL。 + */ + @ApiModelProperty(value = "关联的URL") + private String url; + + /** + * 权限在当前模块下的顺序,由小到大。 + */ + @ApiModelProperty(value = "显示顺序") + private Integer showOrder; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 模块Id的字典关联数据。 + */ + @ApiModelProperty(value = "模块Id的字典关联数据") + private Map moduleIdDictMap; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysRoleVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysRoleVo.java new file mode 100644 index 00000000..5243dace --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysRoleVo.java @@ -0,0 +1,60 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.*; + +/** + * 角色VO。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("角色VO") +@Data +public class SysRoleVo { + + /** + * 角色Id。 + */ + @ApiModelProperty(value = "角色Id") + private Long roleId; + + /** + * 角色名称。 + */ + @ApiModelProperty(value = "角色名称") + private String roleName; + + /** + * 创建者Id。 + */ + @ApiModelProperty(value = "创建者Id") + private Long createUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 角色与菜单关联对象列表。 + */ + @ApiModelProperty(value = "角色与菜单关联对象列表") + private List> sysRoleMenuList; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysUserVo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysUserVo.java new file mode 100644 index 00000000..c35fa932 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/src/main/java/com/orangeforms/upmsapi/vo/SysUserVo.java @@ -0,0 +1,116 @@ +package com.orangeforms.upmsapi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.Map; +import java.util.List; + +/** + * SysUserVO视图对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiModel("SysUserVO视图对象") +@Data +public class SysUserVo { + + /** + * 用户Id。 + */ + @ApiModelProperty(value = "用户Id") + private Long userId; + + /** + * 登录用户名。 + */ + @ApiModelProperty(value = "登录用户名") + private String loginName; + + /** + * 用户显示名称。 + */ + @ApiModelProperty(value = "用户显示名称") + private String showName; + + /** + * 用户部门Id。 + */ + @ApiModelProperty(value = "用户部门Id") + private Long deptId; + + /** + * 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。 + */ + @ApiModelProperty(value = "用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)") + private Integer userType; + + /** + * 用户头像的Url。 + */ + @ApiModelProperty(value = "用户头像的Url") + private String headImageUrl; + + /** + * 用户状态(0: 正常 1: 锁定)。 + */ + @ApiModelProperty(value = "用户状态(0: 正常 1: 锁定)") + private Integer userStatus; + + /** + * 创建用户Id。 + */ + @ApiModelProperty(value = "创建用户Id") + private Long createUserId; + + /** + * 更新者Id。 + */ + @ApiModelProperty(value = "更新者Id") + private Long updateUserId; + + /** + * 创建时间。 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新时间。 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 多对多用户角色数据集合。 + */ + @ApiModelProperty(value = "多对多用户角色数据集合") + private List> sysUserRoleList; + + /** + * 多对多用户数据权限数据集合。 + */ + @ApiModelProperty(value = "多对多用户数据权限数据集合") + private List> sysDataPermUserList; + + /** + * deptId 字典关联数据。 + */ + @ApiModelProperty(value = "deptId 字典关联数据") + private Map deptIdDictMap; + + /** + * userType 常量字典关联数据。 + */ + @ApiModelProperty(value = "userType 常量字典关联数据") + private Map userTypeDictMap; + + /** + * userStatus 常量字典关联数据。 + */ + @ApiModelProperty(value = "userStatus 常量字典关联数据") + private Map userStatusDictMap; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/upms-api.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/upms-api.iml new file mode 100644 index 00000000..ed577cb8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-api/upms-api.iml @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/pom.xml new file mode 100644 index 00000000..c9a745c3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/pom.xml @@ -0,0 +1,65 @@ + + + + com.orangeforms + upms + 1.0.0 + + 4.0.0 + + upms-service + 1.0.0 + upms-service + jar + + + + + com.orangeforms + upms-api + 1.0.0 + + + com.orangeforms + common-log + 1.0.0 + + + com.orangeforms + common-redis + 1.0.0 + + + com.orangeforms + common-sequence + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/UpmsApplication.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/UpmsApplication.java new file mode 100644 index 00000000..9ff0a7ca --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/UpmsApplication.java @@ -0,0 +1,25 @@ +package com.orangeforms.upmsservice; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cloud.client.SpringCloudApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; + +/** + * Upms服务启动类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) +@SpringCloudApplication +@EnableFeignClients(basePackages = "com.orangeforms") +@ComponentScan("com.orangeforms") +public class UpmsApplication { + + public static void main(String[] args) { + SpringApplication.run(UpmsApplication.class, args); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/ApplicationConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/ApplicationConfig.java new file mode 100644 index 00000000..c4806cf0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/ApplicationConfig.java @@ -0,0 +1,41 @@ +package com.orangeforms.upmsservice.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 应用程序自定义的程序属性配置文件。 + * NOTE: 和multiDataSource相关的配置没有包含进来,因为涉及到条件属性,所以由其相关的配置对象自己处理。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@RefreshScope +@Configuration +@ConfigurationProperties(prefix = "application") +public class ApplicationConfig { + /** + * 用户密码被重置之后的缺省密码 + */ + private String defaultUserPassword; + /** + * 上传文件的基础目录 + */ + private String uploadFileBaseDir; + /** + * 每个微服务的url目录上下文,如(/admin/upms),通常和网关的路由目录一致。 + */ + private String serviceContextPath; + /** + * 是否忽略远程调用中出现的任何错误,包括逻辑异常和系统异常。 + * 通常在调试和测试阶段设置为false,以便及时发现问题。 + */ + private Boolean ignoreRpcError; + /** + * Session的数据权限缓存时长(单位:秒)。 + */ + private Integer dataPermExpiredSeconds; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/DataSourceType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/DataSourceType.java new file mode 100644 index 00000000..4e852fb4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/DataSourceType.java @@ -0,0 +1,47 @@ +package com.orangeforms.upmsservice.config; + +import com.orangeforms.common.core.constant.ApplicationConstant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 表示数据源类型的常量对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class DataSourceType { + + public static final int MAIN = 0; + /** + * 对于多数据源服务,操作日志的数据源类型是固定值。如果有冲突,可以直接修改 + * ApplicationConstant.OPERATION_LOG_DATASOURCE_TYPE的值。 + * 如果保存SysOperationLog操作日志的数据和其他业务位于同库,为了便于今后的 + * 迁移,这里也尽量要给其配置单独的数据源类型,今后数据库拆分时,可以直接修改 + * 该值对应的配置项即可。 + */ + public static final int OPERATION_LOG = ApplicationConstant.OPERATION_LOG_DATASOURCE_TYPE; + + private static final Map TYPE_MAP = new HashMap<>(2); + static { + TYPE_MAP.put("main", MAIN); + TYPE_MAP.put("operation-log", OPERATION_LOG); + } + + /** + * 根据名称获取字典类型。 + * + * @param name 数据源在配置中的名称。 + * @return 返回可用于多数据源切换的数据源类型。 + */ + public static Integer getDataSourceTypeByName(String name) { + return TYPE_MAP.get(name); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DataSourceType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/MultiDataSourceConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/MultiDataSourceConfig.java new file mode 100644 index 00000000..af17c2a9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/MultiDataSourceConfig.java @@ -0,0 +1,55 @@ +package com.orangeforms.upmsservice.config; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import com.orangeforms.common.core.config.DynamicDataSource; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.mybatis.spring.annotation.MapperScan; + +import javax.sql.DataSource; +import java.util.HashMap; +import java.util.Map; + +/** + * 多数据源配置对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +@EnableTransactionManagement +@MapperScan(value = {"com.orangeforms.*.dao", "com.orangeforms.common.*.dao"}) +public class MultiDataSourceConfig { + + @Bean(initMethod = "init", destroyMethod = "close") + @ConfigurationProperties(prefix = "spring.datasource.druid.main") + public DataSource mainDataSource() { + return DruidDataSourceBuilder.create().build(); + } + + /** + * 默认生成的用于保存操作日志的数据源,可根据需求修改。 + * 这里我们还是非常推荐给操作日志使用独立的数据源,这样便于今后的数据迁移。 + */ + @Bean(initMethod = "init", destroyMethod = "close") + @ConfigurationProperties(prefix = "spring.datasource.druid.operation-log") + public DataSource operationLogDataSource() { + return DruidDataSourceBuilder.create().build(); + } + + @Bean + @Primary + public DynamicDataSource dataSource() { + Map targetDataSources = new HashMap<>(1); + targetDataSources.put(DataSourceType.MAIN, mainDataSource()); + targetDataSources.put(DataSourceType.OPERATION_LOG, operationLogDataSource()); + // 如果当前工程支持在线表单,这里请务必保证upms数据表所在数据库为缺省数据源。 + DynamicDataSource dynamicDataSource = new DynamicDataSource(); + dynamicDataSource.setTargetDataSources(targetDataSources); + dynamicDataSource.setDefaultTargetDataSource(mainDataSource()); + return dynamicDataSource; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/UaaConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/UaaConfig.java new file mode 100644 index 00000000..dcda7211 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/config/UaaConfig.java @@ -0,0 +1,37 @@ +package com.orangeforms.upmsservice.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * UAA授权应用服务的配置文件。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "application.uaa") +public class UaaConfig { + /** + * uaa的授权服务的主机名。 + */ + private String uaaBaseUri; + /** + * uaa登录成功后的回调地址,需要和UAA授权服务器中注册的完全匹配。 + */ + private String loginUaaRedirectUri; + /** + * uaa登出成功后的回调地址。 + */ + private String logoutUaaRedirectUri; + /** + * 应用Id。需要和UAA授权服务器中注册的完全匹配。 + */ + private String clientId; + /** + * 应用密码。需要和UAA授权服务器中注册的完全匹配。 + */ + private String clientSecret; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/LoginController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/LoginController.java new file mode 100644 index 00000000..08ea05b3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/LoginController.java @@ -0,0 +1,337 @@ +package com.orangeforms.upmsservice.controller; + +import com.alibaba.fastjson.JSONObject; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.redis.cache.SessionCacheHelper; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsapi.constant.SysUserStatus; +import com.orangeforms.upmsapi.constant.SysUserType; +import com.orangeforms.upmsservice.config.UaaConfig; +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.upmsservice.service.*; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.*; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 登录接口控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ApiSupport(order = 1) +@Api(tags = "登录接口") +@Slf4j +@RestController +@RequestMapping("/login") +public class LoginController { + + @Autowired + private SysUserService sysUserService; + @Autowired + private SysPermCodeService sysPermCodeService; + @Autowired + private SysPermService sysPermService; + @Autowired + private SysMenuService sysMenuService; + @Autowired + private SysRoleService sysRoleService; + @Autowired + private SysDataPermService sysDataPermService; + @Autowired + private SysPermWhitelistService sysPermWhitelistService; + @Autowired + private RedissonClient redissonClient; + @Autowired + private SessionCacheHelper cacheHelper; + @Autowired + private RestTemplate restTemplate; + @Autowired + private UaaConfig uaaConfig; + + /** + * 获取UAA登录验证URL。 + * @return UAA登录验证URL。 + */ + @GetMapping("/getUaaLoginUrl") + public ResponseResult getUaaLoginUrl() { + String uaaLoginUrl = normalizeUaaBaseUrl() + "oauth/authorize?response_type=code&client_id=" + + uaaConfig.getClientId() + "&redirect_uri=" + uaaConfig.getLoginUaaRedirectUri(); + return ResponseResult.success(uaaLoginUrl); + } + + /** + * 获取UAA登录验证URL。 + * @return UAA登录验证URL。 + */ + @GetMapping("/getUaaLogoutUrl") + public ResponseResult getUaaLogoutUrl() { + TokenData tokenData = TokenData.takeFromRequest(); + String uaaLogoutUrl = normalizeUaaBaseUrl() + "oauth/remove/token?redirect_uri=" + + uaaConfig.getLogoutUaaRedirectUri() + "&access_token=" + tokenData.getUaaAccessToken(); + return ResponseResult.success(uaaLogoutUrl); + } + + /** + * UAA登录接口。 + * + * @param authCode uaa授权码。 + * @return 应答结果对象,其中包括JWT的Token数据,以及菜单列表和权限字集合等数据。 + */ + @OperationLog(type = SysOperationLogType.LOGIN, saveResponse = false) + @PostMapping("/doLoginByUaa") + public ResponseResult doLoginByUaa(@MyRequestBody String authCode) throws Exception { + if (MyCommonUtil.existBlankArgument(authCode)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + ResponseEntity responseEntity = this.getAccessTokenByAuthCode(authCode); + if (responseEntity.getStatusCode() != HttpStatus.OK) { + return ResponseResult.error(ErrorCodeEnum.INVALID_ACCESS_TOKEN); + } + JSONObject accessTokenData = JSONObject.parseObject(responseEntity.getBody()); + String accessToken = (String) accessTokenData.get("access_token"); + String username = (String) accessTokenData.get("username"); + SysUser user = sysUserService.getSysUserByLoginName(username); + if (user == null) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + String errorMessage; + if (user.getUserStatus() == SysUserStatus.STATUS_LOCKED) { + errorMessage = "登录失败,用户账号被锁定!"; + return ResponseResult.error(ErrorCodeEnum.INVALID_USER_STATUS, errorMessage); + } + String patternKey = RedisKeyUtil.getSessionIdPrefix(user.getLoginName(), MyCommonUtil.getDeviceType()) + "*"; + redissonClient.getKeys().deleteByPatternAsync(patternKey); + JSONObject jsonData = this.buildLoginData(user, accessToken); + return ResponseResult.success(jsonData); + } + + /** + * 本地登录接口,仍然使用OAuth2的password模式进行用户身份验证。 + * + * @param loginName 登录名。 + * @param password 密码。 + * @return 应答结果对象,其中包括JWT的Token数据,以及菜单列表。 + */ + @OperationLog(type = SysOperationLogType.LOGIN, saveResponse = false) + @PostMapping("/doLogin") + public ResponseResult doLogin( + @MyRequestBody String loginName, @MyRequestBody String password) throws Exception { + if (MyCommonUtil.existBlankArgument(loginName, password)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + ResponseEntity responseEntity = this.getAccessTokenByUsernameAndPassword(loginName, password); + if (responseEntity.getStatusCode() != HttpStatus.OK) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + JSONObject accessTokenData = JSONObject.parseObject(responseEntity.getBody()); + String accessToken = (String) accessTokenData.get("access_token"); + SysUser user = sysUserService.getSysUserByLoginName(loginName); + if (user == null) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + String errorMessage; + if (user.getUserStatus() == SysUserStatus.STATUS_LOCKED) { + errorMessage = "登录失败,用户账号被锁定!"; + return ResponseResult.error(ErrorCodeEnum.INVALID_USER_STATUS, errorMessage); + } + String patternKey = RedisKeyUtil.getSessionIdPrefix(user.getLoginName(), MyCommonUtil.getDeviceType()) + "*"; + redissonClient.getKeys().deleteByPatternAsync(patternKey); + JSONObject jsonData = this.buildLoginData(user, accessToken); + return ResponseResult.success(jsonData); + } + + /** + * 登出操作。同时将Session相关的信息从缓存中删除。 + * + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.LOGOUT) + @PostMapping("/doLogout") + public ResponseResult doLogout() { + TokenData tokenData = TokenData.takeFromRequest(); + sysDataPermService.removeDataPermCache(tokenData.getSessionId()); + cacheHelper.removeAllSessionCache(tokenData.getSessionId()); + return ResponseResult.success(); + } + + /** + * 在登录之后,通过token再次获取登录信息。 + * 用于在当前浏览器登录系统后,在新tab页中可以免密登录。 + * + * @return 应答结果对象,其中包括JWT的Token数据,以及菜单列表。 + */ + @GetMapping("/getLoginInfo") + public ResponseResult getLoginInfo() { + TokenData tokenData = TokenData.takeFromRequest(); + // 这里解释一下为什么没有缓存menuList和permCodeList。 + // 1. 该操作和权限验证不同,属于低频操作。 + // 2. 第一次登录和再次获取登录信息之间,如果修改了用户的权限,那么本次获取的是最新权限。 + // 3. 上一个问题无法避免,因为即便缓存也是有过期时间的,过期之后还是要从数据库获取的。 + JSONObject jsonData = new JSONObject(); + jsonData.put("showName", tokenData.getShowName()); + jsonData.put("isAdmin", tokenData.getIsAdmin()); + Collection menuList; + Collection permCodeList; + if (tokenData.getIsAdmin()) { + menuList = sysMenuService.getAllMenuList(); + permCodeList = sysPermCodeService.getAllPermCodeList(); + } else { + menuList = sysMenuService.getMenuListByUserId(tokenData.getUserId()); + permCodeList = sysPermCodeService.getPermCodeListByUserId(tokenData.getUserId()); + } + jsonData.put("menuList", menuList); + jsonData.put("permCodeList", permCodeList); + return ResponseResult.success(jsonData); + } + + /** + * 通过UAA修改用户密码。 + * + * @param oldPass 原有密码。 + * @param newPass 新密码。 + * @return 应答结果对象。 + */ + @PostMapping("/changePasswordByUaa") + public ResponseResult changePasswordByUaa( + @MyRequestBody String oldPass, @MyRequestBody String newPass) throws Exception { + if (MyCommonUtil.existBlankArgument(newPass, oldPass)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + TokenData tokenData = TokenData.takeFromRequest(); + SysUser user = sysUserService.getById(tokenData.getUserId()); + if (user == null) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + oldPass = URLDecoder.decode(oldPass, StandardCharsets.UTF_8.name()); + // NOTE: 第一次使用时,请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。 + // 执行RsaUtil工具类中的main函数,可以生成新的公钥和私钥。 + oldPass = RsaUtil.decrypt(oldPass, ApplicationConstant.PRIVATE_KEY); + newPass = URLDecoder.decode(newPass, StandardCharsets.UTF_8.name()); + newPass = RsaUtil.decrypt(newPass, ApplicationConstant.PRIVATE_KEY); + String url = normalizeUaaBaseUrl() + "uaaauth/sysUaaUser/changePassword?" + + "access_token=" + tokenData.getUaaAccessToken() + + "&username=" + user.getLoginName() + + "&oldPass=" + oldPass + + "&newPass=" + newPass; + @SuppressWarnings("all") + ResponseEntity responseEntity = restTemplate.getForEntity(url, ResponseResult.class); + if (responseEntity.getStatusCode() != HttpStatus.OK) { + return ResponseResult.error(ErrorCodeEnum.INVALID_ACCESS_TOKEN); + } + ResponseResult result = responseEntity.getBody(); + return result.isSuccess() ? ResponseResult.success() : ResponseResult.errorFrom(result); + } + + private JSONObject buildLoginData(SysUser user, String accessToken) { + int deviceType = MyCommonUtil.getDeviceType(); + boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN; + TokenData tokenData = new TokenData(); + String sessionId = user.getLoginName() + "_" + deviceType + "_" + MyCommonUtil.generateUuid(); + tokenData.setUserId(user.getUserId()); + tokenData.setDeptId(user.getDeptId()); + tokenData.setIsAdmin(isAdmin); + tokenData.setLoginName(user.getLoginName()); + tokenData.setShowName(user.getShowName()); + tokenData.setSessionId(sessionId); + tokenData.setLoginIp(IpUtil.getRemoteIpAddress(ContextUtil.getHttpRequest())); + tokenData.setLoginTime(new Date()); + tokenData.setDeviceType(deviceType); + List userRoleList = sysRoleService.getSysUserRoleListByUserId(user.getUserId()); + if (CollectionUtils.isNotEmpty(userRoleList)) { + Set userRoleIdSet = userRoleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toSet()); + tokenData.setRoleIds(StringUtils.join(userRoleIdSet, ",")); + } + if (StringUtils.isNotBlank(accessToken)) { + tokenData.setUaaAccessToken(accessToken); + } + // 这里手动将TokenData存入request,便于OperationLogAspect统一处理操作日志。 + TokenData.addToRequest(tokenData); + JSONObject jsonData = new JSONObject(); + jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, tokenData); + jsonData.put("showName", user.getShowName()); + jsonData.put("isAdmin", isAdmin); + Collection menuList; + Collection permCodeList; + if (isAdmin) { + menuList = sysMenuService.getAllMenuList(); + permCodeList = sysPermCodeService.getAllPermCodeList(); + } else { + menuList = sysMenuService.getMenuListByUserId(tokenData.getUserId()); + permCodeList = sysPermCodeService.getPermCodeListByUserId(user.getUserId()); + // 将白名单url列表合并到当前用户的权限资源列表中,便于网关一并处理。 + Collection permList = sysPermService.getPermListByUserId(user.getUserId()); + permList.addAll(sysPermWhitelistService.getWhitelistPermList()); + jsonData.put("permSet", permList); + } + jsonData.put("menuList", menuList); + jsonData.put("permCodeList", permCodeList); + if (user.getUserType() != SysUserType.TYPE_ADMIN) { + sysDataPermService.putDataPermCache(sessionId, user.getUserId(), user.getDeptId()); + } + return jsonData; + } + + private ResponseEntity getAccessTokenByUsernameAndPassword( + String username, String password) throws UnsupportedEncodingException { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + byte[] authorization = (uaaConfig.getClientId() + ":" + + uaaConfig.getClientSecret()).getBytes(StandardCharsets.UTF_8); + String base64Auth = Base64.encodeBase64String(authorization); + headers.add("Authorization", "Basic " + base64Auth); + MultiValueMap param = new LinkedMultiValueMap<>(); + param.add("username", username); + param.add("password", password); + param.add("grant_type", "password"); + param.add("scope", "all"); + HttpEntity> request = new HttpEntity<>(param, headers); + return restTemplate.postForEntity(normalizeUaaBaseUrl() + "oauth/token", request, String.class); + } + + private ResponseEntity getAccessTokenByAuthCode(String authCode) throws UnsupportedEncodingException { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + byte[] authorization = (uaaConfig.getClientId() + ":" + + uaaConfig.getClientSecret()).getBytes(StandardCharsets.UTF_8); + String base64Auth = Base64.encodeBase64String(authorization); + headers.add("Authorization", "Basic " + base64Auth); + MultiValueMap param = new LinkedMultiValueMap<>(); + param.add("code", authCode); + param.add("grant_type", "authorization_code"); + param.add("redirect_uri", uaaConfig.getLoginUaaRedirectUri()); + param.add("scope", "all"); + HttpEntity> request = new HttpEntity<>(param, headers); + return restTemplate.postForEntity(normalizeUaaBaseUrl() + "oauth/token", request, String.class); + } + + private String normalizeUaaBaseUrl() { + String baseUrl = uaaConfig.getUaaBaseUri(); + String suffixChar = "/"; + if (!baseUrl.endsWith(suffixChar)) { + baseUrl = baseUrl + suffixChar; + } + return baseUrl; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/LoginUserController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/LoginUserController.java new file mode 100644 index 00000000..bd5c38e1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/LoginUserController.java @@ -0,0 +1,83 @@ +package com.orangeforms.upmsservice.controller; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.RedisKeyUtil; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +/** + * 在线用户控制器对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "在线用户接口") +@Slf4j +@RestController +@RequestMapping("/loginUser") +public class LoginUserController { + + @Autowired + private RedissonClient redissonClient; + + /** + * 显示在线用户列表。 + * + * @param loginName 登录名过滤。 + * @param pageParam 分页参数。 + * @return 登录用户信息列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody String loginName, @MyRequestBody MyPageParam pageParam) { + int queryCount = pageParam.getPageNum() * pageParam.getPageSize(); + int skipCount = (pageParam.getPageNum() - 1) * pageParam.getPageSize(); + String patternKey; + if (StrUtil.isBlank(loginName)) { + patternKey = RedisKeyUtil.getSessionIdPrefix() + "*"; + } else { + patternKey = RedisKeyUtil.getSessionIdPrefix(loginName) + "*"; + } + List loginUserInfoList = new LinkedList<>(); + Iterable keys = redissonClient.getKeys().getKeysByPattern(patternKey); + for (String key : keys) { + loginUserInfoList.add(this.buildTokenDataByRedisKey(key)); + } + loginUserInfoList.sort((o1, o2) -> (int) (o2.getLoginTime().getTime() - o1.getLoginTime().getTime())); + int toIndex = Math.min(skipCount + pageParam.getPageSize(), loginUserInfoList.size()); + List resultList = loginUserInfoList.subList(skipCount, toIndex); + return ResponseResult.success(new MyPageData<>(resultList, (long) loginUserInfoList.size())); + } + + /** + * 强制下线指定登录会话。 + * + * @param sessionId 待强制下线的SessionId。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody String sessionId) { + // 为了保证被剔除用户正在进行的操作不被干扰,这里只是删除sessionIdKey即可,这样可以使强制下线操作更加平滑。 + // 比如,如果删除操作权限或数据权限的redis session key,那么正在请求数据的操作就会报错。 + redissonClient.getBucket(RedisKeyUtil.makeSessionIdKey(sessionId)).delete(); + return ResponseResult.success(); + } + + private LoginUserInfo buildTokenDataByRedisKey(String key) { + RBucket sessionData = redissonClient.getBucket(key); + TokenData tokenData = JSON.parseObject(sessionData.get(), TokenData.class); + return BeanUtil.copyProperties(tokenData, LoginUserInfo.class); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysDataPermController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysDataPermController.java new file mode 100644 index 00000000..5dfaafdd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysDataPermController.java @@ -0,0 +1,303 @@ +package com.orangeforms.upmsservice.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import com.alibaba.fastjson.TypeReference; +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.util.MyPageUtil; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsapi.dto.SysDataPermDto; +import com.orangeforms.upmsapi.dto.SysUserDto; +import com.orangeforms.upmsapi.vo.SysDataPermVo; +import com.orangeforms.upmsapi.vo.SysUserVo; +import com.orangeforms.upmsservice.model.SysDataPerm; +import com.orangeforms.upmsservice.model.SysUser; +import com.orangeforms.upmsservice.service.SysDataPermService; +import com.orangeforms.upmsservice.service.SysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 数据权限接口控制器对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "数据权限管理接口") +@Slf4j +@RestController +@RequestMapping("/sysDataPerm") +public class SysDataPermController { + + @Autowired + private SysDataPermService sysDataPermService; + @Autowired + private SysUserService sysUserService; + + /** + * 添加新数据权限。 + * + * @param sysDataPermDto 新增对象。 + * @param deptIdListString 数据权限关联的部门Id列表,多个之间逗号分隔。 + * @return 应答结果对象。包含新增数据权限对象的主键Id。 + */ + @ApiOperationSupport(ignoreParameters = { + "sysDataPermDto.dataPermId", + "sysDataPermDto.createTimeStart", + "sysDataPermDto.createTimeEnd", + "sysDataPermDto.searchString"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysDataPermDto sysDataPermDto, @MyRequestBody String deptIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDataPermDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDataPerm sysDataPerm = MyModelUtil.copyTo(sysDataPermDto, SysDataPerm.class); + CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set deptIdSet = null; + if (result.getData() != null) { + deptIdSet = result.getData().getObject("deptIdSet", new TypeReference>(){}); + } + sysDataPermService.saveNew(sysDataPerm, deptIdSet); + return ResponseResult.success(sysDataPerm.getDataPermId()); + } + + /** + * 更新数据权限。 + * + * @param sysDataPermDto 更新的数据权限对象。 + * @param deptIdListString 数据权限关联的部门Id列表,多个之间逗号分隔。 + * @return 应答结果对象。 + */ + @ApiOperationSupport(ignoreParameters = { + "sysDataPermDto.createTimeStart", + "sysDataPermDto.createTimeEnd", + "sysDataPermDto.searchString"}) + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysDataPermDto sysDataPermDto, @MyRequestBody String deptIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDataPermDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDataPerm originalSysDataPerm = sysDataPermService.getById(sysDataPermDto.getDataPermId()); + if (originalSysDataPerm == null) { + errorMessage = "数据验证失败,当前数据权限并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysDataPerm sysDataPerm = MyModelUtil.copyTo(sysDataPermDto, SysDataPerm.class); + CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set deptIdSet = null; + if (result.getData() != null) { + deptIdSet = result.getData().getObject("deptIdSet", new TypeReference>(){}); + } + if (!sysDataPermService.update(sysDataPerm, originalSysDataPerm, deptIdSet)) { + errorMessage = "更新失败,数据不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除数据权限。 + * + * @param dataPermId 待删除数据权限主键Id。 + * @return 应答数据结果。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.remove(dataPermId)) { + String errorMessage = "数据操作失败,数据权限不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 数据权限列表。 + * + * @param sysDataPermDtoFilter 数据权限查询过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象。包含数据权限列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysDataPermDto sysDataPermDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysDataPerm filter = MyModelUtil.copyTo(sysDataPermDtoFilter, SysDataPerm.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDataPerm.class); + List dataPermList = sysDataPermService.getSysDataPermList(filter, orderBy); + List dataPermVoList = MyModelUtil.copyCollectionTo(dataPermList, SysDataPermVo.class); + long totalCount = 0L; + if (dataPermList instanceof Page) { + totalCount = ((Page) dataPermList).getTotal(); + } + return ResponseResult.success(MyPageUtil.makeResponseData(dataPermVoList, totalCount)); + } + + /** + * 查看单条数据权限详情。 + * + * @param dataPermId 数据权限的主键Id。 + * @return 应答结果对象,包含数据权限的详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysDataPerm sysDataPerm = + sysDataPermService.getByIdWithRelation(dataPermId, MyRelationParam.full()); + if (sysDataPerm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysDataPermVo sysDataPermVo = MyModelUtil.copyTo(sysDataPerm, SysDataPermVo.class); + return ResponseResult.success(sysDataPermVo); + } + + /** + * 获取不包含指定数据权限Id的用户列表。 + * 用户和数据权限是多对多关系,当前接口将返回没有赋值指定DataPermId的用户列表。可用于给数据权限添加新用户。 + * + * @param dataPermId 数据权限主键Id。 + * @param sysUserDtoFilter 用户数据的过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listNotInDataPermUser") + public ResponseResult> listNotInDataPermUser( + @MyRequestBody Long dataPermId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doDataPermUserVerify(dataPermId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = + sysUserService.getNotInSysUserListByDataPermId(dataPermId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + /** + * 拥有指定数据权限的用户列表。 + * + * @param dataPermId 数据权限Id。 + * @param sysUserDtoFilter 用户过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listDataPermUser") + public ResponseResult> listDataPermUser( + @MyRequestBody Long dataPermId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doDataPermUserVerify(dataPermId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = + sysUserService.getSysUserListByDataPermId(dataPermId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + private ResponseResult doDataPermUserVerify(Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.existId(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); + } + + /** + * 为指定数据权限添加用户列表。该操作可同时给一批用户赋值数据权限,并在同一事务内完成。 + * + * @param dataPermId 数据权限主键Id。 + * @param userIdListString 逗号分隔的用户Id列表。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.ADD_M2M) + @PostMapping("/addDataPermUser") + public ResponseResult addDataPermUser( + @MyRequestBody Long dataPermId, @MyRequestBody String userIdListString) { + if (MyCommonUtil.existBlankArgument(dataPermId, userIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + Set userIdSet = + Arrays.stream(userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDataPermService.existId(dataPermId) + || !sysUserService.existUniqueKeyList("userId", userIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + sysDataPermService.addDataPermUserList(dataPermId, userIdSet); + return ResponseResult.success(); + } + + /** + * 为指定用户移除指定数据权限。 + * + * @param dataPermId 指定数据权限主键Id。 + * @param userId 指定用户主键Id。 + * @return 应答数据结果。 + */ + @OperationLog(type = SysOperationLogType.DELETE_M2M) + @PostMapping("/deleteDataPermUser") + public ResponseResult deleteDataPermUser( + @MyRequestBody Long dataPermId, @MyRequestBody Long userId) { + if (MyCommonUtil.existBlankArgument(dataPermId, userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.removeDataPermUser(dataPermId, userId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysDeptController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysDeptController.java new file mode 100644 index 00000000..f21ab628 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysDeptController.java @@ -0,0 +1,393 @@ +package com.orangeforms.upmsservice.controller; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.upmsservice.service.*; +import com.orangeforms.upmsapi.dto.*; +import com.orangeforms.upmsapi.vo.*; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.*; +import com.orangeforms.common.core.base.controller.BaseController; +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 部门管理操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "部门管理管理接口") +@Slf4j +@RestController +@RequestMapping("/sysDept") +public class SysDeptController extends BaseController { + + @Autowired + private SysDeptService sysDeptService; + + @Override + protected IBaseService service() { + return sysDeptService; + } + + /** + * 新增部门管理数据。 + * + * @param sysDeptDto 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @ApiOperationSupport(ignoreParameters = {"sysDeptDto.deptId"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysDeptDto sysDeptDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDeptDto, false); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDept sysDept = MyModelUtil.copyTo(sysDeptDto, SysDept.class); + // 验证父Id的数据合法性 + SysDept parentSysDept = null; + if (MyCommonUtil.isNotBlankOrNull(sysDept.getParentId())) { + parentSysDept = sysDeptService.getById(sysDept.getParentId()); + if (parentSysDept == null) { + errorMessage = "数据验证失败,关联的父节点并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + } + sysDept = sysDeptService.saveNew(sysDept, parentSysDept); + return ResponseResult.success(sysDept.getDeptId()); + } + + /** + * 更新部门管理数据。 + * + * @param sysDeptDto 更新对象。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysDeptDto sysDeptDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDeptDto, true); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysDept sysDept = MyModelUtil.copyTo(sysDeptDto, SysDept.class); + SysDept originalSysDept = sysDeptService.getById(sysDept.getDeptId()); + if (originalSysDept == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证父Id的数据合法性 + if (MyCommonUtil.isNotBlankOrNull(sysDept.getParentId()) + && ObjectUtils.notEqual(sysDept.getParentId(), originalSysDept.getParentId())) { + SysDept parentSysDept = sysDeptService.getById(sysDept.getParentId()); + if (parentSysDept == null) { + errorMessage = "数据验证失败,关联的父节点并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + } + if (!sysDeptService.update(sysDept, originalSysDept)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除部门管理数据。 + * + * @param deptId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long deptId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(deptId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysDept originalSysDept = sysDeptService.getById(deptId); + if (originalSysDept == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (sysDeptService.hasChildren(deptId)) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象存在子对象],请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (sysDeptService.hasChildrenUser(deptId)) { + errorMessage = "数据验证失败,请先移除部门用户数据后,再删除当前部门!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysDeptService.remove(deptId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的部门管理列表。 + * + * @param sysDeptDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysDeptDto sysDeptDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysDept sysDeptFilter = MyModelUtil.copyTo(sysDeptDtoFilter, SysDept.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDept.class); + List sysDeptList = sysDeptService.getSysDeptListWithRelation(sysDeptFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(sysDeptList, SysDept.INSTANCE)); + } + + /** + * 查看指定部门管理对象详情。 + * + * @param deptId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long deptId) { + if (MyCommonUtil.existBlankArgument(deptId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysDept sysDept = sysDeptService.getByIdWithRelation(deptId, MyRelationParam.full()); + if (sysDept == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysDeptVo sysDeptVo = SysDept.INSTANCE.fromModel(sysDept); + return ResponseResult.success(sysDeptVo); + } + + /** + * 以字典形式返回全部部门管理数据集合。字典的键值为[deptId, deptName]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含字典形式的数据集合。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(SysDept filter) { + List resultList = sysDeptService.getListByFilter(filter); + return ResponseResult.success( + BeanQuery.select("parentId as parentId", "deptId as id", "deptName as name").executeFrom(resultList)); + } + + /** + * 根据字典Id集合,获取查询后的字典数据。 + * + * @param dictIds 字典Id集合。 + * @return 应答结果对象,包含字典形式的数据集合。 + */ + @PostMapping("/listDictByIds") + public ResponseResult>> listDictByIds( + @MyRequestBody(elementType = Long.class) List dictIds) { + List resultList = sysDeptService.getInList(new HashSet<>(dictIds)); + return ResponseResult.success( + BeanQuery.select("parentId as parentId", "deptId as id", "deptName as name").executeFrom(resultList)); + } + + /** + * 根据父主键Id,以字典的形式返回其下级数据列表。 + * 白名单接口,登录用户均可访问。 + * + * @param parentId 父主键Id。 + * @return 按照字典的形式返回下级数据列表。 + */ + @GetMapping("/listDictByParentId") + public ResponseResult>> listDictByParentId(@RequestParam(required = false) Long parentId) { + List resultList = sysDeptService.getListByParentId("parentId", parentId); + return ResponseResult.success( + BeanQuery.select("parentId as parentId", "deptId as id", "deptName as name").executeFrom(resultList)); + } + + /** + * 根据主键Id集合,获取数据对象集合。仅限于微服务间远程接口调用。 + * + * @param deptIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象集合。 + */ + @ApiOperation(hidden = true, value = "listByIds") + @PostMapping("/listByIds") + public ResponseResult> listByIds( + @RequestParam Set deptIds, @RequestParam Boolean withDict) { + return super.baseListByIds(deptIds, withDict, SysDept.INSTANCE); + } + + /** + * 根据主键Id,获取数据对象。仅限于微服务间远程接口调用。 + * + * @param deptId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @ApiOperation(hidden = true, value = "getById") + @PostMapping("/getById") + public ResponseResult getById( + @RequestParam Long deptId, @RequestParam Boolean withDict) { + return super.baseGetById(deptId, withDict, SysDept.INSTANCE); + } + + /** + * 判断参数列表中指定的主键Id集合,是否全部存在。仅限于微服务间远程接口调用。 + * + * @param deptIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existIds") + @PostMapping("/existIds") + public ResponseResult existIds(@RequestParam Set deptIds) { + return super.baseExistIds(deptIds); + } + + /** + * 判断参数列表中指定的主键Id是否存在。仅限于微服务间远程接口调用。 + * + * @param deptId 主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existId") + @PostMapping("/existId") + public ResponseResult existId(@RequestParam Long deptId) { + return super.baseExistId(deptId); + } + + /** + * 根据最新对象列表和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedData") + @PostMapping("/verifyRelatedData") + public ResponseResult verifyRelatedData(@RequestBody SysDeptDto data) { + SysDept sysDept = MyModelUtil.copyTo(data, SysDept.class); + return super.baseVerifyRelatedData(sysDept, SysDept::getDeptId); + } + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedDataList") + @PostMapping("/verifyRelatedDataList") + public ResponseResult verifyRelatedDataList(@RequestBody List dataList) { + List sysDeptList = MyModelUtil.copyCollectionTo(dataList, SysDept.class); + return super.baseVerifyRelatedDataList(sysDeptList, SysDept::getDeptId); + } + + /** + * 根据主键Id删除数据。 + * + * @param deptId 主键Id。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteById") + @PostMapping("/deleteById") + public ResponseResult deleteById(@RequestParam Long deptId) throws Exception { + SysDept filter = new SysDept(); + filter.setDeptId(deptId); + return super.baseDeleteBy(filter); + } + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteBy") + @PostMapping("/deleteBy") + public ResponseResult deleteBy(@RequestBody SysDeptDto filter) throws Exception { + return super.baseDeleteBy(MyModelUtil.copyTo(filter, SysDept.class)); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listBy") + @PostMapping("/listBy") + public ResponseResult> listBy(@RequestBody MyQueryParam queryParam) { + return super.baseListBy(queryParam, SysDept.INSTANCE); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listMapBy") + @PostMapping("/listMapBy") + public ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam) { + return super.baseListMapBy(queryParam, SysDept.INSTANCE); + } + + /** + * 复杂的查询调用,仅返回单体记录。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含符合查询过滤条件的对象结果集。 + */ + @ApiOperation(hidden = true, value = "getBy") + @PostMapping("/getBy") + public ResponseResult getBy(@RequestBody MyQueryParam queryParam) { + return super.baseGetBy(queryParam, SysDept.INSTANCE); + } + + /** + * 获取远程主对象中符合查询条件的数据数量。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @ApiOperation(hidden = true, value = "countBy") + @PostMapping("/countBy") + public ResponseResult countBy(@RequestBody MyQueryParam queryParam) { + return super.baseCountBy(queryParam); + } + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @ApiOperation(hidden = true, value = "aggregateBy") + @PostMapping("/aggregateBy") + public ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam) { + return super.baseAggregateBy(aggregationParam); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysMenuController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysMenuController.java new file mode 100644 index 00000000..b3fdcdac --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysMenuController.java @@ -0,0 +1,225 @@ +package com.orangeforms.upmsservice.controller; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.TypeReference; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsapi.dto.SysMenuDto; +import com.orangeforms.upmsapi.vo.SysMenuVo; +import com.orangeforms.upmsapi.constant.SysMenuType; +import com.orangeforms.upmsservice.model.SysMenu; +import com.orangeforms.upmsservice.service.SysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; + +/** + * 菜单管理接口控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "菜单管理接口") +@Slf4j +@RestController +@RequestMapping("/sysMenu") +public class SysMenuController { + + @Autowired + private SysMenuService sysMenuService; + + /** + * 添加新菜单操作。 + * + * @param sysMenuDto 新菜单对象。 + * @param permCodeIdListString 与当前菜单Id绑定的权限Id列表,多个权限之间逗号分隔。 + * @return 应答结果对象,包含新增菜单的主键Id。 + */ + @ApiOperationSupport(ignoreParameters = {"sysMenuDto.menuId"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class); + if (sysMenu.getParentId() != null) { + SysMenu parentSysMenu = sysMenuService.getById(sysMenu.getParentId()); + if (parentSysMenu == null) { + errorMessage = "数据验证失败,关联的父菜单不存在!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (parentSysMenu.getOnlineFormId() != null) { + errorMessage = "数据验证失败,不能动态表单菜单添加父菜单!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + CallResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permCodeIdSet = null; + if (result.getData() != null) { + permCodeIdSet = result.getData().getObject("permCodeIdSet", new TypeReference>(){}); + } + sysMenuService.saveNew(sysMenu, permCodeIdSet); + return ResponseResult.success(sysMenu.getMenuId()); + } + + /** + * 更新菜单数据操作。 + * + * @param sysMenuDto 更新菜单对象。 + * @param permCodeIdListString 与当前菜单Id绑定的权限Id列表,多个权限之间逗号分隔。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysMenu originalSysMenu = sysMenuService.getById(sysMenuDto.getMenuId()); + if (originalSysMenu == null) { + errorMessage = "数据验证失败,当前菜单并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class); + if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) { + if (originalSysMenu.getOnlineFormId() == null) { + errorMessage = "数据验证失败,不能为当前菜单添加在线表单Id属性!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (sysMenu.getOnlineFormId() == null) { + errorMessage = "数据验证失败,不能去掉当前菜单的在线表单Id属性!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + } + if (originalSysMenu.getOnlineFormId() != null + && originalSysMenu.getMenuType().equals(SysMenuType.TYPE_BUTTON)) { + errorMessage = "数据验证失败,在线表单的内置菜单不能编辑!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + CallResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permCodeIdSet = null; + if (result.getData() != null) { + permCodeIdSet = result.getData().getObject("permCodeIdSet", new TypeReference>(){}); + } + if (!sysMenuService.update(sysMenu, originalSysMenu, permCodeIdSet)) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定菜单操作。 + * + * @param menuId 指定菜单主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long menuId) { + if (MyCommonUtil.existBlankArgument(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + SysMenu menu = sysMenuService.getById(menuId); + if (menu == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + if (menu.getOnlineFormId() != null && menu.getMenuType().equals(SysMenuType.TYPE_BUTTON)) { + errorMessage = "数据验证失败,在线表单的内置菜单不能删除!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 对于在线表单,无需进行子菜单的验证,而是在删除的时候,连同子菜单一起删除。 + if (menu.getOnlineFormId() == null && sysMenuService.hasChildren(menuId)) { + errorMessage = "数据验证失败,当前菜单存在下级菜单!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysMenuService.remove(menu)) { + errorMessage = "数据操作失败,菜单不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 获取全部菜单列表。 + * + * @return 应答结果对象,包含全部菜单数据列表。 + */ + @PostMapping("/list") + public ResponseResult> list() { + Collection sysMenuList = sysMenuService.getAllListByOrder("showOrder"); + return ResponseResult.success(MyModelUtil.copyCollectionTo(sysMenuList, SysMenuVo.class)); + } + + /** + * 查看指定菜单数据详情。 + * + * @param menuId 指定菜单主键Id。 + * @return 应答结果对象,包含菜单详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long menuId) { + if (MyCommonUtil.existBlankArgument(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysMenu sysMenu = sysMenuService.getByIdWithRelation(menuId, MyRelationParam.full()); + if (sysMenu == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysMenuVo sysMenuVo = MyModelUtil.copyTo(sysMenu, SysMenuVo.class); + return ResponseResult.success(sysMenuVo); + } + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 应答对象,包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermWithDetail") + public ResponseResult>> listSysPermWithDetail(Long menuId, String url) { + if (MyCommonUtil.isBlankOrNull(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysMenuService.getSysPermListWithDetail(menuId, url)); + } + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 应答对象,包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysUserWithDetail") + public ResponseResult>> listSysUserWithDetail(Long menuId, String loginName) { + if (MyCommonUtil.isBlankOrNull(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysMenuService.getSysUserListWithDetail(menuId, loginName)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysOperationLogController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysOperationLogController.java new file mode 100644 index 00000000..e600be8b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysOperationLogController.java @@ -0,0 +1,61 @@ +package com.orangeforms.upmsservice.controller; + +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import io.swagger.annotations.Api; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.MyPageUtil; +import com.orangeforms.common.log.model.SysOperationLog; +import com.orangeforms.common.log.service.SysOperationLogService; +import com.orangeforms.upmsapi.dto.SysOperationLogDto; +import com.orangeforms.upmsapi.vo.SysOperationLogVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 操作日志接口控制器对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "操作日志接口") +@Slf4j +@RestController +@RequestMapping("/sysOperationLog") +public class SysOperationLogController { + + @Autowired + private SysOperationLogService operationLogService; + + /** + * 数据权限列表。 + * + * @param sysOperationLogDtoFilter 操作日志查询过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象。包含操作日志列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysOperationLogDto sysOperationLogDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysOperationLog filter = MyModelUtil.copyTo(sysOperationLogDtoFilter, SysOperationLog.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysOperationLog.class); + List operationLogList = operationLogService.getSysOperationLogList(filter, orderBy); + List operationLogVoList = MyModelUtil.copyCollectionTo(operationLogList, SysOperationLogVo.class); + long totalCount = 0L; + if (operationLogList instanceof Page) { + totalCount = ((Page) operationLogList).getTotal(); + } + return ResponseResult.success(MyPageUtil.makeResponseData(operationLogVoList, totalCount)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermCodeController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermCodeController.java new file mode 100644 index 00000000..cffc016a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermCodeController.java @@ -0,0 +1,196 @@ +package com.orangeforms.upmsservice.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import com.alibaba.fastjson.TypeReference; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsapi.dto.SysPermCodeDto; +import com.orangeforms.upmsapi.vo.SysPermCodeVo; +import com.orangeforms.upmsservice.model.SysPermCode; +import com.orangeforms.upmsservice.service.SysPermCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; + +/** + * 权限字管理接口控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "权限字管理接口") +@Slf4j +@RestController +@RequestMapping("/sysPermCode") +public class SysPermCodeController { + + @Autowired + private SysPermCodeService sysPermCodeService; + + /** + * 新增权限字操作。 + * + * @param sysPermCodeDto 新增权限字对象。 + * @param permIdListString 与当前权限Id绑定的权限资源Id列表,多个权限资源之间逗号分隔。 + * @return 应答结果对象,包含新增权限字的主键Id。 + */ + @ApiOperationSupport(ignoreParameters = {"sysPermCodeDto.permCodeId"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); + } + SysPermCode sysPermCode = MyModelUtil.copyTo(sysPermCodeDto, SysPermCode.class); + CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, null, permIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permIdSet = null; + if (result.getData() != null) { + permIdSet = result.getData().getObject("permIdSet", new TypeReference>(){}); + } + sysPermCode = sysPermCodeService.saveNew(sysPermCode, permIdSet); + return ResponseResult.success(sysPermCode.getPermCodeId()); + } + + /** + * 更新权限字操作。 + * + * @param sysPermCodeDto 更新权限字对象。 + * @param permIdListString 与当前权限Id绑定的权限资源Id列表,多个权限资源之间逗号分隔。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPermCode originalSysPermCode = sysPermCodeService.getById(sysPermCodeDto.getPermCodeId()); + if (originalSysPermCode == null) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysPermCode sysPermCode = MyModelUtil.copyTo(sysPermCodeDto, SysPermCode.class); + CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, originalSysPermCode, permIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set permIdSet = null; + if (result.getData() != null) { + permIdSet = result.getData().getObject("permIdSet", new TypeReference>(){}); + } + try { + if (!sysPermCodeService.update(sysPermCode, originalSysPermCode, permIdSet)) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + } catch (DuplicateKeyException e) { + errorMessage = "数据操作失败,权限字编码已经存在!"; + return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定权限字操作。 + * + * @param permCodeId 指定的权限字主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long permCodeId) { + if (MyCommonUtil.existBlankArgument(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + if (sysPermCodeService.hasChildren(permCodeId)) { + errorMessage = "数据验证失败,当前权限字存在下级权限字!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysPermCodeService.remove(permCodeId)) { + errorMessage = "数据操作失败,权限字不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看权限字列表。 + * + * @return 应答结果对象,包含权限字列表。 + */ + @PostMapping("/list") + public ResponseResult> list() { + List sysPermCodeList = + sysPermCodeService.getAllListByOrder("permCodeType", "showOrder"); + return ResponseResult.success(MyModelUtil.copyCollectionTo(sysPermCodeList, SysPermCodeVo.class)); + } + + /** + * 查看权限字对象详情。 + * + * @param permCodeId 指定权限字主键Id。 + * @return 应答结果对象,包含权限字对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long permCodeId) { + if (MyCommonUtil.existBlankArgument(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysPermCode sysPermCode = + sysPermCodeService.getByIdWithRelation(permCodeId, MyRelationParam.full()); + if (sysPermCode == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysPermCodeVo sysPermCodeVo = MyModelUtil.copyTo(sysPermCode, SysPermCodeVo.class); + return ResponseResult.success(sysPermCodeVo); + } + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 应答对象。包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysUserWithDetail") + public ResponseResult>> listSysUserWithDetail(Long permCodeId, String loginName) { + if (MyCommonUtil.isBlankOrNull(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermCodeService.getSysUserListWithDetail(permCodeId, loginName)); + } + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 应答对象。包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysRoleWithDetail") + public ResponseResult>> listSysRoleWithDetail(Long permCodeId, String roleName) { + if (MyCommonUtil.isBlankOrNull(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermCodeService.getSysRoleListWithDetail(permCodeId, roleName)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermController.java new file mode 100644 index 00000000..7f4d9f69 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermController.java @@ -0,0 +1,198 @@ +package com.orangeforms.upmsservice.controller; + +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.util.MyPageUtil; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsapi.dto.SysPermDto; +import com.orangeforms.upmsapi.vo.SysPermVo; +import com.orangeforms.upmsservice.model.SysPerm; +import com.orangeforms.upmsservice.service.SysPermService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.List; +import java.util.Map; + +/** + * 权限资源管理接口控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "权限资源管理接口") +@Slf4j +@RestController +@RequestMapping("/sysPerm") +public class SysPermController { + + @Autowired + private SysPermService sysPermService; + + /** + * 新增权限资源操作。 + * + * @param sysPermDto 新增权限资源对象。 + * @return 应答结果对象,包含新增权限资源的主键Id。 + */ + @ApiOperationSupport(ignoreParameters = {"sysPermDto.permId"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysPermDto sysPermDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPerm sysPerm = MyModelUtil.copyTo(sysPermDto, SysPerm.class); + CallResult result = sysPermService.verifyRelatedData(sysPerm, null); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + sysPerm = sysPermService.saveNew(sysPerm); + return ResponseResult.success(sysPerm.getPermId()); + } + + /** + * 更新权限资源操作。 + * + * @param sysPermDto 更新权限资源对象。 + * @return 应答结果对象,包含更新权限资源的主键Id。 + */ + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysPermDto sysPermDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPerm originalPerm = sysPermService.getById(sysPermDto.getPermId()); + if (originalPerm == null) { + errorMessage = "数据验证失败,当前权限资源并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysPerm sysPerm = MyModelUtil.copyTo(sysPermDto, SysPerm.class); + CallResult result = sysPermService.verifyRelatedData(sysPerm, originalPerm); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + sysPermService.update(sysPerm, originalPerm); + return ResponseResult.success(); + } + + /** + * 删除指定权限资源操作。 + * + * @param permId 指定的权限资源主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long permId) { + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysPermService.remove(permId)) { + String errorMessage = "数据操作失败,权限不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看权限资源对象详情。 + * + * @param permId 指定权限资源主键Id。 + * @return 应答结果对象,包含权限资源对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long permId) { + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysPerm perm = sysPermService.getById(permId); + if (perm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysPermVo permVo = MyModelUtil.copyTo(perm, SysPermVo.class); + return ResponseResult.success(permVo); + } + + /** + * 查看权限资源列表。 + * + * @param sysPermDtoFilter 过滤对象。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含权限资源列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysPermDto sysPermDtoFilter, @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysPerm filter = MyModelUtil.copyTo(sysPermDtoFilter, SysPerm.class); + List permList = sysPermService.getPermListWithRelation(filter); + List permVoList = MyModelUtil.copyCollectionTo(permList, SysPermVo.class); + long totalCount = 0L; + if (permList instanceof Page) { + totalCount = ((Page) permList).getTotal(); + } + return ResponseResult.success(MyPageUtil.makeResponseData(permVoList, totalCount)); + } + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 应答对象。包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysUserWithDetail") + public ResponseResult>> listSysUserWithDetail(Long permId, String loginName) { + if (MyCommonUtil.isBlankOrNull(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermService.getSysUserListWithDetail(permId, loginName)); + } + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 应答对象。包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysRoleWithDetail") + public ResponseResult>> listSysRoleWithDetail(Long permId, String roleName) { + if (MyCommonUtil.isBlankOrNull(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermService.getSysRoleListWithDetail(permId, roleName)); + } + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 应答对象。包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysMenuWithDetail") + public ResponseResult>> listSysMenuWithDetail(Long permId, String menuName) { + if (MyCommonUtil.isBlankOrNull(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysPermService.getSysMenuListWithDetail(permId, menuName)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermModuleController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermModuleController.java new file mode 100644 index 00000000..cd1ac95f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysPermModuleController.java @@ -0,0 +1,169 @@ +package com.orangeforms.upmsservice.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsapi.dto.SysPermModuleDto; +import com.orangeforms.upmsapi.vo.SysPermModuleVo; +import com.orangeforms.upmsservice.model.SysPerm; +import com.orangeforms.upmsservice.model.SysPermModule; +import com.orangeforms.upmsservice.service.SysPermModuleService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * 权限资源模块管理接口控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "权限资源模块管理接口") +@Slf4j +@RestController +@RequestMapping("/sysPermModule") +public class SysPermModuleController { + + @Autowired + private SysPermModuleService sysPermModuleService; + + /** + * 新增权限资源模块操作。 + * + * @param sysPermModuleDto 新增权限资源模块对象。 + * @return 应答结果对象,包含新增权限资源模块的主键Id。 + */ + @ApiOperationSupport(ignoreParameters = {"sysPermModuleDto.moduleId"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysPermModuleDto sysPermModuleDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPermModule sysPermModule = MyModelUtil.copyTo(sysPermModuleDto, SysPermModule.class); + if (sysPermModule.getParentId() != null + && sysPermModuleService.getById(sysPermModule.getParentId()) == null) { + errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + sysPermModule = sysPermModuleService.saveNew(sysPermModule); + return ResponseResult.success(sysPermModule.getModuleId()); + } + + /** + * 更新权限资源模块操作。 + * + * @param sysPermModuleDto 更新权限资源模块对象。 + * @return 应答结果对象,包含新增权限资源模块的主键Id。 + */ + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysPermModuleDto sysPermModuleDto) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysPermModule sysPermModule = MyModelUtil.copyTo(sysPermModuleDto, SysPermModule.class); + SysPermModule originalPermModule = sysPermModuleService.getById(sysPermModule.getModuleId()); + if (originalPermModule == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + if (sysPermModule.getParentId() != null + && !sysPermModule.getParentId().equals(originalPermModule.getParentId())) { + if (sysPermModuleService.getById(sysPermModule.getParentId()) == null) { + errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + } + if (!sysPermModuleService.update(sysPermModule, originalPermModule)) { + errorMessage = "数据验证失败,当前模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定权限资源模块操作。 + * + * @param moduleId 指定的权限资源模块主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long moduleId) { + if (MyCommonUtil.existBlankArgument(moduleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + if (sysPermModuleService.hasChildren(moduleId) + || sysPermModuleService.hasModulePerms(moduleId)) { + errorMessage = "数据验证失败,当前权限模块存在子模块或权限资源,请先删除关联数据!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysPermModuleService.remove(moduleId)) { + errorMessage = "数据操作失败,权限模块不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看全部权限资源模块列表。 + * + * @return 应答结果对象,包含权限资源模块列表。 + */ + @PostMapping("/list") + public ResponseResult> list() { + List permModuleList = sysPermModuleService.getAllListByOrder("showOrder"); + return ResponseResult.success(MyModelUtil.copyCollectionTo(permModuleList, SysPermModuleVo.class)); + } + + /** + * 列出全部权限资源模块及其下级关联的权限资源列表。 + * + * @return 应答结果对象,包含树状列表, + */ + @PostMapping("/listAll") + public ResponseResult>> listAll() { + List sysPermModuleList = sysPermModuleService.getPermModuleAndPermList(); + List> resultList = new LinkedList<>(); + for (SysPermModule sysPermModule : sysPermModuleList) { + Map permModuleMap = new HashMap<>(5); + permModuleMap.put("id", sysPermModule.getModuleId()); + permModuleMap.put("name", sysPermModule.getModuleName()); + permModuleMap.put("type", sysPermModule.getModuleType()); + permModuleMap.put("isPerm", false); + if (MyCommonUtil.isNotBlankOrNull(sysPermModule.getParentId())) { + permModuleMap.put("parentId", sysPermModule.getParentId()); + } + resultList.add(permModuleMap); + if (CollectionUtils.isNotEmpty(sysPermModule.getSysPermList())) { + for (SysPerm sysPerm : sysPermModule.getSysPermList()) { + Map permMap = new HashMap<>(4); + permMap.put("id", sysPerm.getPermId()); + permMap.put("name", sysPerm.getPermName()); + permMap.put("isPerm", true); + permMap.put("url", sysPerm.getUrl()); + permMap.put("parentId", sysPermModule.getModuleId()); + resultList.add(permMap); + } + } + } + return ResponseResult.success(resultList); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysRoleController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysRoleController.java new file mode 100644 index 00000000..2a2e5e76 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysRoleController.java @@ -0,0 +1,360 @@ +package com.orangeforms.upmsservice.controller; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import com.alibaba.fastjson.TypeReference; +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.MyPageUtil; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsapi.dto.SysRoleDto; +import com.orangeforms.upmsapi.dto.SysUserDto; +import com.orangeforms.upmsapi.vo.SysRoleVo; +import com.orangeforms.upmsapi.vo.SysUserVo; +import com.orangeforms.upmsservice.model.SysRole; +import com.orangeforms.upmsservice.model.SysUser; +import com.orangeforms.upmsservice.model.SysUserRole; +import com.orangeforms.upmsservice.service.SysRoleService; +import com.orangeforms.upmsservice.service.SysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.groups.Default; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 角色管理接口控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "角色管理接口") +@Slf4j +@RestController +@RequestMapping("/sysRole") +public class SysRoleController { + + @Autowired + private SysRoleService sysRoleService; + @Autowired + private SysUserService sysUserService; + + /** + * 新增角色操作。 + * + * @param sysRoleDto 新增角色对象。 + * @param menuIdListString 与当前角色Id绑定的menuId列表,多个menuId之间逗号分隔。 + * @return 应答结果对象,包含新增角色的主键Id。 + */ + @ApiOperationSupport(ignoreParameters = {"sysRoleDto.roleId", "sysRoleDto.createTimeStart", "sysRoleDto.createTimeEnd"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysRole sysRole = MyModelUtil.copyTo(sysRoleDto, SysRole.class); + CallResult result = sysRoleService.verifyRelatedData(sysRole, null, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set menuIdSet = null; + if (result.getData() != null) { + menuIdSet = result.getData().getObject("menuIdSet", new TypeReference>(){}); + } + sysRoleService.saveNew(sysRole, menuIdSet); + return ResponseResult.success(sysRole.getRoleId()); + } + + /** + * 更新角色操作。 + * + * @param sysRoleDto 更新角色对象。 + * @param menuIdListString 与当前角色Id绑定的menuId列表,多个menuId之间逗号分隔。 + * @return 应答结果对象。 + */ + @ApiOperationSupport(ignoreParameters = {"sysRoleDto.createTimeStart", "sysRoleDto.createTimeEnd"}) + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysRole originalSysRole = sysRoleService.getById(sysRoleDto.getRoleId()); + if (originalSysRole == null) { + errorMessage = "数据验证失败,当前角色并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + SysRole sysRole = MyModelUtil.copyTo(sysRoleDto, SysRole.class); + CallResult result = sysRoleService.verifyRelatedData(sysRole, originalSysRole, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set menuIdSet = null; + if (result.getData() != null) { + menuIdSet = result.getData().getObject("menuIdSet", new TypeReference>(){}); + } + if (!sysRoleService.update(sysRole, originalSysRole, menuIdSet)) { + errorMessage = "更新失败,数据不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 删除指定角色操作。 + * + * @param roleId 指定角色主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.remove(roleId)) { + String errorMessage = "数据操作失败,角色不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 查看角色列表。 + * + * @param sysRoleDtoFilter 角色过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含角色列表。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysRoleDto sysRoleDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysRole filter = MyModelUtil.copyTo(sysRoleDtoFilter, SysRole.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysRole.class); + List roleList = sysRoleService.getSysRoleList(filter, orderBy); + List roleVoList = MyModelUtil.copyCollectionTo(roleList, SysRoleVo.class); + long totalCount = 0L; + if (roleList instanceof Page) { + totalCount = ((Page) roleList).getTotal(); + } + return ResponseResult.success(MyPageUtil.makeResponseData(roleVoList, totalCount)); + } + + /** + * 查看角色详情。 + * + * @param roleId 指定角色主键Id。 + * @return 应答结果对象,包含角色详情对象。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysRole sysRole = sysRoleService.getByIdWithRelation(roleId, MyRelationParam.full()); + if (sysRole == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysRoleVo sysRoleVo = MyModelUtil.copyTo(sysRole, SysRoleVo.class); + return ResponseResult.success(sysRoleVo); + } + + /** + * 获取不包含指定角色Id的用户列表。 + * 用户和角色是多对多关系,当前接口将返回没有赋值指定RoleId的用户列表。可用于给角色添加新用户。 + * + * @param roleId 角色主键Id。 + * @param sysUserDtoFilter 用户过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listNotInUserRole") + public ResponseResult> listNotInUserRole( + @MyRequestBody Long roleId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doRoleUserVerify(roleId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = sysUserService.getNotInSysUserListByRoleId(roleId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + /** + * 拥有指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param sysUserDtoFilter 用户过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含用户列表数据。 + */ + @PostMapping("/listUserRole") + public ResponseResult> listUserRole( + @MyRequestBody Long roleId, + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + ResponseResult verifyResult = this.doRoleUserVerify(roleId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List userList = sysUserService.getSysUserListByRoleId(roleId, filter, orderBy); + List userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class); + return ResponseResult.success(MyPageUtil.makeResponseData(userVoList)); + } + + private ResponseResult doRoleUserVerify(Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.existId(roleId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); + } + + /** + * 为指定角色添加用户列表。该操作可同时给一批用户赋值角色,并在同一事务内完成。 + * + * @param roleId 角色主键Id。 + * @param userIdListString 逗号分隔的用户Id列表。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.ADD_M2M) + @PostMapping("/addUserRole") + public ResponseResult addUserRole( + @MyRequestBody Long roleId, @MyRequestBody String userIdListString) { + if (MyCommonUtil.existBlankArgument(roleId, userIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + Set userIdSet = Arrays.stream( + userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysRoleService.existId(roleId) + || !sysUserService.existUniqueKeyList("userId", userIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + List userRoleList = new LinkedList<>(); + for (Long userId : userIdSet) { + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + userRole.setUserId(userId); + userRoleList.add(userRole); + } + sysRoleService.addUserRoleList(userRoleList); + return ResponseResult.success(); + } + + /** + * 为指定用户移除指定角色。 + * + * @param roleId 指定角色主键Id。 + * @param userId 指定用户主键Id。 + * @return 应答数据结果。 + */ + @OperationLog(type = SysOperationLogType.DELETE_M2M) + @PostMapping("/deleteUserRole") + public ResponseResult deleteUserRole( + @MyRequestBody Long roleId, @MyRequestBody Long userId) { + if (MyCommonUtil.existBlankArgument(roleId, userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.removeUserRole(roleId, userId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 以字典形式返回全部角色管理数据集合。字典的键值为[roleId, roleName]。 + * 白名单接口,登录用户均可访问。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 + */ + @GetMapping("/listDict") + public ResponseResult>> listDict(SysRole filter) { + List resultList = sysRoleService.getListByFilter(filter); + return ResponseResult.success(BeanQuery.select( + "roleId as id", "roleName as name").executeFrom(resultList)); + } + + /** + * 根据字典Id集合,获取查询后的字典数据。 + * + * @param dictIds 字典Id集合。 + * @return 应答结果对象,包含字典形式的数据集合。 + */ + @PostMapping("/listDictByIds") + public ResponseResult>> listDictByIds( + @MyRequestBody(elementType = Long.class) List dictIds) { + List resultList = sysRoleService.getInList(new HashSet<>(dictIds)); + return ResponseResult.success(BeanQuery.select( + "roleId as id", "roleName as name").executeFrom(resultList)); + } + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 应答对象,包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermWithDetail") + public ResponseResult>> listSysPermWithDetail(Long roleId, String url) { + if (MyCommonUtil.isBlankOrNull(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysRoleService.getSysPermListWithDetail(roleId, url)); + } + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 应答对象,包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermCodeWithDetail") + public ResponseResult>> listSysPermCodeWithDetail(Long roleId, String permCode) { + if (MyCommonUtil.isBlankOrNull(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysRoleService.getSysPermCodeListWithDetail(roleId, permCode)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysUserController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysUserController.java new file mode 100644 index 00000000..c2d285d3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/controller/SysUserController.java @@ -0,0 +1,439 @@ +package com.orangeforms.upmsservice.controller; + +import com.alibaba.fastjson.TypeReference; +import cn.hutool.core.collection.CollUtil; +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.upmsservice.service.*; +import com.orangeforms.upmsapi.dto.*; +import com.orangeforms.upmsapi.vo.*; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.*; +import com.orangeforms.common.core.base.controller.BaseController; +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.upmsservice.config.ApplicationConfig; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 用户管理操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Api(tags = "用户管理管理接口") +@Slf4j +@RestController +@RequestMapping("/sysUser") +public class SysUserController extends BaseController { + + @Autowired + private SysUserService sysUserService; + @Autowired + private ApplicationConfig appConfig; + + @Override + protected IBaseService service() { + return sysUserService; + } + + /** + * 新增用户操作。 + * + * @param sysUserDto 新增用户对象。 + * @param dataPermIdListString 逗号分隔的数据权限Id列表。 + * @param roleIdListString 逗号分隔的角色Id列表。 + * @return 应答结果对象,包含新增用户的主键Id。 + */ + @ApiOperationSupport(ignoreParameters = { + "sysUserDto.userId", + "sysUserDto.createTimeStart", + "sysUserDto.createTimeEnd"}) + @OperationLog(type = SysOperationLogType.ADD) + @PostMapping("/add") + public ResponseResult add( + @MyRequestBody SysUserDto sysUserDto, + @MyRequestBody String dataPermIdListString, + @MyRequestBody String roleIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class); + CallResult result = sysUserService.verifyRelatedData( + sysUser, null, roleIdListString, dataPermIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set roleIdSet = result.getData().getObject("roleIdSet", new TypeReference>() {}); + Set dataPermIdSet = result.getData().getObject("dataPermIdSet", new TypeReference>() {}); + sysUserService.saveNew(sysUser, roleIdSet, dataPermIdSet); + return ResponseResult.success(sysUser.getUserId()); + } + + /** + * 更新用户操作。 + * + * @param sysUserDto 更新用户对象。 + * @param dataPermIdListString 逗号分隔的数据权限Id列表。 + * @param roleIdListString 逗号分隔的角色Id列表。 + * @return 应答结果对象。 + */ + @ApiOperationSupport(ignoreParameters = { + "sysUserDto.createTimeStart", + "sysUserDto.createTimeEnd"}) + @OperationLog(type = SysOperationLogType.UPDATE) + @PostMapping("/update") + public ResponseResult update( + @MyRequestBody SysUserDto sysUserDto, + @MyRequestBody String dataPermIdListString, + @MyRequestBody String roleIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto, true); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + SysUser originalUser = sysUserService.getById(sysUserDto.getUserId()); + if (originalUser == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysUser sysUser = MyModelUtil.copyTo(sysUserDto, SysUser.class); + CallResult result = sysUserService.verifyRelatedData( + sysUser, originalUser, roleIdListString, dataPermIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage()); + } + Set roleIdSet = result.getData().getObject("roleIdSet", new TypeReference>() {}); + Set dataPermIdSet = result.getData().getObject("dataPermIdSet", new TypeReference>() {}); + if (!sysUserService.update(sysUser, originalUser, roleIdSet, dataPermIdSet)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除用户管理数据。 + * + * @param userId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @OperationLog(type = SysOperationLogType.DELETE) + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long userId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysUser originalSysUser = sysUserService.getById(userId); + if (originalSysUser == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysUserService.remove(userId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的用户管理列表。 + * + * @param sysUserDtoFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysUserDto sysUserDtoFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + SysUser sysUserFilter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class); + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List sysUserList = sysUserService.getSysUserListWithRelation(sysUserFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(sysUserList, SysUser.INSTANCE)); + } + + /** + * 查看指定用户管理对象详情。 + * + * @param userId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long userId) { + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 这里查看用户数据时候,需要把用户多对多关联的角色和数据权限Id一并查出。 + SysUser sysUser = sysUserService.getByIdWithRelation(userId, MyRelationParam.full()); + if (sysUser == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + SysUserVo sysUserVo = SysUser.INSTANCE.fromModel(sysUser); + return ResponseResult.success(sysUserVo); + } + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 应答对象,包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermWithDetail") + public ResponseResult>> listSysPermWithDetail(Long userId, String url) { + if (MyCommonUtil.isBlankOrNull(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysUserService.getSysPermListWithDetail(userId, url)); + } + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 应答对象,包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysPermCodeWithDetail") + public ResponseResult>> listSysPermCodeWithDetail(Long userId, String permCode) { + if (MyCommonUtil.isBlankOrNull(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysUserService.getSysPermCodeListWithDetail(userId, permCode)); + } + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 应答对象,包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + @GetMapping("/listSysMenuWithDetail") + public ResponseResult>> listSysMenuWithDetail(Long userId, String menuName) { + if (MyCommonUtil.isBlankOrNull(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + return ResponseResult.success(sysUserService.getSysMenuListWithDetail(userId, menuName)); + } + + /** + * 根据主键Id集合,获取数据对象集合。仅限于微服务间远程接口调用。 + * + * @param userIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象集合。 + */ + @ApiOperation(hidden = true, value = "listByIds") + @PostMapping("/listByIds") + public ResponseResult> listByIds( + @RequestParam Set userIds, @RequestParam Boolean withDict) { + return super.baseListByIds(userIds, withDict, SysUser.INSTANCE); + } + + /** + * 根据主键Id,获取数据对象。仅限于微服务间远程接口调用。 + * + * @param userId 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + @ApiOperation(hidden = true, value = "getById") + @PostMapping("/getById") + public ResponseResult getById( + @RequestParam Long userId, @RequestParam Boolean withDict) { + return super.baseGetById(userId, withDict, SysUser.INSTANCE); + } + + /** + * 判断参数列表中指定的主键Id集合,是否全部存在。仅限于微服务间远程接口调用。 + * + * @param userIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existIds") + @PostMapping("/existIds") + public ResponseResult existIds(@RequestParam Set userIds) { + return super.baseExistIds(userIds); + } + + /** + * 判断参数列表中指定的主键Id是否存在。仅限于微服务间远程接口调用。 + * + * @param userId 主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + @ApiOperation(hidden = true, value = "existId") + @PostMapping("/existId") + public ResponseResult existId(@RequestParam Long userId) { + return super.baseExistId(userId); + } + + /** + * 根据最新对象列表和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedData") + @PostMapping("/verifyRelatedData") + public ResponseResult verifyRelatedData(@RequestBody SysUserDto data) { + SysUser sysUser = MyModelUtil.copyTo(data, SysUser.class); + return super.baseVerifyRelatedData(sysUser, SysUser::getUserId); + } + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + @ApiOperation(hidden = true, value = "verifyRelatedDataList") + @PostMapping("/verifyRelatedDataList") + public ResponseResult verifyRelatedDataList(@RequestBody List dataList) { + List sysUserList = MyModelUtil.copyCollectionTo(dataList, SysUser.class); + return super.baseVerifyRelatedDataList(sysUserList, SysUser::getUserId); + } + + /** + * 根据主键Id删除数据。 + * + * @param userId 主键Id。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteById") + @PostMapping("/deleteById") + public ResponseResult deleteById(@RequestParam Long userId) throws Exception { + SysUser filter = new SysUser(); + filter.setUserId(userId); + return super.baseDeleteBy(filter); + } + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + @ApiOperation(hidden = true, value = "deleteBy") + @PostMapping("/deleteBy") + public ResponseResult deleteBy(@RequestBody SysUserDto filter) throws Exception { + return super.baseDeleteBy(MyModelUtil.copyTo(filter, SysUser.class)); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listBy") + @PostMapping("/listBy") + public ResponseResult> listBy(@RequestBody MyQueryParam queryParam) { + return super.baseListBy(queryParam, SysUser.INSTANCE); + } + + /** + * 复杂的查询调用,包括(in list)过滤,对象条件过滤,分页和排序等。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + @ApiOperation(hidden = true, value = "listMapBy") + @PostMapping("/listMapBy") + public ResponseResult>> listMapBy(@RequestBody MyQueryParam queryParam) { + return super.baseListMapBy(queryParam, SysUser.INSTANCE); + } + + /** + * 复杂的查询调用,仅返回单体记录。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含符合查询过滤条件的对象结果集。 + */ + @ApiOperation(hidden = true, value = "getBy") + @PostMapping("/getBy") + public ResponseResult getBy(@RequestBody MyQueryParam queryParam) { + return super.baseGetBy(queryParam, SysUser.INSTANCE); + } + + /** + * 获取远程主对象中符合查询条件的数据数量。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + @ApiOperation(hidden = true, value = "countBy") + @PostMapping("/countBy") + public ResponseResult countBy(@RequestBody MyQueryParam queryParam) { + return super.baseCountBy(queryParam); + } + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param aggregationParam 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + @ApiOperation(hidden = true, value = "aggregateBy") + @PostMapping("/aggregateBy") + public ResponseResult>> aggregateBy(@RequestBody MyAggregationParam aggregationParam) { + return super.baseAggregateBy(aggregationParam); + } + + /** + * 获取指定角色Id集合的用户数据集合。 + * @param roleIds 角色Id集合。 + * @return 应该结果对象,包含查询后的用户列表。 + */ + @ApiOperation(hidden = true, value = "getSysUserListByRoleIds") + @GetMapping("/getSysUserListByRoleIds") + public ResponseResult> getSysUserListByRoleIds(@RequestParam Set roleIds) { + List resultList = new LinkedList<>(); + for (Long roleId : roleIds) { + List userList = sysUserService.getSysUserListByRoleId(roleId, null, null); + if (CollUtil.isNotEmpty(userList)) { + resultList.addAll(SysUser.INSTANCE.fromModelList(userList)); + } + } + return ResponseResult.success(resultList); + } + + /** + * 获取指定部门Id集合的用户数据集合。 + * @param deptIds 部门Id集合。 + * @return 应该结果对象,包含查询后的用户列表。 + */ + @ApiOperation(hidden = true, value = "getSysUserListByDeptIds") + @GetMapping("/getSysUserListByDeptIds") + public ResponseResult> getSysUserListByDeptIds(@RequestParam Set deptIds) { + List resultList = new LinkedList<>(); + for (Long deptId : deptIds) { + SysUser filter = new SysUser(); + filter.setDeptId(deptId); + List userList = sysUserService.getSysUserList(filter, null); + if (CollUtil.isNotEmpty(userList)) { + resultList.addAll(SysUser.INSTANCE.fromModelList(userList)); + } + } + return ResponseResult.success(resultList); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermDeptMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermDeptMapper.java new file mode 100644 index 00000000..449d75cd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermDeptMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysDataPermDept; + +/** + * 数据权限与部门关系数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysDataPermDeptMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermMapper.java new file mode 100644 index 00000000..0007cdb1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermMapper.java @@ -0,0 +1,35 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysDataPerm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 数据权限数据访问操作接口。 + * NOTE: 该对象一定不能被 @EnableDataPerm 注解标注,否则会导致无限递归。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysDataPermMapper extends BaseDaoMapper { + + /** + * 获取数据权限列表。 + * + * @param sysDataPermFilter 过滤对象。 + * @param orderBy 排序字符串。 + * @return 过滤后的数据权限列表。 + */ + List getSysDataPermList( + @Param("sysDataPermFilter") SysDataPerm sysDataPermFilter, @Param("orderBy") String orderBy); + + /** + * 获取指定用户的数据权限列表。 + * + * @param userId 用户Id。 + * @return 数据权限列表。 + */ + List getSysDataPermListByUserId(@Param("userId") Long userId); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermUserMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermUserMapper.java new file mode 100644 index 00000000..b178bd4a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDataPermUserMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysDataPermUser; + +/** + * 数据权限与用户关系数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysDataPermUserMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDeptMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDeptMapper.java new file mode 100644 index 00000000..58813d74 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDeptMapper.java @@ -0,0 +1,51 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysDept; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 部门管理数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysDeptMapper extends BaseDaoMapper { + + /** + * 批量插入对象列表。 + * + * @param sysDeptList 新增对象列表。 + */ + void insertList(List sysDeptList); + + /** + * 获取过滤后的对象列表。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param sysDeptFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysDeptList( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("sysDeptFilter") SysDept sysDeptFilter, + @Param("orderBy") String orderBy); + + /** + * 获取对象列表,过滤条件中包含like和between条件,以及指定属性的(in list)过滤条件。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param sysDeptFilter 过滤对象。 + * @return 对象列表。 + */ + Integer getSysDeptCount( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("sysDeptFilter") SysDept sysDeptFilter); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDeptRelationMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDeptRelationMapper.java new file mode 100644 index 00000000..4dc83aad --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysDeptRelationMapper.java @@ -0,0 +1,43 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysDeptRelation; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 部门关系树关联关系表访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysDeptRelationMapper extends BaseDaoMapper { + + /** + * 将myDeptId的所有子部门,与其父部门parentDeptId解除关联关系。 + * + * @param parentDeptId myDeptId的父部门Id。 + * @param myDeptId 当前部门。 + */ + void removeBetweenChildrenAndParents( + @Param("parentDeptId") Long parentDeptId, @Param("myDeptId") Long myDeptId); + + /** + * 批量插入部门关联数据。 + * 由于目前版本(3.4.1)的Mybatis Plus没有提供真正的批量插入,为了保证效率需要自己实现。 + * 目前我们仅仅给出MySQL的insert list实现作为参考,其他数据库需要自行修改。 + * + * @param deptRelationList 部门关联关系数据列表。 + */ + void insertList(List deptRelationList); + + /** + * 批量插入当前部门的所有父部门列表,包括自己和自己的关系。 + * + * @param parentDeptId myDeptId的父部门Id。 + * @param myDeptId 当前部门。 + */ + void insertParentList(@Param("parentDeptId") Long parentDeptId, @Param("myDeptId") Long myDeptId); + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysMenuMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysMenuMapper.java new file mode 100644 index 00000000..e5e7531d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysMenuMapper.java @@ -0,0 +1,54 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 菜单数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysMenuMapper extends BaseDaoMapper { + + /** + * 获取登录用户的菜单列表。 + * + * @param userId 登录用户。 + * @return 菜单列表。 + */ + List getMenuListByUserId(@Param("userId") Long userId); + + /** + * 获取当前用户有权访问的在线表单菜单,仅返回类型为BUTTON的菜单。 + * + * @param userId 指定的用户。 + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + List getOnlineMenuListByUserId( + @Param("userId") Long userId, @Param("menuType") Integer menuType); + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail( + @Param("menuId") Long menuId, @Param("url") String url); + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail( + @Param("menuId") Long menuId, @Param("loginName") String loginName); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysMenuPermCodeMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysMenuPermCodeMapper.java new file mode 100644 index 00000000..b5afba6c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysMenuPermCodeMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysMenuPermCode; + +/** + * 菜单与权限字关系数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysMenuPermCodeMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermCodeMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermCodeMapper.java new file mode 100644 index 00000000..e5d779a7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermCodeMapper.java @@ -0,0 +1,45 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysPermCode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 权限字数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermCodeMapper extends BaseDaoMapper { + + /** + * 获取用户的所有权限字列表。 + * + * @param userId 用户Id。 + * @return 该用户的权限字列表。 + */ + List getPermCodeListByUserId(@Param("userId") Long userId); + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail( + @Param("permCodeId") Long permCodeId, @Param("loginName") String loginName); + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail( + @Param("permCodeId") Long permCodeId, @Param("roleName") String roleName); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermCodePermMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermCodePermMapper.java new file mode 100644 index 00000000..bf0a8997 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermCodePermMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysPermCodePerm; + +/** + * 权限字与权限资源关系数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermCodePermMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermMapper.java new file mode 100644 index 00000000..467a40c2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermMapper.java @@ -0,0 +1,55 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysPerm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 权限资源数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermMapper extends BaseDaoMapper { + + /** + * 获取用户的权限列表。 + * + * @param userId 用户Id。 + * @return 该用户的权限标识列表。 + */ + List getPermListByUserId(@Param("userId") Long userId); + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail( + @Param("permId") Long permId, @Param("loginName") String loginName); + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail( + @Param("permId") Long permId, @Param("roleName") String roleName); + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail( + @Param("permId") Long permId, @Param("menuName") String menuName); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermModuleMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermModuleMapper.java new file mode 100644 index 00000000..121f79f7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermModuleMapper.java @@ -0,0 +1,22 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysPermModule; + +import java.util.List; + +/** + * 权限资源模块数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermModuleMapper extends BaseDaoMapper { + + /** + * 获取整个权限模块和权限关联后的全部数据。 + * + * @return 关联的权限模块和权限资源列表。 + */ + List getPermModuleAndPermList(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermWhitelistMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermWhitelistMapper.java new file mode 100644 index 00000000..3cff5601 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysPermWhitelistMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysPermWhitelist; + +/** + * 权限资源白名单数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermWhitelistMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysRoleMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysRoleMapper.java new file mode 100644 index 00000000..cdb28704 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysRoleMapper.java @@ -0,0 +1,45 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysRole; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 角色数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysRoleMapper extends BaseDaoMapper { + + /** + * 获取对象列表,过滤条件中包含like和between条件。 + * + * @param sysRoleFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysRoleList(@Param("sysRoleFilter") SysRole sysRoleFilter, @Param("orderBy") String orderBy); + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail( + @Param("roleId") Long roleId, @Param("url") String url); + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail( + @Param("roleId") Long roleId, @Param("permCode") String permCode); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysRoleMenuMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysRoleMenuMapper.java new file mode 100644 index 00000000..57da3280 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysRoleMenuMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysRoleMenu; + +/** + * 角色与菜单操作关联关系数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysRoleMenuMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysUserMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysUserMapper.java new file mode 100644 index 00000000..e64d73c1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysUserMapper.java @@ -0,0 +1,133 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysUser; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 用户管理数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUserMapper extends BaseDaoMapper { + + /** + * 批量插入对象列表。 + * + * @param sysUserList 新增对象列表。 + */ + void insertList(List sysUserList); + + /** + * 获取过滤后的对象列表。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param sysUserFilter 过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysUserList( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 获取对象列表,过滤条件中包含like和between条件,以及指定属性的(in list)过滤条件。 + * + * @param inFilterColumn 参与(In-list)过滤的数据表列。 + * @param inFilterValues 参与(In-list)过滤的数据表列值集合。 + * @param sysUserFilter 过滤对象。 + * @return 对象列表。 + */ + Integer getSysUserCount( + @Param("inFilterColumn") String inFilterColumn, + @Param("inFilterValues") Set inFilterValues, + @Param("sysUserFilter") SysUser sysUserFilter); + + /** + * 根据角色Id,获取关联的用户Id列表。 + * + * @param roleId 关联的角色Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和RoleId关联的用户列表。 + */ + List getSysUserListByRoleId( + @Param("roleId") Long roleId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 根据角色Id,获取和当前角色Id没有建立多对多关联关系的用户Id列表。 + * + * @param roleId 关联的角色Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和RoleId没有建立关联关系的用户列表。 + */ + List getNotInSysUserListByRoleId( + @Param("roleId") Long roleId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 根据数据权限Id,获取关联的用户Id列表。 + * + * @param dataPermId 关联的数据权限Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和DataPermId关联的用户列表。 + */ + List getSysUserListByDataPermId( + @Param("dataPermId") Long dataPermId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 根据数据权限Id,获取和当前数据权限Id没有建立多对多关联关系的用户Id列表。 + * + * @param dataPermId 关联的数据权限Id。 + * @param sysUserFilter 用户过滤条件对象。 + * @param orderBy order by从句的参数。 + * @return 和DataPermId没有建立关联关系的用户列表。 + */ + List getNotInSysUserListByDataPermId( + @Param("dataPermId") Long dataPermId, + @Param("sysUserFilter") SysUser sysUserFilter, + @Param("orderBy") String orderBy); + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail( + @Param("userId") Long userId, @Param("url") String url); + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail( + @Param("userId") Long userId, @Param("permCode") String permCode); + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail( + @Param("userId") Long userId, @Param("menuName") String menuName); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysUserRoleMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysUserRoleMapper.java new file mode 100644 index 00000000..51d21bb3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/SysUserRoleMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.upmsservice.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.model.SysUserRole; + +/** + * 用户与角色关联关系数据访问操作接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUserRoleMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermDeptMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermDeptMapper.xml new file mode 100644 index 00000000..7477fb49 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermDeptMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermMapper.xml new file mode 100644 index 00000000..9f007f71 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + AND zz_sys_data_perm.rule_type = #{sysDataPermFilter.ruleType} + + + + AND IFNULL(zz_sys_data_perm.data_perm_name, '') LIKE #{safeSearchString} + + + AND zz_sys_data_perm.deleted_flag = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermUserMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermUserMapper.xml new file mode 100644 index 00000000..fa19d626 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDataPermUserMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDeptMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDeptMapper.xml new file mode 100644 index 00000000..0a16958e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDeptMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + INSERT INTO zz_sys_dept + (dept_id, + dept_name, + show_order, + parent_id, + deleted_flag, + create_user_id, + update_user_id, + create_time, + update_time) + VALUES + + (#{item.deptId}, + #{item.deptName}, + #{item.showOrder}, + #{item.parentId}, + #{item.deletedFlag}, + #{item.createUserId}, + #{item.updateUserId}, + #{item.createTime}, + #{item.updateTime}) + + + + + + + + AND zz_sys_dept.deleted_flag = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + AND zz_sys_dept.dept_name LIKE #{safeSysDeptDeptName} + + + AND zz_sys_dept.parent_id = #{sysDeptFilter.parentId} + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDeptRelationMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDeptRelationMapper.xml new file mode 100644 index 00000000..d6d5d4d4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysDeptRelationMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + DELETE a FROM zz_sys_dept_relation a + INNER JOIN zz_sys_dept_relation b ON a.dept_id = b.dept_id + WHERE a.parent_dept_id = #{parentDeptId} AND b.parent_dept_id = #{myDeptId} + + + + INSERT INTO zz_sys_dept_relation(parent_dept_id, dept_id) VALUES + + (#{item.parentDeptId}, #{item.deptId}) + + + + + INSERT INTO zz_sys_dept_relation(parent_dept_id, dept_id) + SELECT t.parent_dept_id, #{myDeptId} FROM zz_sys_dept_relation t + WHERE t.dept_id = #{parentDeptId} + UNION ALL + SELECT #{myDeptId}, #{myDeptId} + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysMenuMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysMenuMapper.xml new file mode 100644 index 00000000..74655ae2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysMenuMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysMenuPermCodeMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysMenuPermCodeMapper.xml new file mode 100644 index 00000000..b78c80d1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysMenuPermCodeMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermCodeMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermCodeMapper.xml new file mode 100644 index 00000000..8a4a0a39 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermCodeMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermCodePermMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermCodePermMapper.xml new file mode 100644 index 00000000..733c1a54 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermCodePermMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermMapper.xml new file mode 100644 index 00000000..1dbaa002 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermMapper.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermModuleMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermModuleMapper.xml new file mode 100644 index 00000000..07401f28 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermModuleMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermWhitelistMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermWhitelistMapper.xml new file mode 100644 index 00000000..c9f98f37 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysPermWhitelistMapper.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysRoleMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysRoleMapper.xml new file mode 100644 index 00000000..fb8fe83e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysRoleMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + AND role_name LIKE #{safeRoleName} + + + AND deleted_flag = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysRoleMenuMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysRoleMenuMapper.xml new file mode 100644 index 00000000..35820eaa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysRoleMenuMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysUserMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysUserMapper.xml new file mode 100644 index 00000000..eb0432a2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysUserMapper.xml @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + INSERT INTO zz_sys_user + (user_id, + login_name, + password, + show_name, + dept_id, + user_type, + head_image_url, + user_status, + deleted_flag, + create_user_id, + update_user_id, + create_time, + update_time) + VALUES + + (#{item.userId}, + #{item.loginName}, + #{item.password}, + #{item.showName}, + #{item.deptId}, + #{item.userType}, + #{item.headImageUrl}, + #{item.userStatus}, + #{item.deletedFlag}, + #{item.createUserId}, + #{item.updateUserId}, + #{item.createTime}, + #{item.updateTime}) + + + + + + + + AND zz_sys_user.deleted_flag = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + + + + + AND zz_sys_user.login_name LIKE #{safeSysUserLoginName} + + + + AND zz_sys_user.show_name LIKE #{safeSysUserShowName} + + + AND zz_sys_user.dept_id = #{sysUserFilter.deptId} + + + AND zz_sys_user.user_status = #{sysUserFilter.userStatus} + + + AND zz_sys_user.create_time >= #{sysUserFilter.createTimeStart} + + + AND zz_sys_user.create_time <= #{sysUserFilter.createTimeEnd} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysUserRoleMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysUserRoleMapper.xml new file mode 100644 index 00000000..42c9cbcc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/dao/mapper/SysUserRoleMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPerm.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPerm.java new file mode 100644 index 00000000..04170283 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPerm.java @@ -0,0 +1,92 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.annotation.RelationManyToMany; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.upmsapi.vo.SysDataPermVo; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 数据权限实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_data_perm") +public class SysDataPerm extends BaseModel { + + /** + * 主键Id。 + */ + @TableId(value = "data_perm_id") + private Long dataPermId; + + /** + * 显示名称。 + */ + @TableField(value = "data_perm_name") + private String dataPermName; + + /** + * 数据权限规则类型(0: 全部可见 1: 只看自己 2: 只看本部门 3: 本部门及子部门 4: 多部门及子部门 5: 自定义部门列表)。 + */ + @TableField(value = "rule_type") + private Integer ruleType; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @TableField(exist = false) + private String deptIdListString; + + @RelationManyToMany( + relationMapperName = "sysDataPermDeptMapper", + relationMasterIdField = "dataPermId", + relationModelClass = SysDataPermDept.class) + @TableField(exist = false) + private List dataPermDeptList; + + @TableField(exist = false) + private String searchString; + + public void setSearchString(String searchString) { + this.searchString = MyCommonUtil.replaceSqlWildcard(searchString); + } + + @Mapper + public interface SysDataPermModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysDataPermVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "dataPermDeptList", expression = "java(mapToBean(sysDataPermVo.getDataPermDeptList(), com.orangeforms.upmsservice.model.SysDataPermDept.class))") + @Override + SysDataPerm toModel(SysDataPermVo sysDataPermVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysDataPerm 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "dataPermDeptList", expression = "java(beanToMap(sysDataPerm.getDataPermDeptList(), false))") + @Override + SysDataPermVo fromModel(SysDataPerm sysDataPerm); + } + public static final SysDataPermModelMapper INSTANCE = Mappers.getMapper(SysDataPerm.SysDataPermModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPermDept.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPermDept.java new file mode 100644 index 00000000..807e072b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPermDept.java @@ -0,0 +1,29 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.ToString; + +/** + * 数据权限与部门关联实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@ToString(of = {"deptId"}) +@TableName(value = "zz_sys_data_perm_dept") +public class SysDataPermDept { + + /** + * 数据权限Id。 + */ + @TableField(value = "data_perm_id") + private Long dataPermId; + + /** + * 关联部门Id。 + */ + @TableField(value = "dept_id") + private Long deptId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPermUser.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPermUser.java new file mode 100644 index 00000000..154e03aa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDataPermUser.java @@ -0,0 +1,27 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 数据权限与用户关联实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_sys_data_perm_user") +public class SysDataPermUser { + + /** + * 数据权限Id。 + */ + @TableField(value = "data_perm_id") + private Long dataPermId; + + /** + * 用户Id。 + */ + @TableField(value = "user_id") + private Long userId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDept.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDept.java new file mode 100644 index 00000000..2af54008 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDept.java @@ -0,0 +1,58 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.upmsapi.vo.SysDeptVo; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +/** + * SysDept实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_dept") +public class SysDept extends BaseModel { + + /** + * 部门Id。 + */ + @TableId(value = "dept_id") + private Long deptId; + + /** + * 部门名称。 + */ + @TableField(value = "dept_name") + private String deptName; + + /** + * 显示顺序。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 父部门Id。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @Mapper + public interface SysDeptModelMapper extends BaseModelMapper { + } + public static final SysDeptModelMapper INSTANCE = Mappers.getMapper(SysDeptModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDeptRelation.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDeptRelation.java new file mode 100644 index 00000000..8cd9115c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysDeptRelation.java @@ -0,0 +1,31 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 部门关联实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "zz_sys_dept_relation") +public class SysDeptRelation { + + /** + * 上级部门Id。 + */ + @TableField(value = "parent_dept_id") + private Long parentDeptId; + + /** + * 部门Id。 + */ + @TableField(value = "dept_id") + private Long deptId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysMenu.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysMenu.java new file mode 100644 index 00000000..676bafba --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysMenu.java @@ -0,0 +1,116 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.annotation.RelationManyToMany; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import com.orangeforms.upmsapi.vo.SysMenuVo; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 菜单实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_menu") +public class SysMenu extends BaseModel { + + /** + * 主键Id。 + */ + @TableId(value = "menu_id") + private Long menuId; + + /** + * 父菜单Id,目录菜单的父菜单为null。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 菜单显示名称。 + */ + @TableField(value = "menu_name") + private String menuName; + + /** + * 菜单类型(0: 目录 1: 菜单 2: 按钮 3: UI片段)。 + */ + @TableField(value = "menu_type") + private Integer menuType; + + /** + * 前端表单路由名称,仅用于menu_type为1的菜单类型。 + */ + @TableField(value = "form_router_name") + private String formRouterName; + + /** + * 在线表单主键Id,仅用于在线表单绑定的菜单。 + */ + @TableField(value = "online_form_id") + private Long onlineFormId; + + /** + * 在线表单菜单的权限控制类型,具体值可参考SysOnlineMenuPermType常量对象。 + */ + @TableField(value = "online_menu_perm_type") + private Integer onlineMenuPermType; + + /** + * 菜单显示顺序 (值越小,排序越靠前)。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 菜单图标。 + */ + private String icon; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationManyToMany( + relationMapperName = "sysMenuPermCodeMapper", + relationMasterIdField = "menuId", + relationModelClass = SysMenuPermCode.class) + @TableField(exist = false) + private List sysMenuPermCodeList; + + @Mapper + public interface SysMenuModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysMenuVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysMenuPermCodeList", expression = "java(mapToBean(sysMenuVo.getSysMenuPermCodeList(), com.orangeforms.upmsservice.model.SysMenuPermCode.class))") + @Override + SysMenu toModel(SysMenuVo sysMenuVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysMenu 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysMenuPermCodeList", expression = "java(beanToMap(sysMenu.getSysMenuPermCodeList(), false))") + @Override + SysMenuVo fromModel(SysMenu sysMenu); + } + public static final SysMenuModelMapper INSTANCE = Mappers.getMapper(SysMenu.SysMenuModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysMenuPermCode.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysMenuPermCode.java new file mode 100644 index 00000000..44fc8f13 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysMenuPermCode.java @@ -0,0 +1,27 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 菜单与权限字关联实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_sys_menu_perm_code") +public class SysMenuPermCode { + + /** + * 关联菜单Id。 + */ + @TableField(value = "menu_id") + private Long menuId; + + /** + * 关联权限字Id。 + */ + @TableField(value = "perm_code_id") + private Long permCodeId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPerm.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPerm.java new file mode 100644 index 00000000..fd2e9a39 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPerm.java @@ -0,0 +1,66 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.annotation.RelationDict; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.*; + +/** + * 权限资源实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_perm") +public class SysPerm extends BaseModel { + + /** + * 权限Id。 + */ + @TableId(value = "perm_id") + private Long permId; + + /** + * 权限所在的权限模块Id。 + */ + @TableField(value = "module_id") + private Long moduleId; + + /** + * 权限名称。 + */ + @TableField(value = "perm_name") + private String permName; + + /** + * 关联的URL。 + */ + private String url; + + /** + * 权限在当前模块下的顺序,由小到大。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationDict( + masterIdField = "moduleId", + slaveServiceName = "SysPermModuleService", + slaveModelClass = SysPermModule.class, + slaveIdField = "moduleId", + slaveNameField = "moduleName") + @TableField(exist = false) + private Map moduleIdDictMap; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermCode.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermCode.java new file mode 100644 index 00000000..1dda00c8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermCode.java @@ -0,0 +1,99 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.annotation.RelationManyToMany; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import com.orangeforms.upmsapi.vo.SysPermCodeVo; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 权限字实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_perm_code") +public class SysPermCode extends BaseModel { + + /** + * 主键Id。 + */ + @TableId(value = "perm_code_id") + private Long permCodeId; + + /** + * 上级权限字Id。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 权限字标识(一般为有含义的英文字符串)。 + */ + @TableField(value = "perm_code") + private String permCode; + + /** + * 权限类型(0: 表单 1: UI片段 2: 操作)。 + */ + @TableField(value = "perm_code_type") + private Integer permCodeType; + + /** + * 显示名称。 + */ + @TableField(value = "show_name") + private String showName; + + /** + * 显示顺序(数值越小,越靠前)。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationManyToMany( + relationMapperName = "sysPermCodePermMapper", + relationMasterIdField = "permCodeId", + relationModelClass = SysPermCodePerm.class) + @TableField(exist = false) + private List sysPermCodePermList; + + @Mapper + public interface SysPermCodeModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysPermCodeVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysPermCodePermList", expression = "java(mapToBean(sysPermCodeVo.getSysPermCodePermList(), com.orangeforms.upmsservice.model.SysPermCodePerm.class))") + @Override + SysPermCode toModel(SysPermCodeVo sysPermCodeVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysPermCode 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysPermCodePermList", expression = "java(beanToMap(sysPermCode.getSysPermCodePermList(), false))") + @Override + SysPermCodeVo fromModel(SysPermCode sysPermCode); + } + public static final SysPermCodeModelMapper INSTANCE = Mappers.getMapper(SysPermCode.SysPermCodeModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermCodePerm.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermCodePerm.java new file mode 100644 index 00000000..f6570204 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermCodePerm.java @@ -0,0 +1,27 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 权限字与权限资源关联实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_sys_perm_code_perm") +public class SysPermCodePerm { + + /** + * 权限字Id。 + */ + @TableField(value = "perm_code_id") + private Long permCodeId; + + /** + * 权限Id。 + */ + @TableField(value = "perm_id") + private Long permId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermModule.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermModule.java new file mode 100644 index 00000000..b8a9274f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermModule.java @@ -0,0 +1,60 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.*; + +/** + * 权限模块实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_perm_module") +public class SysPermModule extends BaseModel { + + /** + * 权限模块Id。 + */ + @TableId(value = "module_id") + private Long moduleId; + + /** + * 上级权限模块Id。 + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 权限模块名称。 + */ + @TableField(value = "module_name") + private String moduleName; + + /** + * 权限模块类型(0: 普通模块 1: Controller模块)。 + */ + @TableField(value = "module_type") + private Integer moduleType; + + /** + * 权限模块在当前层级下的顺序,由小到大。 + */ + @TableField(value = "show_order") + private Integer showOrder; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @TableField(exist = false) + private List sysPermList; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermWhitelist.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermWhitelist.java new file mode 100644 index 00000000..9e7f6681 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysPermWhitelist.java @@ -0,0 +1,33 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 白名单实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_sys_perm_whitelist") +public class SysPermWhitelist { + + /** + * 权限资源的URL。 + */ + @TableId(value = "perm_url") + private String permUrl; + + /** + * 权限资源所属模块名字(通常是Controller的名字)。 + */ + @TableField(value = "module_name") + private String moduleName; + + /** + * 权限的名称。 + */ + @TableField(value = "perm_name") + private String permName; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysRole.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysRole.java new file mode 100644 index 00000000..0461adb1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysRole.java @@ -0,0 +1,75 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.annotation.RelationManyToMany; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import com.orangeforms.upmsapi.vo.SysRoleVo; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.*; + +/** + * 角色实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_role") +public class SysRole extends BaseModel { + + /** + * 主键Id。 + */ + @TableId(value = "role_id") + private Long roleId; + + /** + * 角色名称。 + */ + @TableField(value = "role_name") + private String roleName; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + @RelationManyToMany( + relationMapperName = "sysRoleMenuMapper", + relationMasterIdField = "roleId", + relationModelClass = SysRoleMenu.class) + @TableField(exist = false) + private List sysRoleMenuList; + + @Mapper + public interface SysRoleModelMapper extends BaseModelMapper { + /** + * 转换VO对象到实体对象。 + * + * @param sysRoleVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysRoleMenuList", expression = "java(mapToBean(sysRoleVo.getSysRoleMenuList(), com.orangeforms.upmsservice.model.SysRoleMenu.class))") + @Override + SysRole toModel(SysRoleVo sysRoleVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysRole 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysRoleMenuList", expression = "java(beanToMap(sysRole.getSysRoleMenuList(), false))") + @Override + SysRoleVo fromModel(SysRole sysRole); + } + public static final SysRoleModelMapper INSTANCE = Mappers.getMapper(SysRole.SysRoleModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysRoleMenu.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysRoleMenu.java new file mode 100644 index 00000000..cefe78e5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysRoleMenu.java @@ -0,0 +1,27 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 角色菜单实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_sys_role_menu") +public class SysRoleMenu { + + /** + * 角色Id。 + */ + @TableField(value = "role_id") + private Long roleId; + + /** + * 菜单Id。 + */ + @TableField(value = "menu_id") + private Long menuId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysUser.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysUser.java new file mode 100644 index 00000000..824fb162 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysUser.java @@ -0,0 +1,155 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.upmsapi.vo.SysUserVo; +import com.orangeforms.upmsapi.constant.SysUserType; +import com.orangeforms.upmsapi.constant.SysUserStatus; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.mapstruct.*; +import org.mapstruct.factory.Mappers; + +import java.util.Map; +import java.util.List; + +/** + * SysUser实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_user") +public class SysUser extends BaseModel { + + /** + * 用户Id。 + */ + @TableId(value = "user_id") + private Long userId; + + /** + * 登录用户名。 + */ + @TableField(value = "login_name") + private String loginName; + + /** + * 用户显示名称。 + */ + @TableField(value = "show_name") + private String showName; + + /** + * 用户部门Id。 + */ + @TableField(value = "dept_id") + private Long deptId; + + /** + * 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。 + */ + @TableField(value = "user_type") + private Integer userType; + + /** + * 用户头像的Url。 + */ + @TableField(value = "head_image_url") + private String headImageUrl; + + /** + * 用户状态(0: 正常 1: 锁定)。 + */ + @TableField(value = "user_status") + private Integer userStatus; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * createTime 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String createTimeStart; + + /** + * createTime 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String createTimeEnd; + + /** + * 多对多用户角色数据集合。 + */ + @RelationManyToMany( + relationMapperName = "sysUserRoleMapper", + relationMasterIdField = "userId", + relationModelClass = SysUserRole.class) + @TableField(exist = false) + private List sysUserRoleList; + + /** + * 多对多用户数据权限数据集合。 + */ + @RelationManyToMany( + relationMapperName = "sysDataPermUserMapper", + relationMasterIdField = "userId", + relationModelClass = SysDataPermUser.class) + @TableField(exist = false) + private List sysDataPermUserList; + + @RelationDict( + masterIdField = "deptId", + slaveServiceName = "sysDeptService", + slaveModelClass = SysDept.class, + slaveIdField = "deptId", + slaveNameField = "deptName") + @TableField(exist = false) + private Map deptIdDictMap; + + @RelationConstDict( + masterIdField = "userType", + constantDictClass = SysUserType.class) + @TableField(exist = false) + private Map userTypeDictMap; + + @RelationConstDict( + masterIdField = "userStatus", + constantDictClass = SysUserStatus.class) + @TableField(exist = false) + private Map userStatusDictMap; + + @Mapper + public interface SysUserModelMapper extends BaseModelMapper { + /** + * 转换Vo对象到实体对象。 + * + * @param sysUserVo 域对象。 + * @return 实体对象。 + */ + @Mapping(target = "sysUserRoleList", expression = "java(mapToBean(sysUserVo.getSysUserRoleList(), com.orangeforms.upmsservice.model.SysUserRole.class))") + @Mapping(target = "sysDataPermUserList", expression = "java(mapToBean(sysUserVo.getSysDataPermUserList(), com.orangeforms.upmsservice.model.SysDataPermUser.class))") + @Override + SysUser toModel(SysUserVo sysUserVo); + /** + * 转换实体对象到VO对象。 + * + * @param sysUser 实体对象。 + * @return 域对象。 + */ + @Mapping(target = "sysUserRoleList", expression = "java(beanToMap(sysUser.getSysUserRoleList(), false))") + @Mapping(target = "sysDataPermUserList", expression = "java(beanToMap(sysUser.getSysDataPermUserList(), false))") + @Override + SysUserVo fromModel(SysUser sysUser); + } + public static final SysUserModelMapper INSTANCE = Mappers.getMapper(SysUserModelMapper.class); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysUserRole.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysUserRole.java new file mode 100644 index 00000000..c90a7318 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/model/SysUserRole.java @@ -0,0 +1,27 @@ +package com.orangeforms.upmsservice.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +/** + * 用户角色实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName(value = "zz_sys_user_role") +public class SysUserRole { + + /** + * 用户Id。 + */ + @TableField(value = "user_id") + private Long userId; + + /** + * 角色Id。 + */ + @TableField(value = "role_id") + private Long roleId; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysDataPermService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysDataPermService.java new file mode 100644 index 00000000..4bb6660d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysDataPermService.java @@ -0,0 +1,104 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.model.*; + +import java.util.*; + +/** + * 数据权限数据服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysDataPermService extends IBaseService { + + /** + * 保存新增的数据权限对象。 + * + * @param dataPerm 新增的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 新增后的数据权限对象。 + */ + SysDataPerm saveNew(SysDataPerm dataPerm, Set deptIdSet); + + /** + * 更新数据权限对象。 + * + * @param dataPerm 更新的数据权限对象。 + * @param originalDataPerm 原有的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysDataPerm dataPerm, SysDataPerm originalDataPerm, Set deptIdSet); + + /** + * 删除指定数据权限。 + * + * @param dataPermId 数据权限主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long dataPermId); + + /** + * 获取数据权限列表。 + * + * @param filter 数据权限过滤对象。 + * @param orderBy 排序参数。 + * @return 数据权限查询列表。 + */ + List getSysDataPermList(SysDataPerm filter, String orderBy); + + /** + * 将指定会话的数据权限集合从缓存中移除。 + * + * @param sessionId 会话Id。 + */ + void removeDataPermCache(String sessionId); + + /** + * 将指定用户的指定会话的数据权限集合存入缓存。 + * + * @param sessionId 会话Id。 + * @param userId 用户主键Id。 + * @param deptId 用户所属部门主键Id。 + * @return 查询并缓存后的数据权限集合。返回格式为,Map。 + */ + Map putDataPermCache(String sessionId, Long userId, Long deptId); + + /** + * 获取指定用户Id的数据权限列表。并基于权限规则类型进行了一级分组。 + * + * @param userId 指定的用户Id。 + * @param deptId 用户所属部门主键Id。 + * @return 合并优化后的数据权限列表。返回格式为,Map。 + */ + Map getSysDataPermListByUserId(Long userId, Long deptId); + + /** + * 添加用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限Id。 + * @param userIdSet 关联的用户Id列表。 + */ + void addDataPermUserList(Long dataPermId, Set userIdSet); + + /** + * 移除用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限主键Id。 + * @param userId 用户主键Id。 + * @return true移除成功,否则false。 + */ + boolean removeDataPermUser(Long dataPermId, Long userId); + + /** + * 验证数据权限对象关联菜单数据是否都合法。 + * + * @param dataPerm 与数据权限关联的菜单数据列表。 + * @param deptIdListString 与数据权限关联的部门Id列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysDeptService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysDeptService.java new file mode 100644 index 00000000..214de2ee --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysDeptService.java @@ -0,0 +1,104 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 部门管理数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysDeptService extends IBaseService { + + /** + * 保存新增的部门对象。 + * + * @param sysDept 新增的部门对象。 + * @param parentSysDept 上级部门对象。 + * @return 新增后的部门对象。 + */ + SysDept saveNew(SysDept sysDept, SysDept parentSysDept); + + /** + * 更新部门对象。 + * + * @param sysDept 更新的部门对象。 + * @param originalSysDept 原有的部门对象。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysDept sysDept, SysDept originalSysDept); + + /** + * 删除指定数据。 + * + * @param deptId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long deptId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysDeptList(SysDept filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysDeptList(String inFilterField, Set inFilterValues, SysDept filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysDeptList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getSysDeptListWithRelation(SysDept filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysDeptList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getSysDeptListWithRelation( + String inFilterField, Set inFilterValues, SysDept filter, String orderBy); + + /** + * 判断指定对象是否包含下级对象。 + * + * @param deptId 主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long deptId); + + /** + * 判断指定部门Id是否包含用户对象。 + * + * @param deptId 部门主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildrenUser(Long deptId); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysMenuService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysMenuService.java new file mode 100644 index 00000000..13575c10 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysMenuService.java @@ -0,0 +1,111 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.model.SysMenu; + +import java.util.*; + +/** + * 菜单数据服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysMenuService extends IBaseService { + + /** + * 保存新增的菜单对象。 + * + * @param sysMenu 新增的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 新增后的菜单对象。 + */ + SysMenu saveNew(SysMenu sysMenu, Set permCodeIdSet); + + /** + * 更新菜单对象。 + * + * @param sysMenu 更新的菜单对象。 + * @param originalSysMenu 原有的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set permCodeIdSet); + + /** + * 删除指定的菜单。 + * + * @param menu 菜单对象。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(SysMenu menu); + + /** + * 获取全部菜单列表。 + * + * @return 全部菜单列表。 + */ + Collection getAllMenuList(); + + /** + * 获取指定用户Id的菜单列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的菜单列表。 + */ + Collection getMenuListByUserId(Long userId); + + /** + * 判断当前菜单是否存在子菜单。 + * + * @param menuId 菜单主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long menuId); + + /** + * 验证菜单对象关联的数据是否都合法。 + * + * @param sysMenu 当前操作的对象。 + * @param originalSysMenu 原有对象。 + * @param permCodeIdListString 逗号分隔的权限Id列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString); + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail(Long menuId, String url); + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail(Long menuId, String loginName); + + /** + * 获取指定类型的所有在线表单的菜单。 + * + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + List getAllOnlineMenuList(Integer menuType); + + /** + * 获取当前用户有权访问的在线表单菜单,仅返回类型为BUTTON的菜单。 + * + * @param userId 指定的用户。 + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + List getOnlineMenuListByUserId(Long userId, Integer menuType); +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermCodeService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermCodeService.java new file mode 100644 index 00000000..29156a53 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermCodeService.java @@ -0,0 +1,94 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.model.SysPermCode; + +import java.util.*; + +/** + * 权限字数据服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermCodeService extends IBaseService { + + /** + * 获取指定用户的权限字列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的权限字列表。 + */ + Collection getPermCodeListByUserId(Long userId); + + /** + * 获取所有权限字数据列表,已去重。 + * + * @return 全部权限字列表。 + */ + Collection getAllPermCodeList(); + + /** + * 保存新增的权限字对象。 + * + * @param sysPermCode 新增的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 新增后的权限字对象。 + */ + SysPermCode saveNew(SysPermCode sysPermCode, Set permIdSet); + + /** + * 更新权限字对象。 + * + * @param sysPermCode 更新的权限字对象。 + * @param originalSysPermCode 原有的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set permIdSet); + + /** + * 删除指定的权限字。 + * + * @param permCodeId 权限字主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long permCodeId); + + /** + * 判断当前权限字是否存在下级权限字对象。 + * + * @param permCodeId 权限字主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long permCodeId); + + /** + * 验证权限字对象关联的数据是否都合法。 + * + * @param sysPermCode 当前操作的对象。 + * @param originalSysPermCode 原有对象。 + * @param permIdListString 逗号分隔的权限资源Id列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString); + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail(Long permCodeId, String loginName); + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail(Long permCodeId, String roleName); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermModuleService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermModuleService.java new file mode 100644 index 00000000..7fba7160 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermModuleService.java @@ -0,0 +1,63 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.upmsservice.model.SysPermModule; + +import java.util.*; + +/** + * 权限资源模块数据服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermModuleService extends IBaseService { + + /** + * 保存新增的权限资源模块对象。 + * + * @param sysPermModule 新增的权限资源模块对象。 + * @return 新增后的权限资源模块对象。 + */ + SysPermModule saveNew(SysPermModule sysPermModule); + + /** + * 更新权限资源模块对象。 + * + * @param sysPermModule 更新的权限资源模块对象。 + * @param originalSysPermModule 原有的权限资源模块对象。 + * @return 更新成功返回true,否则false + */ + boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule); + + /** + * 删除指定的权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long moduleId); + + /** + * 获取权限模块资源及其关联的权限资源列表。 + * + * @return 权限资源模块及其关联的权限资源列表。 + */ + List getPermModuleAndPermList(); + + /** + * 判断是否存在下级权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasChildren(Long moduleId); + + /** + * 判断是否存在权限数据。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + boolean hasModulePerms(Long moduleId); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermService.java new file mode 100644 index 00000000..96bf323d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermService.java @@ -0,0 +1,84 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.model.SysPerm; + +import java.util.*; + +/** + * 权限资源数据服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermService extends IBaseService { + + /** + * 保存新增的权限资源对象。 + * + * @param perm 新增的权限资源对象。 + * @return 新增后的权限资源对象。 + */ + SysPerm saveNew(SysPerm perm); + + /** + * 更新权限资源对象。 + * + * @param perm 更新的权限资源对象。 + * @param originalPerm 原有的权限资源对象。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysPerm perm, SysPerm originalPerm); + + /** + * 删除权限资源。 + * + * @param permId 权限资源主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long permId); + + /** + * 获取权限数据列表。 + * + * @param sysPermFilter 过滤对象。 + * @return 权限列表。 + */ + List getPermListWithRelation(SysPerm sysPermFilter); + + /** + * 获取与指定用户关联的权限资源列表,已去重。 + * + * @param userId 关联的用户主键Id。 + * @return 与指定用户Id关联的权限资源URL列表。 + */ + Collection getPermListByUserId(Long userId); + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + List> getSysUserListWithDetail(Long permId, String loginName); + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + List> getSysRoleListWithDetail(Long permId, String roleName); + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail(Long permId, String menuName); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermWhitelistService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermWhitelistService.java new file mode 100644 index 00000000..9462646f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysPermWhitelistService.java @@ -0,0 +1,22 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.upmsservice.model.SysPermWhitelist; + +import java.util.List; + +/** + * 白名单数据服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysPermWhitelistService extends IBaseService { + + /** + * 获取白名单权限资源的列表。 + * + * @return 白名单权限资源地址列表。 + */ + List getWhitelistPermList(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysRoleService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysRoleService.java new file mode 100644 index 00000000..e4a4b898 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysRoleService.java @@ -0,0 +1,105 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.model.SysRole; +import com.orangeforms.upmsservice.model.SysUserRole; + +import java.util.*; + +/** + * 角色数据服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysRoleService extends IBaseService { + + /** + * 保存新增的角色对象。 + * + * @param role 新增的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 新增后的角色对象。 + */ + SysRole saveNew(SysRole role, Set menuIdSet); + + /** + * 更新角色对象。 + * + * @param role 更新的角色对象。 + * @param originalRole 原有的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysRole role, SysRole originalRole, Set menuIdSet); + + /** + * 删除指定角色。 + * + * @param roleId 角色主键Id。 + * @return 删除成功返回true,否则false。 + */ + boolean remove(Long roleId); + + /** + * 获取用户的用户角色对象列表。 + * + * @param userId 用户Id。 + * @return 用户角色对象列表。 + */ + List getSysUserRoleListByUserId(Long userId); + + /** + * 获取角色列表。 + * + * @param filter 角色过滤对象。 + * @param orderBy 排序参数。 + * @return 角色列表。 + */ + List getSysRoleList(SysRole filter, String orderBy); + + /** + * 批量新增用户角色关联。 + * + * @param userRoleList 用户角色关系数据列表。 + */ + void addUserRoleList(List userRoleList); + + /** + * 移除指定用户和指定角色的关联关系。 + * + * @param roleId 角色主键Id。 + * @param userId 用户主键Id。 + * @return 移除成功返回true,否则false。 + */ + boolean removeUserRole(Long roleId, Long userId); + + /** + * 验证角色对象关联的数据是否都合法。 + * + * @param sysRole 当前操作的对象。 + * @param originalSysRole 原有对象。 + * @param menuIdListString 逗号分隔的menuId列表。 + * @return 验证结果。 + */ + CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString); + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail(Long roleId, String url); + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail(Long roleId, String permCode); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysUserService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysUserService.java new file mode 100644 index 00000000..04f7858e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/SysUserService.java @@ -0,0 +1,180 @@ +package com.orangeforms.upmsservice.service; + +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.common.core.base.service.IBaseService; + +import java.util.*; + +/** + * 用户管理数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUserService extends IBaseService { + + /** + * 获取指定登录名的用户对象。 + * + * @param loginName 指定登录用户名。 + * @return 用户对象。 + */ + SysUser getSysUserByLoginName(String loginName); + + /** + * 保存新增的用户对象。 + * + * @param user 新增的用户对象。 + * @param roleIdSet 用户角色Id集合。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 新增后的用户对象。 + */ + SysUser saveNew(SysUser user, Set roleIdSet, Set dataPermIdSet); + + /** + * 更新用户对象。 + * + * @param user 更新的用户对象。 + * @param originalUser 原有的用户对象。 + * @param roleIdSet 用户角色Id列表。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 更新成功返回true,否则false。 + */ + boolean update(SysUser user, SysUser originalUser, Set roleIdSet, Set dataPermIdSet); + + /** + * 删除指定数据。 + * + * @param userId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long userId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUserList(SysUser filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUserList(String inFilterField, Set inFilterValues, SysUser filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getSysUserListWithRelation(SysUser filter, String orderBy); + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + List getSysUserListWithRelation( + String inFilterField, Set inFilterValues, SysUser filter, String orderBy); + + /** + * 获取指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getSysUserListByRoleId(Long roleId, SysUser filter, String orderBy); + + /** + * 获取不属于指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getNotInSysUserListByRoleId(Long roleId, SysUser filter, String orderBy); + + /** + * 获取指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy); + + /** + * 获取不属于指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + List getNotInSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy); + + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + List> getSysPermListWithDetail(Long userId, String url); + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + List> getSysPermCodeListWithDetail(Long userId, String permCode); + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + List> getSysMenuListWithDetail(Long userId, String menuName); + + /** + * 验证用户对象关联的数据是否都合法。 + * + * @param sysUser 当前操作的对象。 + * @param originalSysUser 原有对象。 + * @param roleIds 逗号分隔的角色Id列表字符串。 + * @param dataPermIds 逗号分隔的数据权限Id列表字符串。 + * @return 验证结果。 + */ + CallResult verifyRelatedData( + SysUser sysUser, SysUser originalSysUser, String roleIds, String dataPermIds); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysDataPermServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysDataPermServiceImpl.java new file mode 100644 index 00000000..f5b98bad --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysDataPermServiceImpl.java @@ -0,0 +1,336 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.RedisKeyUtil; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.common.datafilter.constant.DataPermRuleType; +import com.orangeforms.upmsservice.dao.SysDataPermDeptMapper; +import com.orangeforms.upmsservice.dao.SysDataPermMapper; +import com.orangeforms.upmsservice.dao.SysDataPermUserMapper; +import com.orangeforms.upmsservice.service.SysDataPermService; +import com.orangeforms.upmsservice.service.SysDeptService; +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.upmsservice.config.ApplicationConfig; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 数据权限数据服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysDataPermService") +public class SysDataPermServiceImpl extends BaseService implements SysDataPermService { + + @Autowired + private SysDataPermMapper sysDataPermMapper; + @Autowired + private SysDataPermDeptMapper sysDataPermDeptMapper; + @Autowired + private SysDataPermUserMapper sysDataPermUserMapper; + @Autowired + private SysDeptService sysDeptService; + @Autowired + private RedissonClient redissonClient; + @Autowired + private ApplicationConfig applicationConfig; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysDataPermMapper; + } + + /** + * 保存新增的数据权限对象。 + * + * @param dataPerm 新增的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 新增后的数据权限对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysDataPerm saveNew(SysDataPerm dataPerm, Set deptIdSet) { + dataPerm.setDataPermId(idGenerator.nextLongId()); + dataPerm.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(dataPerm); + sysDataPermMapper.insert(dataPerm); + this.insertRelationData(dataPerm, deptIdSet); + return dataPerm; + } + + /** + * 更新数据权限对象。 + * + * @param dataPerm 更新的数据权限对象。 + * @param originalDataPerm 原有的数据权限对象。 + * @param deptIdSet 关联的部门Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysDataPerm dataPerm, SysDataPerm originalDataPerm, Set deptIdSet) { + MyModelUtil.fillCommonsForUpdate(dataPerm, originalDataPerm); + UpdateWrapper uw = this.createUpdateQueryForNullValue(dataPerm, dataPerm.getDataPermId()); + if (sysDataPermMapper.update(dataPerm, uw) != 1) { + return false; + } + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDataPermId(dataPerm.getDataPermId()); + sysDataPermDeptMapper.delete(new QueryWrapper<>(dataPermDept)); + this.insertRelationData(dataPerm, deptIdSet); + return true; + } + + /** + * 删除指定数据权限。 + * + * @param dataPermId 数据权限主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long dataPermId) { + if (sysDataPermMapper.deleteById(dataPermId) != 1) { + return false; + } + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDataPermId(dataPermId); + sysDataPermDeptMapper.delete(new QueryWrapper<>(dataPermDept)); + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + sysDataPermUserMapper.delete(new QueryWrapper<>(dataPermUser)); + return true; + } + + /** + * 获取数据权限列表。 + * + * @param filter 数据权限过滤对象。 + * @param orderBy 排序参数。 + * @return 数据权限查询列表。 + */ + @Override + public List getSysDataPermList(SysDataPerm filter, String orderBy) { + return sysDataPermMapper.getSysDataPermList(filter, orderBy); + } + + /** + * 将指定会话的数据权限集合从缓存中移除。 + * + * @param sessionId 会话Id。 + */ + @Override + public void removeDataPermCache(String sessionId) { + String sessionPermKey = RedisKeyUtil.makeSessionDataPermIdKey(sessionId); + redissonClient.getBucket(sessionPermKey).deleteAsync(); + } + + /** + * 将指定用户的指定会话的数据权限集合存入缓存。 + * + * @param sessionId 会话Id。 + * @param userId 用户主键Id。 + * @param deptId 用户所属部门主键Id。 + * @return 查询并缓存后的数据权限集合。返回格式为,Map。 + */ + @Override + public Map putDataPermCache(String sessionId, Long userId, Long deptId) { + Map dataPermMap = this.getSysDataPermListByUserId(userId, deptId); + if (dataPermMap.size() > 0) { + String dataPermSessionKey = RedisKeyUtil.makeSessionDataPermIdKey(sessionId); + RBucket bucket = redissonClient.getBucket(dataPermSessionKey); + bucket.set(JSON.toJSONString(dataPermMap), + applicationConfig.getDataPermExpiredSeconds(), TimeUnit.SECONDS); + } + return dataPermMap; + } + + /** + * 获取指定用户Id的数据权限列表。并基于权限规则类型进行了一级分组。 + * + * @param userId 指定的用户Id。 + * @param deptId 用户所属部门主键Id。 + * @return 合并优化后的数据权限列表。返回格式为,Map。 + */ + @Override + public Map getSysDataPermListByUserId(Long userId, Long deptId) { + List dataPermList = sysDataPermMapper.getSysDataPermListByUserId(userId); + dataPermList.forEach(dataPerm -> { + if (CollectionUtils.isNotEmpty(dataPerm.getDataPermDeptList())) { + Set deptIdSet = dataPerm.getDataPermDeptList().stream() + .map(SysDataPermDept::getDeptId).collect(Collectors.toSet()); + dataPerm.setDeptIdListString(StringUtils.join(deptIdSet, ",")); + } + }); + // 为了更方便进行后续的合并优化处理,这里再基于规则类型进行分组。ruleMap的key是规则类型。 + Map> ruleMap = + dataPermList.stream().collect(Collectors.groupingBy(SysDataPerm::getRuleType)); + Map resultMap = new HashMap<>(ruleMap.size()); + // 如有有ALL存在,就可以直接退出了,没有必要在处理后续的规则了。 + if (ruleMap.containsKey(DataPermRuleType.TYPE_ALL)) { + resultMap.put(DataPermRuleType.TYPE_ALL, "null"); + return resultMap; + } + // 这里优先合并最复杂的多部门及子部门场景。 + String deptIds = processMultiDeptAndChildren(ruleMap, deptId); + if (deptIds != null) { + resultMap.put(DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT, deptIds); + } + // 合并当前部门及子部门的优化 + if (ruleMap.get(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT) != null) { + // 需要与仅仅当前部门规则进行合并。 + ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY); + resultMap.put(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT, "null"); + } + // 合并自定义部门了。 + deptIds = processMultiDept(ruleMap, deptId); + if (deptIds != null) { + resultMap.put(DataPermRuleType.TYPE_CUSTOM_DEPT_LIST, deptIds); + } + // 最后处理当前部门和当前用户。 + if (ruleMap.get(DataPermRuleType.TYPE_DEPT_ONLY) != null) { + resultMap.put(DataPermRuleType.TYPE_DEPT_ONLY, "null"); + } + if (ruleMap.get(DataPermRuleType.TYPE_USER_ONLY) != null) { + resultMap.put(DataPermRuleType.TYPE_USER_ONLY, "null"); + } + return resultMap; + } + + private String processMultiDeptAndChildren(Map> ruleMap, Long deptId) { + List parentDeptList = ruleMap.get(DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT); + if (parentDeptList == null) { + return null; + } + Set deptIdSet = new HashSet<>(); + for (SysDataPerm parentDept : parentDeptList) { + deptIdSet.addAll(Arrays.stream(StringUtils.split( + parentDept.getDeptIdListString(), ",")).map(Long::valueOf).collect(Collectors.toSet())); + } + // 在合并所有的多父部门Id之后,需要判断是否有本部门及子部门的规则。如果有,就继续合并。 + if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT)) { + // 如果多父部门列表中包含当前部门,那么可以直接删除该规则了,如果没包含,就加入到多部门的DEPT_ID的IN LIST中。 + deptIdSet.add(deptId); + ruleMap.remove(DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT); + } + // 需要与仅仅当前部门规则进行合并。 + if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_ONLY)) { + if (deptIdSet.contains(deptId)) { + ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY); + } + } + return StringUtils.join(deptIdSet, ','); + } + + private String processMultiDept(Map> ruleMap, Long deptId) { + List customDeptList = ruleMap.get(DataPermRuleType.TYPE_CUSTOM_DEPT_LIST); + if (customDeptList == null) { + return null; + } + Set deptIdSet = new HashSet<>(); + for (SysDataPerm customDept : customDeptList) { + deptIdSet.addAll(Arrays.stream(StringUtils.split( + customDept.getDeptIdListString(), ",")).map(Long::valueOf).collect(Collectors.toSet())); + } + if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_ONLY)) { + deptIdSet.add(deptId); + ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY); + } + return StringUtils.join(deptIdSet, ','); + } + + /** + * 添加用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限Id。 + * @param userIdSet 关联的用户Id列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addDataPermUserList(Long dataPermId, Set userIdSet) { + for (Long userId : userIdSet) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(userId); + sysDataPermUserMapper.insert(dataPermUser); + } + } + + /** + * 移除用户和数据权限之间的多对多关联关系。 + * + * @param dataPermId 数据权限主键Id。 + * @param userId 用户主键Id。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeDataPermUser(Long dataPermId, Long userId) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(userId); + return sysDataPermUserMapper.delete(new QueryWrapper<>(dataPermUser)) == 1; + } + + /** + * 验证数据权限对象关联菜单数据是否都合法。 + * + * @param dataPerm 与数据权限关联的菜单数据列表。 + * @param deptIdListString 与数据权限关联的部门Id列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString) { + JSONObject jsonObject = new JSONObject(); + if (dataPerm.getRuleType() == DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT + || dataPerm.getRuleType() == DataPermRuleType.TYPE_CUSTOM_DEPT_LIST) { + if (StringUtils.isBlank(deptIdListString)) { + return CallResult.error("数据验证失败,部门列表不能为空!"); + } + Set deptIdSet = Arrays.stream(StringUtils.split( + deptIdListString, ",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDeptService.existAllPrimaryKeys(deptIdSet)) { + return CallResult.error("数据验证失败,存在不合法的部门数据,请刷新后重试!"); + } + jsonObject.put("deptIdSet", deptIdSet); + } + return CallResult.ok(jsonObject); + } + + private void insertRelationData(SysDataPerm dataPerm, Set deptIdSet) { + if (CollectionUtils.isNotEmpty(deptIdSet)) { + for (Long deptId : deptIdSet) { + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDataPermId(dataPerm.getDataPermId()); + dataPermDept.setDeptId(deptId); + sysDataPermDeptMapper.insert(dataPermDept); + } + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysDeptServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysDeptServiceImpl.java new file mode 100644 index 00000000..b79334f3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,279 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.upmsservice.service.*; +import com.orangeforms.upmsservice.dao.*; +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 部门管理数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysDeptService") +public class SysDeptServiceImpl extends BaseService implements SysDeptService { + + @Autowired + private SysDeptMapper sysDeptMapper; + @Autowired + private SysDeptRelationMapper sysDeptRelationMapper; + @Autowired + private SysUserService sysUserService; + @Autowired + private SysDataPermDeptMapper sysDataPermDeptMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysDeptMapper; + } + + /** + * 保存新增的部门对象。 + * + * @param sysDept 新增的部门对象。 + * @param parentSysDept 上级部门对象。 + * @return 新增后的部门对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysDept saveNew(SysDept sysDept, SysDept parentSysDept) { + sysDept.setDeptId(idGenerator.nextLongId()); + sysDept.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(sysDept); + sysDeptMapper.insert(sysDept); + // 同步插入部门关联关系数据 + if (parentSysDept == null) { + sysDeptRelationMapper.insert(new SysDeptRelation(sysDept.getDeptId(), sysDept.getDeptId())); + } else { + sysDeptRelationMapper.insertParentList(parentSysDept.getDeptId(), sysDept.getDeptId()); + } + return sysDept; + } + + /** + * 更新部门对象。 + * + * @param sysDept 更新的部门对象。 + * @param originalSysDept 原有的部门对象。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysDept sysDept, SysDept originalSysDept) { + MyModelUtil.fillCommonsForUpdate(sysDept, originalSysDept); + UpdateWrapper uw = this.createUpdateQueryForNullValue(sysDept, sysDept.getDeptId()); + if (sysDeptMapper.update(sysDept, uw) == 0) { + return false; + } + if (ObjectUtils.notEqual(sysDept.getParentId(), originalSysDept.getParentId())) { + this.updateParentRelation(sysDept, originalSysDept); + } + return true; + } + + private void updateParentRelation(SysDept sysDept, SysDept originalSysDept) { + // 1. 在删除当前部门与原有父部门的关联关系之前,先将原有的所有父部门Id缓存。 + List originalParentIdList = new LinkedList<>(); + if (originalSysDept.getParentId() != null) { + SysDept originalParentDept = getById(originalSysDept.getParentId()); + while (originalParentDept != null) { + originalParentIdList.add(originalParentDept.getDeptId()); + if (originalParentDept.getParentId() == null) { + break; + } + originalParentDept = getById(originalParentDept.getParentId()); + } + } + // 删除其子部门与其原有父部门之间的关联关系。 + for (Long parentDeptId : originalParentIdList) { + sysDeptRelationMapper.removeBetweenChildrenAndParents(parentDeptId, sysDept.getDeptId()); + } + // 2. 将当前部门与原有的父部门列表解除关系。 + SysDeptRelation filter = new SysDeptRelation(); + filter.setDeptId(sysDept.getDeptId()); + sysDeptRelationMapper.delete(new QueryWrapper<>(filter)); + // 3. 将当前部门和新的父部门列表建立关联关系。 + // 在插入与新父部门的关联关系 + List deptRelationList = new LinkedList<>(); + // 先插入自己和自己的关系。 + deptRelationList.add(new SysDeptRelation(sysDept.getDeptId(), sysDept.getDeptId())); + SysDept parentSysDept = null; + if (sysDept.getParentId() != null) { + parentSysDept = getById(sysDept.getParentId()); + } + List newParentIdList = new LinkedList<>(); + // 再插入直接父部门,以及父部门的父部门,并向上以此类推。 + while (parentSysDept != null) { + newParentIdList.add(parentSysDept.getDeptId()); + deptRelationList.add( + new SysDeptRelation(parentSysDept.getDeptId(), sysDept.getDeptId())); + if (parentSysDept.getParentId() == null) { + break; + } + parentSysDept = getById(parentSysDept.getParentId()); + } + sysDeptRelationMapper.insertList(deptRelationList); + // 4. 将当前部门的子部门与其新的父部门建立关联关系 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(MyModelUtil.mapToColumnName("parentDeptId", SysDeptRelation.class), sysDept.getDeptId()); + queryWrapper.ne(MyModelUtil.mapToColumnName("deptId", SysDeptRelation.class), sysDept.getDeptId()); + List childRelationList = sysDeptRelationMapper.selectList(queryWrapper); + List newChildrenAndParentList = new LinkedList<>(); + for (Long newParentId : newParentIdList) { + for (SysDeptRelation childDeptRelation : childRelationList) { + newChildrenAndParentList.add(new SysDeptRelation(newParentId, childDeptRelation.getDeptId())); + } + } + if (CollectionUtils.isNotEmpty(newChildrenAndParentList)) { + sysDeptRelationMapper.insertList(newChildrenAndParentList); + } + } + + /** + * 删除指定数据。 + * + * @param deptId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long deptId) { + if (sysDeptMapper.deleteById(deptId) == 0) { + return false; + } + // 这里删除当前部门及其父部门的关联关系。 + // 当前部门和子部门的关系无需在这里删除,因为包含子部门时不能删除父部门。 + SysDeptRelation deptRelation = new SysDeptRelation(); + deptRelation.setDeptId(deptId); + sysDeptRelationMapper.delete(new QueryWrapper<>(deptRelation)); + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDeptId(deptId); + sysDataPermDeptMapper.delete(new QueryWrapper<>(dataPermDept)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysDeptList(SysDept filter, String orderBy) { + return sysDeptMapper.getSysDeptList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysDeptList( + String inFilterField, Set inFilterValues, SysDept filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, SysDept.class); + return sysDeptMapper.getSysDeptList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysDeptList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getSysDeptListWithRelation(SysDept filter, String orderBy) { + List resultList = sysDeptMapper.getSysDeptList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysDeptList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getSysDeptListWithRelation( + String inFilterField, Set inFilterValues, SysDept filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, SysDept.class); + List resultList = + sysDeptMapper.getSysDeptList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 判断指定对象是否包含下级对象。 + * + * @param deptId 主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long deptId) { + SysDept filter = new SysDept(); + filter.setParentId(deptId); + return getCountByFilter(filter) > 0; + } + + /** + * 判断指定部门Id是否包含用户对象。 + * + * @param deptId 部门主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildrenUser(Long deptId) { + SysUser sysUser = new SysUser(); + sysUser.setDeptId(deptId); + return sysUserService.getCountByFilter(sysUser) > 0; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysMenuServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysMenuServiceImpl.java new file mode 100644 index 00000000..510c4a16 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,335 @@ +package com.orangeforms.upmsservice.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsapi.constant.SysMenuType; +import com.orangeforms.upmsapi.constant.SysOnlineMenuPermType; +import com.orangeforms.upmsservice.service.SysMenuService; +import com.orangeforms.upmsservice.service.SysPermCodeService; +import com.orangeforms.upmsservice.dao.SysMenuPermCodeMapper; +import com.orangeforms.upmsservice.dao.SysRoleMenuMapper; +import com.orangeforms.upmsservice.dao.SysMenuMapper; +import com.orangeforms.upmsservice.model.SysMenu; +import com.orangeforms.upmsservice.model.SysMenuPermCode; +import com.orangeforms.upmsservice.model.SysRoleMenu; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 菜单数据服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysMenuService") +public class SysMenuServiceImpl extends BaseService implements SysMenuService { + + @Autowired + private SysMenuMapper sysMenuMapper; + @Autowired + private SysRoleMenuMapper sysRoleMenuMapper; + @Autowired + private SysMenuPermCodeMapper sysMenuPermCodeMapper; + @Autowired + private SysPermCodeService sysPermCodeService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysMenuMapper; + } + + /** + * 保存新增的菜单对象。 + * + * @param sysMenu 新增的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 新增后的菜单对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysMenu saveNew(SysMenu sysMenu, Set permCodeIdSet) { + sysMenu.setMenuId(idGenerator.nextLongId()); + sysMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(sysMenu); + sysMenuMapper.insert(sysMenu); + if (permCodeIdSet != null) { + for (Long permCodeId : permCodeIdSet) { + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setMenuId(sysMenu.getMenuId()); + menuPermCode.setPermCodeId(permCodeId); + sysMenuPermCodeMapper.insert(menuPermCode); + } + } + // 判断当前菜单是否为指向在线表单的菜单,并将根据约定,动态插入两个子菜单。 + if (sysMenu.getOnlineFormId() != null) { + SysMenu viewSubMenu = new SysMenu(); + viewSubMenu.setMenuId(idGenerator.nextLongId()); + viewSubMenu.setParentId(sysMenu.getMenuId()); + viewSubMenu.setMenuType(SysMenuType.TYPE_BUTTON); + viewSubMenu.setMenuName("查看"); + viewSubMenu.setShowOrder(0); + viewSubMenu.setOnlineFormId(sysMenu.getOnlineFormId()); + viewSubMenu.setOnlineMenuPermType(SysOnlineMenuPermType.TYPE_VIEW); + viewSubMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(viewSubMenu); + sysMenuMapper.insert(viewSubMenu); + SysMenu editSubMenu = new SysMenu(); + editSubMenu.setMenuId(idGenerator.nextLongId()); + editSubMenu.setParentId(sysMenu.getMenuId()); + editSubMenu.setMenuType(SysMenuType.TYPE_BUTTON); + editSubMenu.setMenuName("编辑"); + editSubMenu.setShowOrder(1); + editSubMenu.setOnlineFormId(sysMenu.getOnlineFormId()); + editSubMenu.setOnlineMenuPermType(SysOnlineMenuPermType.TYPE_EDIT); + editSubMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(editSubMenu); + sysMenuMapper.insert(editSubMenu); + } + return sysMenu; + } + + /** + * 更新菜单对象。 + * + * @param sysMenu 更新的菜单对象。 + * @param originalSysMenu 原有的菜单对象。 + * @param permCodeIdSet 权限字Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set permCodeIdSet) { + MyModelUtil.fillCommonsForUpdate(sysMenu, originalSysMenu); + sysMenu.setMenuType(originalSysMenu.getMenuType()); + UpdateWrapper uw = this.createUpdateQueryForNullValue(sysMenu, sysMenu.getMenuId()); + if (sysMenuMapper.update(sysMenu, uw) != 1) { + return false; + } + SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode(); + deletedMenuPermCode.setMenuId(sysMenu.getMenuId()); + sysMenuPermCodeMapper.delete(new QueryWrapper<>(deletedMenuPermCode)); + if (permCodeIdSet != null) { + for (Long permCodeId : permCodeIdSet) { + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setMenuId(sysMenu.getMenuId()); + menuPermCode.setPermCodeId(permCodeId); + sysMenuPermCodeMapper.insert(menuPermCode); + } + } + // 如果当前菜单的在线表单Id变化了,就需要同步更新他的内置子菜单也同步更新。 + if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) { + SysMenu onlineSubMenu = new SysMenu(); + onlineSubMenu.setOnlineFormId(sysMenu.getOnlineFormId()); + sysMenuMapper.update(onlineSubMenu, + new QueryWrapper().lambda().eq(SysMenu::getParentId, sysMenu.getMenuId())); + } + return true; + } + + /** + * 删除指定的菜单。 + * + * @param menu 菜单对象。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(SysMenu menu) { + Long menuId = menu.getMenuId(); + if (sysMenuMapper.deleteById(menuId) != 1) { + return false; + } + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setMenuId(menuId); + sysRoleMenuMapper.delete(new QueryWrapper<>(roleMenu)); + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setMenuId(menuId); + sysMenuPermCodeMapper.delete(new QueryWrapper<>(menuPermCode)); + // 如果为指向在线表单的菜单,则连同删除子菜单 + if (menu.getOnlineFormId() != null) { + sysMenuMapper.delete(new QueryWrapper().lambda().eq(SysMenu::getParentId, menuId)); + } + return true; + } + + /** + * 获取全部菜单列表。 + * + * @return 全部菜单列表。 + */ + @Override + public Collection getAllMenuList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByAsc(this.safeMapToColumnName("showOrder")); + queryWrapper.in(this.safeMapToColumnName("menuType"), + Arrays.asList(SysMenuType.TYPE_MENU, SysMenuType.TYPE_DIRECTORY)); + return sysMenuMapper.selectList(queryWrapper); + } + + /** + * 获取指定用户Id的菜单列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的菜单列表。 + */ + @Override + public Collection getMenuListByUserId(Long userId) { + List menuList = sysMenuMapper.getMenuListByUserId(userId); + LinkedHashMap menuMap = new LinkedHashMap<>(); + for (SysMenu menu : menuList) { + menuMap.put(menu.getMenuId(), menu); + } + return menuMap.values(); + } + + /** + * 判断当前菜单是否存在子菜单。 + * + * @param menuId 菜单主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long menuId) { + SysMenu menu = new SysMenu(); + menu.setParentId(menuId); + return this.getCountByFilter(menu) > 0; + } + + /** + * 验证菜单对象关联的数据是否都合法。 + * + * @param sysMenu 当前操作的对象。 + * @param originalSysMenu 原有对象。 + * @param permCodeIdListString 逗号分隔的权限Id列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) { + // menu、ui fragment和button类型的menu不能没有parentId + if (sysMenu.getParentId() == null) { + if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) { + return CallResult.error("数据验证失败,当前类型菜单项的上级菜单不能为空!"); + } + } + if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) { + String errorMessage = checkErrorOfNonDirectoryMenu(sysMenu); + if (errorMessage != null) { + return CallResult.error(errorMessage); + } + } + JSONObject jsonObject = null; + if (StringUtils.isNotBlank(permCodeIdListString)) { + Set permCodeIdSet = Arrays.stream( + permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysPermCodeService.existAllPrimaryKeys(permCodeIdSet)) { + return CallResult.error("数据验证失败,存在不合法的权限字,请刷新后重试!"); + } + jsonObject = new JSONObject(); + jsonObject.put("permCodeIdSet", permCodeIdSet); + } + return CallResult.ok(jsonObject); + } + + /** + * 查询菜单的权限资源地址列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param url 权限资源地址过滤条件。 + * @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermListWithDetail(Long menuId, String url) { + return sysMenuMapper.getSysPermListWithDetail(menuId, url); + } + + /** + * 查询菜单的用户列表。同时返回详细的分配路径。 + * + * @param menuId 菜单Id。 + * @param loginName 登录名。 + * @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysUserListWithDetail(Long menuId, String loginName) { + return sysMenuMapper.getSysUserListWithDetail(menuId, loginName); + } + + /** + * 获取指定类型的所有在线表单的菜单。 + * + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + @Override + public List getAllOnlineMenuList(Integer menuType) { + LambdaQueryWrapper queryWrapper = + new QueryWrapper().lambda().isNotNull(SysMenu::getOnlineFormId); + if (menuType != null) { + queryWrapper.eq(SysMenu::getMenuType, menuType); + } + return sysMenuMapper.selectList(queryWrapper); + } + + /** + * 获取当前用户有权访问的在线表单菜单,仅返回类型为BUTTON的菜单。 + * + * @param userId 指定的用户。 + * @param menuType 菜单类型,NULL则返回全部类型。 + * @return 在线表单关联的菜单列表。 + */ + @Override + public List getOnlineMenuListByUserId(Long userId, Integer menuType) { + return sysMenuMapper.getOnlineMenuListByUserId(userId, menuType); + } + + private String checkErrorOfNonDirectoryMenu(SysMenu sysMenu) { + // 判断父节点是否存在 + SysMenu parentSysMenu = getById(sysMenu.getParentId()); + if (parentSysMenu == null) { + return "数据验证失败,关联的上级菜单并不存在,请刷新后重试!"; + } + // 逐个判断每种类型的菜单,他的父菜单的合法性,先从目录类型和菜单类型开始 + if (sysMenu.getMenuType() == SysMenuType.TYPE_DIRECTORY + || sysMenu.getMenuType() == SysMenuType.TYPE_MENU) { + // 他们的上级只能是目录 + if (parentSysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) { + return "数据验证失败,当前类型菜单项的上级菜单只能是目录类型!"; + } + } else if (sysMenu.getMenuType() == SysMenuType.TYPE_UI_FRAGMENT) { + // ui fragment的上级只能是menu类型 + if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU) { + return "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和按钮类型!"; + } + } else if (sysMenu.getMenuType() == SysMenuType.TYPE_BUTTON) { + // button的上级只能是menu和ui fragment + if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU + && parentSysMenu.getMenuType() != SysMenuType.TYPE_UI_FRAGMENT) { + return "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和UI片段类型!"; + } + } + return null; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermCodeServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermCodeServiceImpl.java new file mode 100644 index 00000000..8625d019 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermCodeServiceImpl.java @@ -0,0 +1,226 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.dao.SysMenuPermCodeMapper; +import com.orangeforms.upmsservice.dao.SysPermCodeMapper; +import com.orangeforms.upmsservice.dao.SysPermCodePermMapper; +import com.orangeforms.upmsservice.model.SysMenuPermCode; +import com.orangeforms.upmsservice.model.SysPermCode; +import com.orangeforms.upmsservice.model.SysPermCodePerm; +import com.orangeforms.upmsservice.service.SysPermCodeService; +import com.orangeforms.upmsservice.service.SysPermService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 权限字数据服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysPermCodeService") +public class SysPermCodeServiceImpl extends BaseService implements SysPermCodeService { + + @Autowired + private SysPermCodeMapper sysPermCodeMapper; + @Autowired + private SysPermCodePermMapper sysPermCodePermMapper; + @Autowired + private SysMenuPermCodeMapper sysMenuPermCodeMapper; + @Autowired + private SysPermService sysPermService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermCodeMapper; + } + + /** + * 获取指定用户的权限字列表,已去重。 + * + * @param userId 用户主键Id。 + * @return 用户关联的权限字列表。 + */ + @Override + public Collection getPermCodeListByUserId(Long userId) { + List permCodeList = sysPermCodeMapper.getPermCodeListByUserId(userId); + return new HashSet<>(permCodeList); + } + + /** + * 获取所有权限字数据列表,已去重。 + * + * @return 全部权限字列表。 + */ + @Override + public Collection getAllPermCodeList() { + List permCodeList = this.getAllList(); + return permCodeList.stream().map(SysPermCode::getPermCode).collect(Collectors.toSet()); + } + + /** + * 保存新增的权限字对象。 + * + * @param sysPermCode 新增的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 新增后的权限字对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysPermCode saveNew(SysPermCode sysPermCode, Set permIdSet) { + sysPermCode.setPermCodeId(idGenerator.nextLongId()); + sysPermCode.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(sysPermCode); + sysPermCodeMapper.insert(sysPermCode); + if (permIdSet != null) { + for (Long permId : permIdSet) { + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); + permCodePerm.setPermId(permId); + sysPermCodePermMapper.insert(permCodePerm); + } + } + return sysPermCode; + } + + /** + * 更新权限字对象。 + * + * @param sysPermCode 更新的权限字对象。 + * @param originalSysPermCode 原有的权限字对象。 + * @param permIdSet 权限资源Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set permIdSet) { + sysPermCode.setParentId(originalSysPermCode.getParentId()); + MyModelUtil.fillCommonsForUpdate(sysPermCode, originalSysPermCode); + UpdateWrapper uw = + this.createUpdateQueryForNullValue(sysPermCode, sysPermCode.getPermCodeId()); + if (sysPermCodeMapper.update(sysPermCode, uw) != 1) { + return false; + } + SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm(); + deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); + sysPermCodePermMapper.delete(new QueryWrapper<>(deletedPermCodePerm)); + if (permIdSet != null) { + for (Long permId : permIdSet) { + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); + permCodePerm.setPermId(permId); + sysPermCodePermMapper.insert(permCodePerm); + } + } + return true; + } + + /** + * 删除指定的权限字。 + * + * @param permCodeId 权限字主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long permCodeId) { + if (sysPermCodeMapper.deleteById(permCodeId) != 1) { + return false; + } + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setPermCodeId(permCodeId); + sysMenuPermCodeMapper.delete(new QueryWrapper<>(menuPermCode)); + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermCodeId(permCodeId); + sysPermCodePermMapper.delete(new QueryWrapper<>(permCodePerm)); + return true; + } + + /** + * 判断当前权限字是否存在下级权限字对象。 + * + * @param permCodeId 权限字主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long permCodeId) { + SysPermCode permCode = new SysPermCode(); + permCode.setParentId(permCodeId); + return this.getCountByFilter(permCode) > 0; + } + + /** + * 验证权限字对象关联的数据是否都合法。 + * + * @param sysPermCode 当前操作的对象。 + * @param originalSysPermCode 原有对象。 + * @param permIdListString 逗号分隔的权限资源Id列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData( + SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString) { + if (this.needToVerify(sysPermCode, originalSysPermCode, SysPermCode::getParentId)) { + if (getById(sysPermCode.getParentId()) == null) { + return CallResult.error("数据验证失败,关联的上级权限字并不存在,请刷新后重试!"); + } + } + JSONObject jsonObject = null; + if (StringUtils.isNotBlank(permIdListString)) { + Set permIdSet = Arrays.stream( + permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysPermService.existAllPrimaryKeys(permIdSet)) { + return CallResult.error("数据验证失败,存在不合法的权限资源,请刷新后重试!"); + } + jsonObject = new JSONObject(); + jsonObject.put("permIdSet", permIdSet); + } + return CallResult.ok(jsonObject); + } + + /** + * 查询权限字的用户列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param loginName 登录名。 + * @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysUserListWithDetail(Long permCodeId, String loginName) { + return sysPermCodeMapper.getSysUserListWithDetail(permCodeId, loginName); + } + + /** + * 查询权限字的角色列表。同时返回详细的分配路径。 + * + * @param permCodeId 权限字Id。 + * @param roleName 角色名。 + * @return 包含从权限字到角色的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysRoleListWithDetail(Long permCodeId, String roleName) { + return sysPermCodeMapper.getSysRoleListWithDetail(permCodeId, roleName); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermModuleServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermModuleServiceImpl.java new file mode 100644 index 00000000..59279a71 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermModuleServiceImpl.java @@ -0,0 +1,124 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.upmsservice.dao.SysPermModuleMapper; +import com.orangeforms.upmsservice.model.SysPerm; +import com.orangeforms.upmsservice.model.SysPermModule; +import com.orangeforms.upmsservice.service.SysPermModuleService; +import com.orangeforms.upmsservice.service.SysPermService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 权限资源模块数据服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysPermModuleService") +public class SysPermModuleServiceImpl extends BaseService implements SysPermModuleService { + + @Autowired + private SysPermModuleMapper sysPermModuleMapper; + @Autowired + private SysPermService sysPermService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermModuleMapper; + } + + /** + * 保存新增的权限资源模块对象。 + * + * @param sysPermModule 新增的权限资源模块对象。 + * @return 新增后的权限资源模块对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysPermModule saveNew(SysPermModule sysPermModule) { + sysPermModule.setModuleId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(sysPermModule); + sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysPermModuleMapper.insert(sysPermModule); + return sysPermModule; + } + + /** + * 更新权限资源模块对象。 + * + * @param sysPermModule 更新的权限资源模块对象。 + * @param originalSysPermModule 原有的权限资源模块对象。 + * @return 更新成功返回true,否则false + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) { + MyModelUtil.fillCommonsForUpdate(sysPermModule, originalSysPermModule); + return sysPermModuleMapper.updateById(sysPermModule) != 0; + } + + /** + * 删除指定的权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long moduleId) { + return sysPermModuleMapper.deleteById(moduleId) == 1; + } + + /** + * 获取权限模块资源及其关联的权限资源列表。 + * + * @return 权限资源模块及其关联的权限资源列表。 + */ + @Override + public List getPermModuleAndPermList() { + return sysPermModuleMapper.getPermModuleAndPermList(); + } + + /** + * 判断是否存在下级权限资源模块。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasChildren(Long moduleId) { + SysPermModule permModule = new SysPermModule(); + permModule.setParentId(moduleId); + return this.getCountByFilter(permModule) > 0; + } + + /** + * 判断是否存在权限数据。 + * + * @param moduleId 权限资源模块主键Id。 + * @return 存在返回true,否则false。 + */ + @Override + public boolean hasModulePerms(Long moduleId) { + SysPerm filter = new SysPerm(); + filter.setModuleId(moduleId); + return sysPermService.getCountByFilter(filter) > 0; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermServiceImpl.java new file mode 100644 index 00000000..04ff8dd5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermServiceImpl.java @@ -0,0 +1,187 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import cn.hutool.core.util.ObjectUtil; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.dao.SysPermCodePermMapper; +import com.orangeforms.upmsservice.dao.SysPermMapper; +import com.orangeforms.upmsservice.model.SysPerm; +import com.orangeforms.upmsservice.model.SysPermCodePerm; +import com.orangeforms.upmsservice.model.SysPermModule; +import com.orangeforms.upmsservice.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 权限资源数据服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysPermService") +public class SysPermServiceImpl extends BaseService implements SysPermService { + + @Autowired + private SysPermMapper sysPermMapper; + @Autowired + private SysPermCodePermMapper sysPermCodePermMapper; + @Autowired + private SysPermModuleService sysPermModuleService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermMapper; + } + + /** + * 保存新增的权限资源对象。 + * + * @param perm 新增的权限资源对象。 + * @return 新增后的权限资源对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysPerm saveNew(SysPerm perm) { + perm.setPermId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(perm); + perm.setDeletedFlag(GlobalDeletedFlag.NORMAL); + sysPermMapper.insert(perm); + return perm; + } + + /** + * 更新权限资源对象。 + * + * @param perm 更新的权限资源对象。 + * @param originalPerm 原有的权限资源对象。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysPerm perm, SysPerm originalPerm) { + MyModelUtil.fillCommonsForUpdate(perm, originalPerm); + return sysPermMapper.updateById(perm) != 0; + } + + /** + * 删除权限资源。 + * + * @param permId 权限资源主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long permId) { + if (sysPermMapper.deleteById(permId) != 1) { + return false; + } + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermId(permId); + sysPermCodePermMapper.delete(new QueryWrapper<>(permCodePerm)); + return true; + } + + /** + * 获取权限数据列表。 + * + * @param sysPermFilter 过滤对象。 + * @return 权限列表。 + */ + @Override + public List getPermListWithRelation(SysPerm sysPermFilter) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByAsc(this.safeMapToColumnName("showOrder")); + queryWrapper.eq(ObjectUtil.isNotNull(sysPermFilter.getModuleId()), + this.safeMapToColumnName("moduleId"), sysPermFilter.getModuleId()); + queryWrapper.like(ObjectUtil.isNotNull(sysPermFilter.getUrl()), + this.safeMapToColumnName("url"), "%" + sysPermFilter.getUrl() + "%"); + List permList = sysPermMapper.selectList(queryWrapper); + // 这里因为权限只有字典数据,所以仅仅做字典关联。 + this.buildRelationForDataList(permList, MyRelationParam.dictOnly()); + return permList; + } + + /** + * 获取与指定用户关联的权限资源列表,已去重。 + * + * @param userId 关联的用户主键Id。 + * @return 与指定用户Id关联的权限资源列表。 + */ + @Override + public Collection getPermListByUserId(Long userId) { + List urlList = sysPermMapper.getPermListByUserId(userId); + return new HashSet<>(urlList); + } + + /** + * 验证权限资源对象关联的数据是否都合法。 + * + * @param sysPerm 当前操作的对象。 + * @param originalSysPerm 原有对象。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) { + if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) { + SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId()); + if (permModule == null) { + return CallResult.error("数据验证失败,关联的权限模块Id并不存在,请刷新后重试!"); + } + } + return CallResult.ok(); + } + + /** + * 查询权限资源地址的用户列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param loginName 登录名。 + * @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysUserListWithDetail(Long permId, String loginName) { + return sysPermMapper.getSysUserListWithDetail(permId, loginName); + } + + /** + * 查询权限资源地址的角色列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param roleName 角色名。 + * @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysRoleListWithDetail(Long permId, String roleName) { + return sysPermMapper.getSysRoleListWithDetail(permId, roleName); + } + + /** + * 查询权限资源地址的菜单列表。同时返回详细的分配路径。 + * + * @param permId 权限资源Id。 + * @param menuName 菜单名。 + * @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysMenuListWithDetail(Long permId, String menuName) { + return sysPermMapper.getSysMenuListWithDetail(permId, menuName); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermWhitelistServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermWhitelistServiceImpl.java new file mode 100644 index 00000000..b491fa29 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysPermWhitelistServiceImpl.java @@ -0,0 +1,51 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.upmsservice.dao.SysPermWhitelistMapper; +import com.orangeforms.upmsservice.model.SysPermWhitelist; +import com.orangeforms.upmsservice.service.SysPermWhitelistService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 白名单数据服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysPermWhitelistService") +public class SysPermWhitelistServiceImpl extends BaseService implements SysPermWhitelistService { + + @Autowired + private SysPermWhitelistMapper sysPermWhitelistMapper; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysPermWhitelistMapper; + } + + /** + * 获取白名单权限资源的列表。 + * + * @return 白名单权限资源地址列表。 + */ + @Override + public List getWhitelistPermList() { + List dataList = this.getAllList(); + Function getterFunc = SysPermWhitelist::getPermUrl; + return dataList.stream() + .filter(x -> getterFunc.apply(x) != null).map(getterFunc).collect(Collectors.toList()); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysRoleServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysRoleServiceImpl.java new file mode 100644 index 00000000..feac5614 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,228 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.alibaba.fastjson.JSONObject; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.upmsservice.dao.SysRoleMapper; +import com.orangeforms.upmsservice.dao.SysRoleMenuMapper; +import com.orangeforms.upmsservice.dao.SysUserRoleMapper; +import com.orangeforms.upmsservice.model.SysRole; +import com.orangeforms.upmsservice.model.SysRoleMenu; +import com.orangeforms.upmsservice.model.SysUserRole; +import com.orangeforms.upmsservice.service.SysMenuService; +import com.orangeforms.upmsservice.service.SysRoleService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 角色数据服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysRoleService") +public class SysRoleServiceImpl extends BaseService implements SysRoleService { + + @Autowired + private SysRoleMapper sysRoleMapper; + @Autowired + private SysRoleMenuMapper sysRoleMenuMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private SysMenuService sysMenuService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回主对象的Mapper对象。 + * + * @return 主对象的Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysRoleMapper; + } + + /** + * 保存新增的角色对象。 + * + * @param role 新增的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 新增后的角色对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysRole saveNew(SysRole role, Set menuIdSet) { + role.setRoleId(idGenerator.nextLongId()); + role.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(role); + sysRoleMapper.insert(role); + if (menuIdSet != null) { + for (Long menuId : menuIdSet) { + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(role.getRoleId()); + roleMenu.setMenuId(menuId); + sysRoleMenuMapper.insert(roleMenu); + } + } + return role; + } + + /** + * 更新角色对象。 + * + * @param role 更新的角色对象。 + * @param originalRole 原有的角色对象。 + * @param menuIdSet 菜单Id列表。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysRole role, SysRole originalRole, Set menuIdSet) { + MyModelUtil.fillCommonsForUpdate(role, originalRole); + if (sysRoleMapper.updateById(role) != 1) { + return false; + } + SysRoleMenu deletedRoleMenu = new SysRoleMenu(); + deletedRoleMenu.setRoleId(role.getRoleId()); + sysRoleMenuMapper.delete(new QueryWrapper<>(deletedRoleMenu)); + if (menuIdSet != null) { + for (Long menuId : menuIdSet) { + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(role.getRoleId()); + roleMenu.setMenuId(menuId); + sysRoleMenuMapper.insert(roleMenu); + } + } + return true; + } + + /** + * 删除指定角色。 + * + * @param roleId 角色主键Id。 + * @return 删除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long roleId) { + if (sysRoleMapper.deleteById(roleId) != 1) { + return false; + } + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(roleId); + sysRoleMenuMapper.delete(new QueryWrapper<>(roleMenu)); + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + sysUserRoleMapper.delete(new QueryWrapper<>(userRole)); + return true; + } + + /** + * 获取角色列表。 + * + * @param filter 角色过滤对象。 + * @param orderBy 排序参数。 + * @return 角色列表。 + */ + @Override + public List getSysRoleList(SysRole filter, String orderBy) { + return sysRoleMapper.getSysRoleList(filter, orderBy); + } + + @Override + public List getSysUserRoleListByUserId(Long userId) { + SysUserRole filter = new SysUserRole(); + filter.setUserId(userId); + return sysUserRoleMapper.selectList(new QueryWrapper<>(filter)); + } + + /** + * 批量新增用户角色关联。 + * + * @param userRoleList 用户角色关系数据列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void addUserRoleList(List userRoleList) { + for (SysUserRole userRole : userRoleList) { + sysUserRoleMapper.insert(userRole); + } + } + + /** + * 移除指定用户和指定角色的关联关系。 + * + * @param roleId 角色主键Id。 + * @param userId 用户主键Id。 + * @return 移除成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean removeUserRole(Long roleId, Long userId) { + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + userRole.setUserId(userId); + return sysUserRoleMapper.delete(new QueryWrapper<>(userRole)) == 1; + } + + /** + * 验证角色对象关联的数据是否都合法。 + * + * @param sysRole 当前操作的对象。 + * @param originalSysRole 原有对象。 + * @param menuIdListString 逗号分隔的menuId列表。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) { + JSONObject jsonObject = null; + if (StringUtils.isNotBlank(menuIdListString)) { + Set menuIdSet = Arrays.stream( + menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) { + return CallResult.error("数据验证失败,存在不合法的菜单权限,请刷新后重试!"); + } + jsonObject = new JSONObject(); + jsonObject.put("menuIdSet", menuIdSet); + } + return CallResult.ok(jsonObject); + } + + /** + * 查询角色的权限资源地址列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param url url过滤条件。 + * @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermListWithDetail(Long roleId, String url) { + return sysRoleMapper.getSysPermListWithDetail(roleId, url); + } + + /** + * 查询角色的权限字列表。同时返回详细的分配路径。 + * + * @param roleId 角色Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从角色到权限字的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermCodeListWithDetail(Long roleId, String permCode) { + return sysRoleMapper.getSysPermCodeListWithDetail(roleId, permCode); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysUserServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysUserServiceImpl.java new file mode 100644 index 00000000..cedec160 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/java/com/orangeforms/upmsservice/service/impl/SysUserServiceImpl.java @@ -0,0 +1,375 @@ +package com.orangeforms.upmsservice.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.alibaba.fastjson.JSONObject; +import com.orangeforms.upmsservice.service.*; +import com.orangeforms.upmsservice.dao.*; +import com.orangeforms.upmsservice.model.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.upmsapi.constant.SysUserStatus; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 用户管理数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service("sysUserService") +public class SysUserServiceImpl extends BaseService implements SysUserService { + + @Autowired + private SysUserMapper sysUserMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private SysRoleService sysRoleService; + @Autowired + private SysDataPermService sysDataPermService; + @Autowired + private SysDataPermUserMapper sysDataPermUserMapper; + @Autowired + private SysDeptService sysDeptService; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysUserMapper; + } + + /** + * 获取指定登录名的用户对象。 + * + * @param loginName 指定登录用户名。 + * @return 用户对象。 + */ + @Override + public SysUser getSysUserByLoginName(String loginName) { + SysUser filter = new SysUser(); + filter.setLoginName(loginName); + return sysUserMapper.selectOne(new QueryWrapper<>(filter)); + } + + /** + * 保存新增的用户对象。 + * + * @param user 新增的用户对象。 + * @param roleIdSet 用户角色Id集合。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 新增后的用户对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysUser saveNew(SysUser user, Set roleIdSet, Set dataPermIdSet) { + user.setUserId(idGenerator.nextLongId()); + user.setUserStatus(SysUserStatus.STATUS_NORMAL); + user.setDeletedFlag(GlobalDeletedFlag.NORMAL); + MyModelUtil.fillCommonsForInsert(user); + sysUserMapper.insert(user); + if (CollectionUtils.isNotEmpty(roleIdSet)) { + for (Long roleId : roleIdSet) { + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(user.getUserId()); + userRole.setRoleId(roleId); + sysUserRoleMapper.insert(userRole); + } + } + if (CollectionUtils.isNotEmpty(dataPermIdSet)) { + for (Long dataPermId : dataPermIdSet) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(user.getUserId()); + sysDataPermUserMapper.insert(dataPermUser); + } + } + return user; + } + + /** + * 更新用户对象。 + * + * @param user 更新的用户对象。 + * @param originalUser 原有的用户对象。 + * @param roleIdSet 用户角色Id列表。 + * @param dataPermIdSet 数据权限Id集合。 + * @return 更新成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysUser user, SysUser originalUser, Set roleIdSet, Set dataPermIdSet) { + user.setLoginName(originalUser.getLoginName()); + MyModelUtil.fillCommonsForUpdate(user, originalUser); + UpdateWrapper uw = this.createUpdateQueryForNullValue(user, user.getUserId()); + if (sysUserMapper.update(user, uw) != 1) { + return false; + } + // 先删除原有的User-Role关联关系,再重新插入新的关联关系 + SysUserRole deletedUserRole = new SysUserRole(); + deletedUserRole.setUserId(user.getUserId()); + sysUserRoleMapper.delete(new QueryWrapper<>(deletedUserRole)); + if (CollectionUtils.isNotEmpty(roleIdSet)) { + for (Long roleId : roleIdSet) { + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(user.getUserId()); + userRole.setRoleId(roleId); + sysUserRoleMapper.insert(userRole); + } + } + // 先删除原有的DataPerm-User关联关系,在重新插入新的关联关系 + SysDataPermUser deletedDataPermUser = new SysDataPermUser(); + deletedDataPermUser.setUserId(user.getUserId()); + sysDataPermUserMapper.delete(new QueryWrapper<>(deletedDataPermUser)); + if (CollectionUtils.isNotEmpty(dataPermIdSet)) { + for (Long dataPermId : dataPermIdSet) { + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setDataPermId(dataPermId); + dataPermUser.setUserId(user.getUserId()); + sysDataPermUserMapper.insert(dataPermUser); + } + } + return true; + } + + /** + * 删除指定数据。 + * + * @param userId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long userId) { + if (sysUserMapper.deleteById(userId) == 0) { + return false; + } + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(userId); + sysUserRoleMapper.delete(new QueryWrapper<>(userRole)); + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setUserId(userId); + sysDataPermUserMapper.delete(new QueryWrapper<>(dataPermUser)); + return true; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUserList(SysUser filter, String orderBy) { + return sysUserMapper.getSysUserList(null, null, filter, orderBy); + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUserList( + String inFilterField, Set inFilterValues, SysUser filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, SysUser.class); + return sysUserMapper.getSysUserList(inFilterColumn, inFilterValues, filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。 + * 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getSysUserListWithRelation(SysUser filter, String orderBy) { + List resultList = sysUserMapper.getSysUserList(null, null, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize); + return resultList; + } + + /** + * 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。 + * 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。 + * + * @param inFilterField (In-list)指定的字段(Java成员字段,而非数据列名)。 + * @param inFilterValues inFilterField指定字段的(In-list)数据列表。 + * @param filter 主表过滤对象。 + * @param orderBy 排序对象。 + * @return 查询结果集。 + */ + @Override + public List getSysUserListWithRelation( + String inFilterField, Set inFilterValues, SysUser filter, String orderBy) { + String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, SysUser.class); + List resultList = + sysUserMapper.getSysUserList(inFilterColumn, inFilterValues, filter, orderBy); + // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。 + // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。 + int batchSize = resultList instanceof Page ? 0 : 1000; + this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), batchSize); + return resultList; + } + + /** + * 获取指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) { + return sysUserMapper.getSysUserListByRoleId(roleId, filter, orderBy); + } + + /** + * 获取不属于指定角色的用户列表。 + * + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getNotInSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) { + return sysUserMapper.getNotInSysUserListByRoleId(roleId, filter, orderBy); + } + + /** + * 获取指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { + return sysUserMapper.getSysUserListByDataPermId(dataPermId, filter, orderBy); + } + + /** + * 获取不属于指定数据权限的用户列表。 + * + * @param dataPermId 数据权限主键Id。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 + * @return 用户列表。 + */ + @Override + public List getNotInSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { + return sysUserMapper.getNotInSysUserListByDataPermId(dataPermId, filter, orderBy); + } + + /** + * 查询用户的权限资源地址列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param url url过滤条件。 + * @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermListWithDetail(Long userId, String url) { + return sysUserMapper.getSysPermListWithDetail(userId, url); + } + + /** + * 查询用户的权限字列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param permCode 权限字名称过滤条件。 + * @return 包含从用户到权限字的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysPermCodeListWithDetail(Long userId, String permCode) { + return sysUserMapper.getSysPermCodeListWithDetail(userId, permCode); + } + + /** + * 查询用户的菜单列表。同时返回详细的分配路径。 + * + * @param userId 用户Id。 + * @param menuName 菜单名称过滤条件。 + * @return 包含从用户到菜单的权限分配路径信息的查询结果列表。 + */ + @Override + public List> getSysMenuListWithDetail(Long userId, String menuName) { + return sysUserMapper.getSysMenuListWithDetail(userId, menuName); + } + + /** + * 验证用户对象关联的数据是否都合法。 + * + * @param sysUser 当前操作的对象。 + * @param originalSysUser 原有对象。 + * @param roleIds 逗号分隔的角色Id列表字符串。 + * @param dataPermIds 逗号分隔的数据权限Id列表字符串。 + * @return 验证结果。 + */ + @Override + public CallResult verifyRelatedData( + SysUser sysUser, SysUser originalSysUser, String roleIds, String dataPermIds) { + JSONObject jsonObject = new JSONObject(); + if (StringUtils.isBlank(roleIds)) { + return CallResult.error("数据验证失败,用户的角色数据不能为空!"); + } + Set roleIdSet = Arrays.stream( + roleIds.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) { + return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!"); + } + jsonObject.put("roleIdSet", roleIdSet); + if (StringUtils.isBlank(dataPermIds)) { + return CallResult.error("数据验证失败,用户的数据权限不能为空!"); + } + Set dataPermIdSet = Arrays.stream( + dataPermIds.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDataPermService.existAllPrimaryKeys(dataPermIdSet)) { + return CallResult.error("数据验证失败,存在不合法的数据权限,请刷新后重试!"); + } + jsonObject.put("dataPermIdSet", dataPermIdSet); + if (this.needToVerify(sysUser, originalSysUser, SysUser::getDeptId) + && !sysDeptService.existId(sysUser.getDeptId())) { + return CallResult.error("数据验证失败,关联的用户部门Id并不存在,请刷新后重试!"); + } + return CallResult.ok(jsonObject); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/resources/bootstrap.yml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..2a948dae --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/resources/bootstrap.yml @@ -0,0 +1,30 @@ +spring: + application: + name: upms + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: localhost:8848 + config: + server-addr: localhost:8848 + file-extension: yaml + # 共享配置文件,排序越高后,优先级越高。 + shared-configs: + - data-id: application-dev.yaml + group: DEFAULT_GROUP + refresh: true + sentinel: + eager: true + datasource: + ds1: + nacos: + server-addr: localhost:8848 + data-id: ${spring.application.name}-dev-sentinel + group-id: DEFAULT_GROUP + data-type: json + # 如果是降级服务,需要改为degrade + rule-type: flow + main: + allow-bean-definition-overriding: true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/resources/log4j2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/resources/log4j2.xml new file mode 100644 index 00000000..b5f0e766 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/src/main/resources/log4j2.xml @@ -0,0 +1,84 @@ + + + + + + + + + + ./zzlogs/upms + + ./zzlogs/upms/backup + + info + + + + + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] T:[%X{traceId}] S:[%X{sessionId}] U:[%X{userId}] [%t] ==> [%traceId] %msg%n + + + 31 + + 20M + + + + + + + localhost:9092 + 10000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/upms-service.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/upms-service.iml new file mode 100644 index 00000000..9080fe22 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms-service/upms-service.iml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms.iml new file mode 100644 index 00000000..851d7040 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/application/upms/upms.iml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/common-core.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/common-core.iml new file mode 100644 index 00000000..4bb35f7f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/common-core.iml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/pom.xml new file mode 100644 index 00000000..2449e6b5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/pom.xml @@ -0,0 +1,120 @@ + + + + com.orangeforms + common + 1.0.0 + + 4.0.0 + + common-core + 1.0.0 + common-core + jar + + + + + org.springframework.boot + spring-boot-starter-web + + + + com.google.guava + guava + + + org.apache.commons + commons-lang3 + + + commons-codec + commons-codec + + + commons-io + commons-io + + + commons-fileupload + commons-fileupload + + + joda-time + joda-time + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + org.apache.commons + commons-csv + ${common-csv.version} + + + cn.hutool + hutool-all + ${hutool.version} + + + io.jsonwebtoken + jjwt + ${jjwt.version} + + + com.alibaba + fastjson + ${fastjson.version} + + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + + cn.jimmyshi + bean-query + ${bean.query.version} + + + + org.apache.poi + poi-ooxml + ${poi-ooxml.version} + + + + mysql + mysql-connector-java + runtime + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + com.sun + jconsole + + + com.sun + tools + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatisplus.version} + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.version} + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/advice/MyControllerAdvice.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/advice/MyControllerAdvice.java new file mode 100644 index 00000000..5ee7bf0a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/advice/MyControllerAdvice.java @@ -0,0 +1,30 @@ +package com.orangeforms.common.core.advice; + +import org.springframework.beans.propertyeditors.CustomDateEditor; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.InitBinder; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Controller的环绕拦截类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@ControllerAdvice +public class MyControllerAdvice { + + /** + * 转换前端传入的日期变量参数为指定格式。 + * + * @param binder 数据绑定参数。 + */ + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor(Date.class, + new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), false)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/advice/MyExceptionHandler.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/advice/MyExceptionHandler.java new file mode 100644 index 00000000..4a6f6ec1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/advice/MyExceptionHandler.java @@ -0,0 +1,141 @@ +package com.orangeforms.common.core.advice; + +import com.orangeforms.common.core.exception.*; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.util.ContextUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.exceptions.PersistenceException; +import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.dao.PermissionDeniedDataAccessException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.concurrent.TimeoutException; + +/** + * 业务层的异常处理类,这里只是给出最通用的Exception的捕捉,今后可以根据业务需要, + * 用不同的函数,处理不同类型的异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@RestControllerAdvice("com.orangeforms") +public class MyExceptionHandler { + + /** + * 通用异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = Exception.class) + public ResponseResult exceptionHandle(Exception ex, HttpServletRequest request) { + log.error("Unhandled exception from URL [" + request.getRequestURI() + "]", ex); + ContextUtil.getHttpResponse().setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return ResponseResult.error(ErrorCodeEnum.UNHANDLED_EXCEPTION, ex.getMessage()); + } + + /** + * 无效的实体对象异常。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = InvalidDataModelException.class) + public ResponseResult invalidDataModelExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("InvalidDataModelException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.INVALID_DATA_MODEL); + } + + /** + * 无效的实体对象字段异常。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = InvalidDataFieldException.class) + public ResponseResult invalidDataFieldExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("InvalidDataFieldException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.INVALID_DATA_FIELD); + } + + /** + * 无效类字段异常。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = InvalidClassFieldException.class) + public ResponseResult invalidClassFieldExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("InvalidClassFieldException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.INVALID_CLASS_FIELD); + } + + /** + * 重复键异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = DuplicateKeyException.class) + public ResponseResult duplicateKeyExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("DuplicateKeyException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY); + } + + /** + * 数据访问失败异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = DataAccessException.class) + public ResponseResult dataAccessExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("DataAccessException exception from URL [" + request.getRequestURI() + "]", ex); + if (ex.getCause() instanceof PersistenceException + && ex.getCause().getCause() instanceof PermissionDeniedDataAccessException) { + return ResponseResult.error(ErrorCodeEnum.DATA_PERM_ACCESS_FAILED); + } + return ResponseResult.error(ErrorCodeEnum.DATA_ACCESS_FAILED); + } + + /** + * 操作不存在或已逻辑删除数据的异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = NoDataAffectException.class) + public ResponseResult noDataEffectExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("NoDataAffectException exception from URL [" + request.getRequestURI() + "]", ex); + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + + /** + * Redis缓存访问异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = RedisCacheAccessException.class) + public ResponseResult redisCacheAccessExceptionHandle(Exception ex, HttpServletRequest request) { + log.error("RedisCacheAccessException exception from URL [" + request.getRequestURI() + "]", ex); + if (ex.getCause() instanceof TimeoutException) { + return ResponseResult.error(ErrorCodeEnum.REDIS_CACHE_ACCESS_TIMEOUT); + } + return ResponseResult.error(ErrorCodeEnum.REDIS_CACHE_ACCESS_STATE_ERROR); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DeptFilterColumn.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DeptFilterColumn.java new file mode 100644 index 00000000..21bd65ec --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DeptFilterColumn.java @@ -0,0 +1,16 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记数据权限中基于DeptId进行过滤的字段。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DeptFilterColumn { + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DisableDataFilter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DisableDataFilter.java new file mode 100644 index 00000000..7ac170ae --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DisableDataFilter.java @@ -0,0 +1,17 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 作为DisableDataFilterAspect的切点。 + * 该注解仅能标记在方法上,方法内所有的查询语句,均不会被Mybatis插件进行数据过滤。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DisableDataFilter { + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DisableTenantFilter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DisableTenantFilter.java new file mode 100644 index 00000000..04ae5eac --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/DisableTenantFilter.java @@ -0,0 +1,28 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 仅用于微服务的多租户项目。 + * 用于注解DAO层Mapper对象的租户过滤规则。被包含的方法将不会进行租户Id的过滤。 + * 对于tk mapper和mybatis plus中的内置方法,可以直接指定方法名即可,如:selectOne。 + * 需要说明的是,在大多数场景下,只要在实体对象中指定了租户Id字段,基于该主表的绝大部分增删改操作, + * 都需要经过租户Id过滤,仅当查询非常复杂,或者主表不在SQL语句之中的时候,可以通过该注解禁用该SQL, + * 并根据需求通过手动的方式实现租户过滤。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DisableTenantFilter { + + /** + * 包含的方法名称数组。该值不能为空,因为如想取消所有方法的租户过滤, + * 可以通过在实体对象中不指定租户Id字段注解的方式实现。 + * + * @return 被包括的方法名称数组。 + */ + String[] includeMethodName(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/EnableDataPerm.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/EnableDataPerm.java new file mode 100644 index 00000000..b7f4d028 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/EnableDataPerm.java @@ -0,0 +1,27 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 用于注解DAO层Mapper对象的数据权限规则。 + * 由于框架使用了tk.mapper,所以并非所有的Mapper接口均在当前Mapper对象中定义,有一部分被tk.mapper封装,如selectAll等。 + * 如果需要排除tk.mapper中的方法,可以直接使用tk.mapper基类所声明的方法名称即可。 + * 另外,比较特殊的场景是,因为tk.mapper是通用框架,所以同样的selectAll方法,可以获取不同的数据集合,因此在service中如果 + * 出现两个不同的方法调用Mapper的selectAll方法,但是一个需要参与过滤,另外一个不需要参与,那么就需要修改当前类的Mapper方法, + * 将其中一个方法重新定义一个具体的接口方法,并重新设定其是否参与数据过滤。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EnableDataPerm { + + /** + * 排除的方法名称数组。如果为空,所有的方法均会被Mybaits拦截注入权限过滤条件。 + * + * @return 被排序的方法名称数据。 + */ + String[] excluseMethodName() default {}; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/JobUpdateTimeColumn.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/JobUpdateTimeColumn.java new file mode 100644 index 00000000..8da019b4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/JobUpdateTimeColumn.java @@ -0,0 +1,16 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记Job实体对象的更新时间字段。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface JobUpdateTimeColumn { + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyDataSource.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyDataSource.java new file mode 100644 index 00000000..b367a881 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyDataSource.java @@ -0,0 +1,21 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记Service所依赖的数据源类型。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface MyDataSource { + + /** + * 标注的数据源类型 + * @return 当前标注的数据源类型。 + */ + int value(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyDataSourceResolver.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyDataSourceResolver.java new file mode 100644 index 00000000..9e72f880 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyDataSourceResolver.java @@ -0,0 +1,29 @@ +package com.orangeforms.common.core.annotation; + +import com.orangeforms.common.core.util.DataSourceResolver; + +import java.lang.annotation.*; + +/** + * 基于自定义解析规则的多数据源注解。主要用于标注Service的实现类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface MyDataSourceResolver { + + /** + * 多数据源路由键解析接口的Class。 + * @return 多数据源路由键解析接口的Class。 + */ + Class resolver(); + + /** + * DataSourceResolver.resovle方法的入参。 + * @return DataSourceResolver.resovle方法的入参。 + */ + String arg() default ""; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyRequestBody.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyRequestBody.java new file mode 100644 index 00000000..cfda3ab4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/MyRequestBody.java @@ -0,0 +1,31 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 标记Controller中的方法参数,参数解析器会根据该注解将请求中的JSON数据,映射到参数中的绑定字段。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface MyRequestBody { + + /** + * 是否必须出现的参数。 + */ + boolean required() default false; + /** + * 解析时用到的JSON的key。 + */ + String value() default ""; + /** + * 集合元素的ClassType。只有在接口参数为List的时候,需要把E的class传入。 + * 缺省值Class.class表示没有设置。 + */ + Class elementType() default Class.class; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/NoAuthInterface.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/NoAuthInterface.java new file mode 100644 index 00000000..cb1ec0ab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/NoAuthInterface.java @@ -0,0 +1,15 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记无需Token验证的接口 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface NoAuthInterface { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationConstDict.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationConstDict.java new file mode 100644 index 00000000..42054fd0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationConstDict.java @@ -0,0 +1,29 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 标识Model和常量字典之间的关联关系。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationConstDict { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联的常量字典的Class对象。 + * + * @return 关联的常量字典的Class对象。 + */ + Class constantDictClass(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationDict.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationDict.java new file mode 100644 index 00000000..467970b4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationDict.java @@ -0,0 +1,77 @@ +package com.orangeforms.common.core.annotation; + +import com.orangeforms.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 标识Model之间的字典关联关系。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationDict { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联Model对象的关联Name字段名称。 + * + * @return 被关联Model对象的关联Name字段名称。 + */ + String slaveNameField(); + + /** + * 被关联的远程调用对象的Class对象。 + * + * @return 被关联远程调用对象的Class对象。 + */ + Class slaveClientClass() default DummyClass.class; + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 在同一个实体对象中,如果有一对一关联和字典关联,都是基于相同的主表字段,并关联到 + * 相同关联表的同一关联字段时,可以在字典关联的注解中引用被一对一注解标准的对象属性。 + * 从而在数据整合时,当前字典的数据可以直接取自"equalOneToOneRelationField"指定 + * 的字段,从而避免一次没必要的数据库查询操作,提升了加载显示的效率。 + * + * @return 与该字典字段引用关系完全相同的一对一关联属性名称。 + */ + String equalOneToOneRelationField() default ""; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationManyToMany.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationManyToMany.java new file mode 100644 index 00000000..9b17165e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationManyToMany.java @@ -0,0 +1,38 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 标注多对多的Model关系。 + * 重要提示:由于多对多关联表数据,很多时候都不需要跟随主表数据返回,所以该注解不会在 + * 生成的时候自动添加到实体类字段上,需要的时候,用户可自行手动添加。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationManyToMany { + + /** + * 多对多中间表的Mapper对象名称。 + * + * @return 被关联的本地Service对象名称。 + */ + String relationMapperName(); + + /** + * 多对多关联表Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class relationModelClass(); + + /** + * 多对多关联表Model对象中与主表关联的Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String relationMasterIdField(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationManyToManyAggregation.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationManyToManyAggregation.java new file mode 100644 index 00000000..4b8529fb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationManyToManyAggregation.java @@ -0,0 +1,102 @@ +package com.orangeforms.common.core.annotation; + +import com.orangeforms.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 主要用于多对多的Model关系。标注通过从表关联字段或者关联表关联字段计算主表聚合计算字段的规则。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationManyToManyAggregation { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 多对多从表Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 多对多从表Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联远程调用对象的Class对象。如果为DummyClass.class,通常表示是本地关联。 + * + * @return 被关联远程调用对象的Class对象。 + */ + Class slaveClientClass() default DummyClass.class; + + /** + * 多对多关联表Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class relationModelClass(); + + /** + * 多对多关联表Model对象中与主表关联的Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String relationMasterIdField(); + + /** + * 多对多关联表Model对象中与从表关联的Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String relationSlaveIdField(); + + /** + * 聚合计算所在的Model。 + * + * @return 聚合计算所在Model的Class。 + */ + Class aggregationModelClass(); + + /** + * 聚合类型。具体数值参考AggregationType对象。 + * + * @return 聚合类型。 + */ + int aggregationType(); + + /** + * 聚合计算所在Model的字段名称。 + * + * @return 聚合计算所在Model的字段名称。 + */ + String aggregationField(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToMany.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToMany.java new file mode 100644 index 00000000..c2279cdc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToMany.java @@ -0,0 +1,53 @@ +package com.orangeforms.common.core.annotation; + +import com.orangeforms.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 标识Model之间的一对多关联关系。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationOneToMany { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToManyAggregation.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToManyAggregation.java new file mode 100644 index 00000000..707e979a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToManyAggregation.java @@ -0,0 +1,74 @@ +package com.orangeforms.common.core.annotation; + +import com.orangeforms.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 主要用于一对多的Model关系。标注通过从表关联字段计算主表聚合计算字段的规则。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationOneToManyAggregation { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联远程调用对象的Class对象。如果为DummyClass.class,通常表示是本地关联。 + * + * @return 被关联远程调用对象的Class对象。 + */ + Class slaveClientClass() default DummyClass.class; + + /** + * 被关联Model对象中参与计算的聚合类型。具体数值参考AggregationType对象。 + * + * @return 被关联Model对象中参与计算的聚合类型。 + */ + int aggregationType(); + + /** + * 被关联Model对象中参与聚合计算的字段名称。 + * + * @return 被关联Model对象中参与计算字段的名称。 + */ + String aggregationField(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToOne.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToOne.java new file mode 100644 index 00000000..b8cadc33 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/RelationOneToOne.java @@ -0,0 +1,67 @@ +package com.orangeforms.common.core.annotation; + +import com.orangeforms.common.core.object.DummyClass; + +import java.lang.annotation.*; + +/** + * 标识Model之间的一对一关联关系。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationOneToOne { + + /** + * 当前对象的关联Id字段名称。 + * + * @return 当前对象的关联Id字段名称。 + */ + String masterIdField(); + + /** + * 被关联Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class slaveModelClass(); + + /** + * 被关联Model对象的关联Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String slaveIdField(); + + /** + * 被关联远程调用对象的Class对象。 + * + * @return 被关联远程调用对象的Class对象。 + */ + Class slaveClientClass() default DummyClass.class; + + /** + * 被关联的本地Service对象名称。 + * 该参数的优先级高于 slaveService(),如果定义了该值,会优先使用加载service的bean对象。 + * + * @return 被关联的本地Service对象名称。 + */ + String slaveServiceName() default ""; + + /** + * 被关联的本地Service对象CLass类型。 + * + * @return 被关联的本地Service对象CLass类型。 + */ + Class slaveServiceClass() default DummyClass.class; + + /** + * 在一对一关联时,是否加载从表的字典关联。 + * + * @return 是否加载从表的字典关联。true关联,false则只返回从表自身数据。 + */ + boolean loadSlaveDict() default true; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/TenantFilterColumn.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/TenantFilterColumn.java new file mode 100644 index 00000000..c198c836 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/TenantFilterColumn.java @@ -0,0 +1,16 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记通过租户Id进行过滤的字段。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface TenantFilterColumn { + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/UploadFlagColumn.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/UploadFlagColumn.java new file mode 100644 index 00000000..e708dd44 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/UploadFlagColumn.java @@ -0,0 +1,24 @@ +package com.orangeforms.common.core.annotation; + +import com.orangeforms.common.core.upload.UploadStoreTypeEnum; + +import java.lang.annotation.*; + +/** + * 用于标记支持数据上传和下载的字段。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface UploadFlagColumn { + + /** + * 上传数据存储类型。 + * + * @return 上传数据存储类型。 + */ + UploadStoreTypeEnum storeType(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/UserFilterColumn.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/UserFilterColumn.java new file mode 100644 index 00000000..db31ad08 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/annotation/UserFilterColumn.java @@ -0,0 +1,16 @@ +package com.orangeforms.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 主要用于标记数据权限中基于UserId进行过滤的字段。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface UserFilterColumn { + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DataSourceAspect.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DataSourceAspect.java new file mode 100644 index 00000000..4c48bf02 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DataSourceAspect.java @@ -0,0 +1,48 @@ +package com.orangeforms.common.core.aop; + +import com.orangeforms.common.core.annotation.MyDataSource; +import com.orangeforms.common.core.config.DataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * 多数据源AOP切面处理类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class DataSourceAspect { + + /** + * 所有配置MyDataSource注解的Service实现类。 + */ + @Pointcut("execution(public * com.orangeforms..service..*(..)) " + + "&& @target(com.orangeforms.common.core.annotation.MyDataSource)") + public void datasourcePointCut() { + // 空注释,避免sonar警告 + } + + @Around("datasourcePointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + Class clazz = point.getTarget().getClass(); + MyDataSource ds = clazz.getAnnotation(MyDataSource.class); + // 通过判断 DataSource 中的值来判断当前方法应用哪个数据源 + Integer originalType = DataSourceContextHolder.setDataSourceType(ds.value()); + log.debug("set datasource is " + ds.value()); + try { + return point.proceed(); + } finally { + DataSourceContextHolder.unset(originalType); + log.debug("unset datasource is " + originalType); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DataSourceResolveAspect.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DataSourceResolveAspect.java new file mode 100644 index 00000000..0d25c7e2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DataSourceResolveAspect.java @@ -0,0 +1,62 @@ +package com.orangeforms.common.core.aop; + +import com.orangeforms.common.core.annotation.MyDataSourceResolver; +import com.orangeforms.common.core.util.DataSourceResolver; +import com.orangeforms.common.core.config.DataSourceContextHolder; +import com.orangeforms.common.core.util.ApplicationContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * 基于自定义解析规则的多数据源AOP切面处理类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class DataSourceResolveAspect { + + private final Map, DataSourceResolver> resolverMap = new HashMap<>(); + + /** + * 所有配置MyDataSourceResovler注解的Service实现类。 + */ + @Pointcut("execution(public * com.orangeforms..service..*(..)) " + + "&& @target(com.orangeforms.common.core.annotation.MyDataSourceResolver)") + public void datasourceResolverPointCut() { + // 空注释,避免sonar警告 + } + + @Around("datasourceResolverPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + Class clazz = point.getTarget().getClass(); + MyDataSourceResolver dsr = clazz.getAnnotation(MyDataSourceResolver.class); + Class resolverClass = dsr.resolver(); + DataSourceResolver resolver = resolverMap.get(resolverClass); + if (resolver == null) { + resolver = ApplicationContextHolder.getBean(resolverClass); + resolverMap.put(resolverClass, resolver); + } + int type = resolver.resolve(dsr.arg(), point.getArgs()); + // 通过判断 DataSource 中的值来判断当前方法应用哪个数据源 + Integer originalType = DataSourceContextHolder.setDataSourceType(type); + log.debug("set datasource is " + type); + try { + return point.proceed(); + } finally { + DataSourceContextHolder.unset(originalType); + log.debug("unset datasource is " + originalType); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DictCacheSyncAspect.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DictCacheSyncAspect.java new file mode 100644 index 00000000..b6afaa12 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/aop/DictCacheSyncAspect.java @@ -0,0 +1,64 @@ +package com.orangeforms.common.core.aop; + +import com.orangeforms.common.core.base.service.BaseDictService; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.io.Serializable; + +/** + * 字典缓存同步的AOP。该AOP的优先级必须比事务切面的优先级高,因此会在事务外执行该切面的代码。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Aspect +@Component +@Order(Ordered.LOWEST_PRECEDENCE - 1) +@Slf4j +public class DictCacheSyncAspect { + + /** + * BaseDictService 字典服务父类中的字典数据增删改的方法。 + */ + @Pointcut("execution(public * com.orangeforms..BaseDictService.saveNew (..)) " + + "|| execution(public * com.orangeforms..BaseDictService.update (..)) " + + "|| execution(public * com.orangeforms..BaseDictService.remove (..))" ) + public void baseDictServicePointCut() { + // 空注释,避免sonar警告 + } + + @SuppressWarnings("unchecked") + @Around("baseDictServicePointCut()") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + String methodName = joinPoint.getSignature().getName(); + Object arg = joinPoint.getArgs()[0]; + if ("saveNew".equals(methodName)) { + Object data = joinPoint.proceed(); + BaseDictService service = + (BaseDictService) joinPoint.getTarget(); + // 这里参数必须使用saveNew方法的返回对象,因为里面包含实际主键值。 + service.putDictionaryCache(data); + return data; + } else if ("update".equals(methodName)) { + Object data = joinPoint.proceed(); + BaseDictService service = + (BaseDictService) joinPoint.getTarget(); + // update的方法返回的是boolean,因此这里的参数需要使用第一个参数即可。 + service.putDictionaryCache(arg); + return data; + } else { + // remove + BaseDictService service = + (BaseDictService) joinPoint.getTarget(); + service.removeDictionaryCache((Serializable) arg); + return joinPoint.proceed(); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/client/BaseClient.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/client/BaseClient.java new file mode 100644 index 00000000..5d5c1958 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/client/BaseClient.java @@ -0,0 +1,176 @@ +package com.orangeforms.common.core.base.client; + +import com.orangeforms.common.core.object.*; + +import java.util.*; + +/** + * 远程调用接口。 + * + * @param 主DomainDto域数据对象类型。 + * @param 主DomainVo域数据对象类型。 + * @param 主键类型。 + * @author Jerry + * @date 2020-08-08 + */ +public interface BaseClient { + + /** + * 基于主键的(in list)获取远程数据接口。 + * + * @param filterIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象集合。 + */ + ResponseResult> listByIds(Set filterIds, Boolean withDict); + + /** + * 基于主键Id,获取远程对象。 + * + * @param id 主键Id。 + * @param withDict 是否包含字典关联。 + * @return 应答结果对象,包含主对象数据。 + */ + ResponseResult getById(K id, Boolean withDict); + + /** + * 判断参数列表中指定的主键Id,是否全部存在。 + * + * @param filterIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + ResponseResult existIds(Set filterIds); + + /** + * 给定主键Id是否存在。 + * + * @param id 主键Id。 + * @return 应答结果对象,包含true表示存在,否则false。 + */ + ResponseResult existId(K id); + + /** + * 保存或更新数据。 + * + * @param data 主键Id为null时表示新增数据,否则更新数据。 + * @return 应答结果对象,主键Id。 + */ + default ResponseResult saveNewOrUpdate(D data) { + throw new UnsupportedOperationException(); + } + + /** + * 批量新增或保存数据列表。 + * + * @param dataList 数据列表。主键Id为null时表示新增数据,否则更新数据。 + * @return 应答结果对象。 + */ + default ResponseResult saveNewOrUpdateBatch(List dataList) { + throw new UnsupportedOperationException(); + } + + /** + * 验证指定数据的关联Id数据是否存合法。 + * + * @param data 数据对象。 + * @return 应答结果对象。 + */ + default ResponseResult verifyRelatedData(D data) { + throw new UnsupportedOperationException(); + } + + /** + * 验证指定数据列表的关联Id数据是否存合法。 + * + * @param dataList 数据对象列表。 + * @return 应答结果对象。 + */ + default ResponseResult verifyRelatedDataList(List dataList) { + throw new UnsupportedOperationException(); + } + + /** + * 删除主键Id关联的对象。 + * + * @param id 主键Id。 + * @return 应答结果对象。 + */ + default ResponseResult deleteById(K id) { + throw new UnsupportedOperationException(); + } + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 应答结果对象,包含删除数量。 + */ + default ResponseResult deleteBy(D filter) { + throw new UnsupportedOperationException(); + } + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * 缺省实现是因为字典类型的远程调用客户端中,不需要实现该方法,因此尽早抛出异常,用户可自行修改。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + default ResponseResult> listBy(MyQueryParam queryParam) { + throw new UnsupportedOperationException(); + } + + /** + * 获取远程主对象中符合查询条件的单条数据对象。 + * 缺省实现是因为字典类型的远程调用客户端中,不需要实现该方法,因此尽早抛出异常,用户可自行修改。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含主对象集合。 + */ + default ResponseResult getBy(MyQueryParam queryParam) { + throw new UnsupportedOperationException(); + } + + /** + * 获取远程主对象中符合查询条件的数据列表。 + * 缺省实现是因为字典类型的远程调用客户端中,不需要实现该方法,因此尽早抛出异常,用户可自行修改。 + * + * @param queryParam 查询参数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + default ResponseResult>> listMapBy(MyQueryParam queryParam) { + throw new UnsupportedOperationException(); + } + + /** + * 获取远程主对象中符合查询条件的数据数量。 + * 缺省实现是因为字典类型的远程调用客户端中,不需要实现该方法,因此尽早抛出异常,用户可自行修改。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含结果数量。 + */ + default ResponseResult countBy(MyQueryParam queryParam) { + throw new UnsupportedOperationException(); + } + + /** + * 获取远程主对象中符合过滤条件的分组聚合数据。 + * 缺省实现是因为字典类型的远程调用客户端中,不需要实现该方法,因此尽早抛出异常,用户可自行修改。 + * + * @param aggregationParam 聚合参数。 + * @return 应答结果对象,包含聚合计算后的数据列表。 + */ + default ResponseResult>> aggregateBy(MyAggregationParam aggregationParam) { + throw new UnsupportedOperationException(); + } + + /** + * 根据主键Id及其列表数据(not in list)进行过滤,返回给定的数据。返回的对象数据中,仅仅包含实体对象自己的数据,以及配置的字典关联数据。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含分页查询数据列表。 + */ + default ResponseResult> listByNotInList(MyQueryParam queryParam) { + throw new UnsupportedOperationException(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/client/BaseFallbackFactory.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/client/BaseFallbackFactory.java new file mode 100644 index 00000000..79905108 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/client/BaseFallbackFactory.java @@ -0,0 +1,103 @@ +package com.orangeforms.common.core.base.client; + +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.*; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; + +/** + * FeignClient 熔断降级处理对象。 + * + * @param 主DomainDto域数据对象类型。 + * @param 主DomainVo域数据对象类型。 + * @param 主键类型。 + * @param Feign客户端对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public abstract class BaseFallbackFactory> + implements FallbackFactory, BaseClient { + + @Override + public ResponseResult> listByIds(Set idSet, Boolean withDict) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult getById(K id, Boolean withDict) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult existIds(Set idSet) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult existId(K id) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult saveNewOrUpdate(D data) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult saveNewOrUpdateBatch(List dataList) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult verifyRelatedData(D data) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult verifyRelatedDataList(List dataList) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult deleteById(K id) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult deleteBy(D filter) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult> listBy(MyQueryParam queryParam) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult getBy(MyQueryParam queryParam) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult>> listMapBy(MyQueryParam queryParam) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult countBy(MyQueryParam queryParam) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult>> aggregateBy(MyAggregationParam aggregationParam) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } + + @Override + public ResponseResult> listByNotInList(MyQueryParam queryParam) { + return ResponseResult.error(ErrorCodeEnum.RPC_DATA_ACCESS_FAILED); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/controller/BaseController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/controller/BaseController.java new file mode 100644 index 00000000..74ffd2bb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/controller/BaseController.java @@ -0,0 +1,473 @@ +package com.orangeforms.common.core.base.controller; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.core.constant.AggregationKind; +import com.orangeforms.common.core.constant.AggregationType; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.exception.RemoteDataBuildException; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.util.MyModelUtil; +import com.github.pagehelper.Page; +import com.github.pagehelper.page.PageMethod; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 控制器Controller的基类。 + * + * @param 主Model实体对象类型。 + * @param 主Model的DomainVO域对象类型。 + * @param 主键类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public abstract class BaseController { + + /** + * 当前Service关联的主Model实体对象的Class。 + */ + private final Class modelClass; + /** + * 当前Service关联的主model的VO对象的Class。 + */ + private final Class domainVoClass; + /** + * 当前Service关联的主Model对象主键字段名称。 + */ + private String idFieldName; + + /** + * 获取子类中注入的IBaseService接口。 + * + * @return 子类中注入的BaseService类。 + */ + protected abstract IBaseService service(); + + /** + * 构造函数。 + */ + @SuppressWarnings("unchecked") + public BaseController() { + modelClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + domainVoClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field field : fields) { + if (null != field.getAnnotation(TableId.class)) { + idFieldName = field.getName(); + break; + } + } + } + + /** + * 根据主键Id集合,获取数据对象集合。仅限于微服务间远程接口调用。 + * + * @param filterIds 主键Id集合。 + * @param withDict 是否包含字典关联。 + * @param modelMapper 对象映射函数对象。如果为空,则使用MyModelUtil中的缺省转换函数。 + * @return 应答结果对象,包含主对象集合。 + * @throws RemoteDataBuildException buildRelationForDataList会抛出该异常。 + */ + public ResponseResult> baseListByIds( + Set filterIds, Boolean withDict, BaseModelMapper modelMapper) { + if (MyCommonUtil.existBlankArgument(filterIds, withDict)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + List resultList = service().getInList(idFieldName, filterIds); + List resultVoList = null; + if (CollectionUtils.isEmpty(resultList)) { + return ResponseResult.success(resultVoList); + } + if (Boolean.TRUE.equals(withDict)) { + service().buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + } + resultVoList = convertToVoList(resultList, modelMapper); + return ResponseResult.success(resultVoList); + } + + /** + * 根据主键Id,获取数据对象。仅限于微服务间远程接口调用。 + * + * @param id 主键Id。 + * @param withDict 是否包含字典关联。 + * @param modelMapper 对象映射函数对象。如果为空,则使用MyModelUtil中的缺省转换函数。 + * @return 应答结果对象,包含主对象数据。 + * @throws RemoteDataBuildException buildRelationForData会抛出此异常。 + */ + public ResponseResult baseGetById(K id, Boolean withDict, BaseModelMapper modelMapper) { + if (MyCommonUtil.existBlankArgument(id, withDict)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + M resultObject = service().getById(id); + V resultVoObject = null; + if (resultObject == null) { + return ResponseResult.success(resultVoObject); + } + if (Boolean.TRUE.equals(withDict)) { + service().buildRelationForData(resultObject, MyRelationParam.dictOnly()); + } + resultVoObject = this.convertToVo(resultObject, modelMapper); + return ResponseResult.success(resultVoObject); + } + + /** + * 判断参数列表中指定的主键Id集合,是否全部存在。仅限于微服务间远程接口调用。 + * + * @param filterIds 主键Id集合。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + public ResponseResult baseExistIds(Set filterIds) { + return ResponseResult.success(CollectionUtils.isNotEmpty(filterIds) + && service().existUniqueKeyList(idFieldName, filterIds)); + } + + /** + * 判断参数列表中指定的主键Id集合,是否全部存在。仅限于微服务间远程接口调用。 + * + * @param id 主键Id。 + * @return 应答结果对象,包含true全部存在,否则false。 + */ + public ResponseResult baseExistId(K id) { + return ResponseResult.success( + !MyCommonUtil.existBlankArgument(id) && service().getById(id) != null); + } + + /** + * 根据最新对象列表和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。仅限于微服务间远程接口调用。 + * + * @param data 数据对象。 + * 主键有值是视为更新操作的数据比对,因此仅当关联Id变化时才会验证。 + * 主键为空视为新增操作的数据比对,所有关联Id都会被验证。 + * @param idGetter 获取主键值的函数对象。 + * @return 应答结果对象。 + */ + public ResponseResult baseVerifyRelatedData(M data, Function idGetter) { + CallResult result; + K id = idGetter.apply(data); + if (id == null) { + result = service().verifyRelatedData(data, null); + } else { + M originalData = service().getById(id); + if (originalData == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + result = service().verifyRelatedData(data, originalData); + } + return !result.isSuccess() ? ResponseResult.errorFrom(result) : ResponseResult.success(); + } + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * + * @param dataList 数据对象列表。 + * @param idGetter 获取主键值的函数对象。 + * @return 应答结果对象。 + */ + public ResponseResult baseVerifyRelatedDataList(List dataList, Function idGetter) { + if (CollUtil.isEmpty(dataList)) { + return ResponseResult.success(); + } + // 1. 先过滤出数据列表中的主键Id集合。 + Set idList = dataList.stream() + .filter(c -> idGetter.apply(c) != null).map(idGetter).collect(Collectors.toSet()); + // 2. 列表中,我们目前仅支持全部是更新数据,或全部新增数据,不能混着。如果有主键值,说明当前全是更新数据。 + if (CollUtil.isNotEmpty(idList)) { + // 3. 这里是批量读取的优化,用一个主键值得in list查询,一步获取全部原有数据。然后再在内存中基于Map排序。 + List originalList = service().getInList(idList); + Map originalMap = originalList.stream().collect(Collectors.toMap(idGetter, c2 -> c2)); + // 迭代列表,传入当前最新数据和更新前数据进行比对,如果关联数据变化了,就对新数据进行合法性验证。 + for (M data : dataList) { + CallResult result = service().verifyRelatedData(data, originalMap.get(idGetter.apply(data))); + if (!result.isSuccess()) { + return ResponseResult.errorFrom(result); + } + } + } else { + // 4. 迭代列表,传入当前最新数据,对关联数据进行合法性验证。 + for (M model : dataList) { + CallResult result = service().verifyRelatedData(model, null); + if (!result.isSuccess()) { + return ResponseResult.errorFrom(result); + } + } + } + return ResponseResult.success(); + } + + /** + * 删除符合过滤条件的数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + public ResponseResult baseDeleteBy(M filter) throws Exception { + return ResponseResult.success(service().removeBy(filter)); + } + + /** + * 自定义过滤条件、显示字段和排序字段的单表查询。主要用于微服务间远程过程调用。 + * NOTE: 和baseListMapBy方法的差别只是返回的数据形式不同,该接口以对象列表的形式返回数据。 + * + * @param queryParam 查询参数。 + * @param modelMapper 对象映射函数对象。如果为空,则使用MyModelUtil中的缺省转换函数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + * @throws RemoteDataBuildException buildRelationForDataList会抛出此异常。 + */ + public ResponseResult> baseListBy(MyQueryParam queryParam, BaseModelMapper modelMapper) { + boolean dataFilterEnabled = GlobalThreadLocal.setDataFilter(queryParam.getUseDataFilter()); + if (CollectionUtils.isNotEmpty(queryParam.getSelectFieldList())) { + for (String fieldName : queryParam.getSelectFieldList()) { + String columnName = MyModelUtil.mapToColumnName(fieldName, modelClass); + if (columnName == null) { + String errorMessage = "数据验证失败,实体对象 [" + + modelClass.getSimpleName() + "] 中不存在字段 [" + fieldName + "]!"; + return ResponseResult.error(ErrorCodeEnum.INVALID_DATA_FIELD, errorMessage); + } + } + } + M filter = queryParam.getFilterDto(modelClass); + String whereClause = MyWhereCriteria.makeCriteriaString(queryParam.getCriteriaList(), modelClass); + String orderBy = MyOrderParam.buildOrderBy(queryParam.getOrderParam(), modelClass); + MyPageParam pageParam = queryParam.getPageParam(); + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List resultList = service().getListByCondition( + queryParam.getSelectFieldList(), filter, whereClause, orderBy); + if (CollectionUtils.isEmpty(resultList)) { + return ResponseResult.success(MyPageData.emptyPageData()); + } + long totalCount; + if (resultList instanceof Page) { + totalCount = ((Page) resultList).getTotal(); + } else { + totalCount = resultList.size(); + } + if (queryParam.getWithDict()) { + service().buildRelationForDataList(resultList, MyRelationParam.dictOnly()); + } + List resultVoList = convertToVoList(resultList, modelMapper); + GlobalThreadLocal.setDataFilter(dataFilterEnabled); + return ResponseResult.success(new MyPageData<>(resultVoList, totalCount)); + } + + /** + * 自定义过滤条件、显示字段和排序字段的单表查询。主要用于微服务间远程过程调用。 + * NOTE: 和baseListBy方法的差别只是返回的数据形式不同,该接口以Map列表的形式返回数据。 + * + * @param queryParam 查询参数。 + * @param modelMapper 对象映射函数对象。如果为空,则使用MyModelUtil中的缺省转换函数。 + * @return 分页数据集合对象。如MyQueryParam参数的分页属性为空,则不会执行分页操作,只是基于MyPageData对象返回数据结果。 + */ + public ResponseResult>> baseListMapBy( + MyQueryParam queryParam, BaseModelMapper modelMapper) { + ResponseResult> result = this.baseListBy(queryParam, modelMapper); + if (!result.isSuccess()) { + return ResponseResult.errorFrom(result); + } + List> resultMapList = + result.getData().getDataList().stream().map(BeanUtil::beanToMap).collect(Collectors.toList()); + return ResponseResult.success(new MyPageData<>(resultMapList, result.getData().getTotalCount())); + } + + /** + * 自定义过滤条件、显示字段,并返回单条记录。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @param modelMapper 对象映射函数对象。如果为空,则使用MyModelUtil中的缺省转换函数。 + * @return 应答结果对象,包含符合查询过滤条件的单条实体对象。 + */ + public ResponseResult baseGetBy(MyQueryParam queryParam, BaseModelMapper modelMapper) { + ResponseResult> result = baseListBy(queryParam, modelMapper); + if (!result.isSuccess()) { + return ResponseResult.errorFrom(result); + } + List dataList = result.getData().getDataList(); + V data = null; + if (CollectionUtils.isNotEmpty(dataList)) { + data = dataList.get(0); + } + return ResponseResult.success(data); + } + + /** + * 自定义过滤条件的记录数量统计。主要用于微服务间远程过程调用。 + * + * @param queryParam 查询参数。 + * @return 应答结果对象,包含符合查询过滤条件的记录数量。 + */ + public ResponseResult baseCountBy(MyQueryParam queryParam) { + boolean dataFilterEnabled = GlobalThreadLocal.setDataFilter(queryParam.getUseDataFilter()); + String whereClause = MyWhereCriteria.makeCriteriaString(queryParam.getCriteriaList(), modelClass); + Integer count = service().getCountByCondition(whereClause); + GlobalThreadLocal.setDataFilter(dataFilterEnabled); + return ResponseResult.success(count); + } + + /** + * 获取远程对象中符合查询条件的分组聚合计算Map列表。 + * + * @param param 聚合参数。 + * @return 应该结果对象,包含聚合计算后的分组Map列表。 + */ + public ResponseResult>> baseAggregateBy(MyAggregationParam param) { + boolean dataFilterEnabled = GlobalThreadLocal.setDataFilter(param.getUseDataFilter()); + // 完成一些共同性规则的验证。 + VerifyAggregationInfo verifyInfo = this.verifyAndParseAggregationParam(param); + if (!verifyInfo.isSuccess) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, verifyInfo.errorMsg); + } + // 构建SelectList + StringBuilder selectList = new StringBuilder(64); + // 一对多场景相对比较简单,直接基于从表的关联键进行group,同时对聚合字段进行聚合计算即可。 + // SQL返回的数据,可直接返回给调用端服务。 + if (param.getAggregationKind() == AggregationKind.ONE_TO_MANY) { + selectList.append(verifyInfo.groupColumn).append(" ").append(MyAggregationParam.KEY_NAME).append(", "); + } + selectList.append(AggregationType.getAggregationFunction(verifyInfo.aggregationType)) + .append("(") + .append(verifyInfo.aggregationColumn) + .append(") ") + .append(MyAggregationParam.VALUE_NAME); + String whereClause = MyWhereCriteria.makeCriteriaString(param.getWhereCriteriaList(), modelClass); + List> resultMapList = null; + // 一对多场景直接返回分组查询计算结果即可。 + if (param.getAggregationKind() == AggregationKind.ONE_TO_MANY) { + resultMapList = service().getGroupedListByCondition( + selectList.toString(), whereClause, verifyInfo.groupColumn); + } else if (param.getAggregationKind() == AggregationKind.MANY_TO_MANY) { + boolean stringKey = true; + if (param.getGroupedInFilterValues().entrySet().iterator().next().getKey() instanceof Number) { + stringKey = false; + } + resultMapList = new LinkedList<>(); + // 迭代分组map,通过多次查询的方式进行数据分组。通过该方式可以避免多次rpc调用,以提升性能。 + for (Map.Entry> entry : param.getGroupedInFilterValues().entrySet()) { + StringBuilder groupedSelectList = new StringBuilder(64); + if (stringKey) { + groupedSelectList.append("'").append(entry.getKey()).append("' "); + } else { + groupedSelectList.append(entry.getKey()).append(" "); + } + groupedSelectList.append(MyAggregationParam.KEY_NAME).append(", ").append(selectList); + MyWhereCriteria criteria = new MyWhereCriteria(); + criteria.setModelClazz(modelClass); + criteria.setCriteria(param.getInFilterField(), MyWhereCriteria.OPERATOR_IN, entry.getValue()); + StringBuilder groupedClause = new StringBuilder(128); + groupedClause.append(criteria.makeCriteriaString()); + if (StringUtils.isNotBlank(whereClause)) { + groupedClause.append(" AND ").append(whereClause); + } + List> subResultMapList = service().getGroupedListByCondition( + groupedSelectList.toString(), groupedClause.toString(), null); + resultMapList.addAll(subResultMapList); + } + } + GlobalThreadLocal.setDataFilter(dataFilterEnabled); + return ResponseResult.success(resultMapList); + } + + /** + * 将Model实体对象的集合转换为DomainVO域对象的集合。 + * 如果Model存在该实体的ModelMapper,就用该ModelMapper转换,否则使用缺省的基于字段反射的copy。 + * + * @param modelList 实体对象列表。 + * @param modelMapper 从实体对象到VO对象的映射对象。 + * @return 转换后的VO域对象列表。 + */ + protected List convertToVoList(List modelList, BaseModelMapper modelMapper) { + List resultVoList; + if (modelMapper != null) { + resultVoList = modelMapper.fromModelList(modelList); + } else { + resultVoList = MyModelUtil.copyCollectionTo(modelList, domainVoClass); + } + return resultVoList; + } + + /** + * 将Model实体对象转换为DomainVO域对象。 + * 如果Model存在该实体的ModelMapper,就用该ModelMapper转换,否则使用缺省的基于字段反射的copy。 + * + * @param model 实体对象。 + * @param modelMapper 从实体对象到VO对象的映射对象。 + * @return 转换后的VO域对象。 + */ + protected V convertToVo(M model, BaseModelMapper modelMapper) { + V resultVo; + if (modelMapper != null) { + resultVo = modelMapper.fromModel(model); + } else { + resultVo = MyModelUtil.copyTo(model, domainVoClass); + } + return resultVo; + } + + private VerifyAggregationInfo verifyAndParseAggregationParam(MyAggregationParam param) { + VerifyAggregationInfo verifyInfo = new VerifyAggregationInfo(); + if (!AggregationKind.isValid(param.getAggregationKind())) { + verifyInfo.errorMsg = "参数验证失败,聚合类别 [MyAggregationParam.AggregationKind] 数值无效!"; + return verifyInfo; + } + Integer aggregationType = param.getAggregationType(); + if (!AggregationType.isValid(aggregationType)) { + verifyInfo.errorMsg = "参数验证失败,聚合类型 [MyAggregationParam.AggregationType] 数值无效!"; + return verifyInfo; + } + String aggregationColumn = MyModelUtil.mapToColumnName(param.getAggregationField(), modelClass); + if (StringUtils.isBlank(aggregationColumn)) { + verifyInfo.errorMsg = "参数验证失败,聚合字段 [MyAggregationParam.AggregationField] 为非法值!"; + return verifyInfo; + } + // 一对多场景相对比较简单,直接基于从表的关联键进行group,同时对聚合字段进行聚合计算即可。 + // SQL返回的数据,可直接返回给调用端服务。 + if (param.getAggregationKind() == AggregationKind.ONE_TO_MANY) { + verifyInfo.groupColumn = MyModelUtil.mapToColumnName(param.getGroupField(), modelClass); + if (StringUtils.isBlank(verifyInfo.groupColumn)) { + verifyInfo.errorMsg = "参数验证失败,一对多聚合 [MyAggregationParam.GroupField] 分组字段为非法值!"; + return verifyInfo; + } + } else { + String inFilterColumn = MyModelUtil.mapToColumnName(param.getInFilterField(), modelClass); + if (StringUtils.isBlank(inFilterColumn)) { + verifyInfo.errorMsg = "参数验证失败,多对多 [MyAggregationParam.InfilterField] 过滤字段为非法值!"; + return verifyInfo; + } + if (MapUtils.isEmpty(param.getGroupedInFilterValues())) { + verifyInfo.errorMsg = "参数验证失败,多对多 [MyAggregationParam.GroupedInFilterValues] 数据集合不能为空!"; + return verifyInfo; + } + } + verifyInfo.isSuccess = true; + verifyInfo.aggregationType = aggregationType; + verifyInfo.aggregationColumn = aggregationColumn; + return verifyInfo; + } + + private static final class VerifyAggregationInfo { + private boolean isSuccess = false; + private String errorMsg; + private Integer aggregationType; + private String aggregationColumn; + private String groupColumn; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/dao/BaseDaoMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/dao/BaseDaoMapper.java new file mode 100644 index 00000000..8fa03aff --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/dao/BaseDaoMapper.java @@ -0,0 +1,87 @@ +package com.orangeforms.common.core.base.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +/** + * 数据访问对象的基类。 + * + * @param 主Model实体对象。 + * @author Jerry + * @date 2020-08-08 + */ +public interface BaseDaoMapper extends BaseMapper { + + /** + * 根据指定的表名、显示字段列表、过滤条件字符串和分组字段,返回聚合计算后的查询结果。 + * + * @param selectTable 表名称。 + * @param selectFields 返回字段列表,逗号分隔。 + * @param whereClause SQL常量形式的条件从句。 + * @param groupBy 分组字段列表,逗号分隔。 + * @return 对象可选字段Map列表。 + */ + @Select("") + List> getGroupedListByCondition( + @Param("selectTable") String selectTable, + @Param("selectFields") String selectFields, + @Param("whereClause") String whereClause, + @Param("groupBy") String groupBy); + + /** + * 根据指定的表名、显示字段列表、过滤条件字符串和排序字符串,返回查询结果。 + * + * @param selectTable 表名称。 + * @param selectFields 选择的字段列表。 + * @param whereClause 过滤字符串。 + * @param orderBy 排序字符串。 + * @return 查询结果。 + */ + @Select("") + List> getListByCondition( + @Param("selectTable") String selectTable, + @Param("selectFields") String selectFields, + @Param("whereClause") String whereClause, + @Param("orderBy") String orderBy); + + /** + * 用指定过滤条件,计算记录数量。 + * + * @param selectTable 表名称。 + * @param whereClause 过滤字符串。 + * @return 返回过滤后的数据数量。 + */ + @Select("") + int getCountByCondition(@Param("selectTable") String selectTable, @Param("whereClause") String whereClause); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/mapper/BaseModelMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/mapper/BaseModelMapper.java new file mode 100644 index 00000000..36f65509 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/mapper/BaseModelMapper.java @@ -0,0 +1,124 @@ +package com.orangeforms.common.core.base.mapper; + +import cn.hutool.core.bean.BeanUtil; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Model对象到Domain类型对象的相互转换。实现类通常声明在Model实体类中。 + * + * @param Domain域对象类型。 + * @param Model实体对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +public interface BaseModelMapper { + + /** + * 转换Model实体对象到Domain域对象。 + * + * @param model Model实体对象。 + * @return Domain域对象。 + */ + D fromModel(M model); + + /** + * 转换Model实体对象列表到Domain域对象列表。 + * + * @param modelList Model实体对象列表。 + * @return Domain域对象列表。 + */ + List fromModelList(List modelList); + + /** + * 转换Domain域对象到Model实体对象。 + * + * @param domain Domain域对象。 + * @return Model实体对象。 + */ + M toModel(D domain); + + /** + * 转换Domain域对象列表到Model实体对象列表。 + * + * @param domainList Domain域对象列表。 + * @return Model实体对象列表。 + */ + List toModelList(List domainList); + + /** + * 转换bean到map + * + * @param bean bean对象。 + * @param ignoreNullValue 值为null的字段是否转换到Map。 + * @param bean类型。 + * @return 转换后的map对象。 + */ + default Map beanToMap(T bean, boolean ignoreNullValue) { + return BeanUtil.beanToMap(bean, false, ignoreNullValue); + } + + /** + * 转换bean集合到map集合 + * + * @param dataList bean对象集合。 + * @param ignoreNullValue 值为null的字段是否转换到Map。 + * @param bean类型。 + * @return 转换后的map对象集合。 + */ + default List> beanToMap(List dataList, boolean ignoreNullValue) { + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + return dataList.stream() + .map(o -> BeanUtil.beanToMap(o, false, ignoreNullValue)) + .collect(Collectors.toList()); + } + + /** + * 转换map到bean。 + * + * @param map map对象。 + * @param beanClazz bean的Class对象。 + * @param bean类型。 + * @return 转换后的bean对象。 + */ + default T mapToBean(Map map, Class beanClazz) { + return BeanUtil.toBeanIgnoreError(map, beanClazz); + } + + /** + * 转换map集合到bean集合。 + * + * @param mapList map对象集合。 + * @param beanClazz bean的Class对象。 + * @param bean类型。 + * @return 转换后的bean对象集合。 + */ + default List mapToBean(List> mapList, Class beanClazz) { + if (CollectionUtils.isEmpty(mapList)) { + return new LinkedList<>(); + } + return mapList.stream() + .map(m -> BeanUtil.toBeanIgnoreError(m, beanClazz)) + .collect(Collectors.toList()); + } + + /** + * 对于Map字段到Map字段的映射场景,MapStruct会根据方法签名自动选择该函数 + * 作为对象copy的函数。由于该函数是直接返回的,因此没有对象copy,效率更高。 + * 如果没有该函数,MapStruct会生成如下代码: + * Map map = courseDto.getTeacherIdDictMap(); + * if ( map != null ) { + * course.setTeacherIdDictMap( new HashMap( map ) ); + * } + * + * @param map map对象。 + * @return 直接返回的map。 + */ + default Map mapToMap(Map map) { + return map; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/mapper/DummyModelMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/mapper/DummyModelMapper.java new file mode 100644 index 00000000..9d97316f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/mapper/DummyModelMapper.java @@ -0,0 +1,58 @@ +package com.orangeforms.common.core.base.mapper; + +import java.util.List; + +/** + * 哑元占位对象。Model实体对象和Domain域对象相同的场景下使用。 + * 由于没有实际的数据转换,因此同时保证了代码统一和执行效率。 + * + * @param 数据类型。 + * @author Jerry + * @date 2020-08-08 + */ +public class DummyModelMapper implements BaseModelMapper { + + /** + * 不转换直接返回。 + * + * @param model Model实体对象。 + * @return Domain域对象。 + */ + @Override + public M fromModel(M model) { + return model; + } + + /** + * 不转换直接返回。 + * + * @param modelList Model实体对象列表。 + * @return Domain域对象列表。 + */ + @Override + public List fromModelList(List modelList) { + return modelList; + } + + /** + * 不转换直接返回。 + * + * @param domain Domain域对象。 + * @return Model实体对象。 + */ + @Override + public M toModel(M domain) { + return domain; + } + + /** + * 不转换直接返回。 + * + * @param domainList Domain域对象列表。 + * @return Model实体对象列表。 + */ + @Override + public List toModelList(List domainList) { + return domainList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/model/BaseModel.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/model/BaseModel.java new file mode 100644 index 00000000..722c7cea --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/model/BaseModel.java @@ -0,0 +1,40 @@ +package com.orangeforms.common.core.base.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +import java.util.Date; + +/** + * 实体对象的公共基类,所有子类均必须包含基类定义的数据表字段和实体对象字段。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class BaseModel { + + /** + * 创建者Id。 + */ + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 创建时间。 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新者Id。 + */ + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 更新时间。 + */ + @TableField(value = "update_time") + private Date updateTime; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/BaseDictService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/BaseDictService.java new file mode 100644 index 00000000..5a455a3b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/BaseDictService.java @@ -0,0 +1,266 @@ +package com.orangeforms.common.core.base.service; + +import cn.hutool.core.util.ReflectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.exception.MyRuntimeException; +import com.orangeforms.common.core.cache.DictionaryCache; +import com.orangeforms.common.core.object.TokenData; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.util.*; + +/** + * 带有缓存功能的字典Service基类,需要留意的是,由于缓存基于Key/Value方式存储, + * 目前仅支持基于主键字段的缓存查找,其他条件的查找仍然从数据源获取。 + * + * @param Model实体对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public abstract class BaseDictService extends BaseService implements IBaseDictService { + + /** + * 缓存池对象。 + */ + protected DictionaryCache dictionaryCache; + + /** + * 构造函数使用缺省缓存池对象。 + */ + public BaseDictService() { + super(); + } + + /** + * 重新加载数据库中所有当前表数据到系统内存。 + * + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reloadCachedData(boolean force) { + // 在非强制刷新情况下。 + // 先行判断缓存中是否存在数据,如果有就不加载了。 + if (!force && dictionaryCache.getCount() > 0) { + return; + } + List allList = super.getAllList(); + dictionaryCache.reload(allList, force); + } + + /** + * 保存新增对象。 + * + * @param data 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public M saveNew(M data) { + if (deletedFlagFieldName != null) { + try { + setDeletedFlagMethod.invoke(data, GlobalDeletedFlag.NORMAL); + } catch (Exception e) { + log.error("Failed to call reflection [setDeletedFlagMethod] in BaseDictService.saveNew.", e); + throw new MyRuntimeException(e); + } + } + if (tenantIdField != null) { + ReflectUtil.setFieldValue(data, tenantIdField, TokenData.takeFromRequest().getTenantId()); + } + mapper().insert(data); + return data; + } + + /** + * 更新数据对象。 + * + * @param data 更新的对象。 + * @param originalData 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(M data, M originalData) { + if (tenantIdField != null) { + ReflectUtil.setFieldValue(data, tenantIdField, TokenData.takeFromRequest().getTenantId()); + } + return mapper().updateById(data) == 1; + } + + /** + * 删除指定数据。 + * + * @param id 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(K id) { + return mapper().deleteById(id) == 1; + } + + /** + * 直接从缓存池中获取主键Id关联的数据。如果缓存中不存在,再从数据库中取出并回写到缓存。 + * + * @param id 主键Id。 + * @return 主键关联的数据,不存在返回null。 + */ + @SuppressWarnings("unchecked") + @Override + public M getById(Serializable id) { + M data = dictionaryCache.get((K) id); + if (data != null) { + return data; + } + data = super.getById(id); + if (data != null) { + this.dictionaryCache.put((K) id, data); + } + return data; + } + + /** + * 直接从缓存池中获取所有数据。 + * + * @return 返回所有数据。 + */ + @Override + public List getAllListFromCache() { + return dictionaryCache.getAll(); + } + + /** + * 直接从缓存池中返回符合主键 in (idValues) 条件的所有数据。 + * 对于缓存中不存在的数据,从数据库中获取并回写入缓存。 + * + * @param idValues 主键值列表。 + * @return 检索后的数据列表。 + */ + @SuppressWarnings("unchecked") + @Override + public List getInList(Set idValues) { + List resultList = dictionaryCache.getInList(idValues); + if (resultList.size() == idValues.size()) { + return resultList; + } + Set cachedIdList = new HashSet<>(); + for (M data : resultList) { + try { + cachedIdList.add((K) getIdFieldMethod.invoke(data)); + } catch (Exception e) { + log.error("Failed to call reflection method in BaseDictService.getInList.", e); + throw new MyRuntimeException(e); + } + } + // 找到未缓存的数据,然后从数据库读取后缓存。 + Set uncachedIdList = new HashSet<>(); + for (K id : idValues) { + if (!cachedIdList.contains(id)) { + uncachedIdList.add(id); + } + } + List uncachedResultList = super.getInList(uncachedIdList); + if (CollectionUtils.isNotEmpty(uncachedResultList)) { + for (M data : uncachedResultList) { + try { + K id = (K) getIdFieldMethod.invoke(data); + this.dictionaryCache.put(id, data); + } catch (Exception e) { + log.error("Failed to call reflection method in BaseDictService.getInList.", e); + throw new MyRuntimeException(e); + } + } + resultList.addAll(uncachedResultList); + } + return resultList; + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。属性property是主键,则从缓存中读取。 + * + * @param inFilterField 参与(In-list)过滤的Java对象字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @return 检索后的数据列表。 + */ + @SuppressWarnings("unchecked") + @Override + public List getInList(String inFilterField, Set inFilterValues) { + if (inFilterField.equals(this.idFieldName)) { + return this.getInList((Set) inFilterValues); + } + return super.getInList(inFilterField, inFilterValues); + } + + /** + * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 + * + * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id。 + * @param inFilterValues 数据值集合。 + * @return 全部存在返回true,否则false。 + */ + @SuppressWarnings("unchecked") + @Override + public boolean existUniqueKeyList(String inFilterField, Set inFilterValues) { + if (CollectionUtils.isEmpty(inFilterValues)) { + return true; + } + if (inFilterField.equals(this.idFieldName)) { + List dataList = this.getInList((Set) inFilterValues); + return dataList.size() == inFilterValues.size(); + } + String columnName = this.safeMapToColumnName(inFilterField); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in(columnName, inFilterValues); + return mapper().selectCount(queryWrapper) == inFilterValues.size(); + } + + /** + * 存入缓存。 + * + * @param data 新增或更新数据。 + */ + @SuppressWarnings("unchecked") + @Override + public void putDictionaryCache(M data) { + K key = (K) ReflectUtil.getFieldValue(data, idFieldName); + this.dictionaryCache.put(key, data); + } + + /** + * 根据字典主键将数据从缓存中删除。 + * + * @param id 字典主键。 + */ + @Override + public void removeDictionaryCache(K id) { + this.dictionaryCache.invalidate(id); + } + + /** + * 根据字典对象将数据从缓存中删除。 + * + * @param data 字典数据。 + */ + @SuppressWarnings("unchecked") + @Override + public void removeDictionaryCacheByModel(M data) { + K key = (K) ReflectUtil.getFieldValue(data, idFieldName); + this.dictionaryCache.invalidate(key); + } + + /** + * 获取缓存中的数据数量。 + * + * @return 缓存中的数据总量。 + */ + @Override + public int getCachedCount() { + return dictionaryCache.getCount(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/BaseService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/BaseService.java new file mode 100644 index 00000000..4d880dc2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/BaseService.java @@ -0,0 +1,2612 @@ +package com.orangeforms.common.core.base.service; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.hutool.core.util.ReflectUtil; +import com.alibaba.fastjson.JSONObject; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.client.BaseClient; +import com.orangeforms.common.core.constant.AggregationKind; +import com.orangeforms.common.core.constant.AggregationType; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import com.orangeforms.common.core.exception.InvalidDataFieldException; +import com.orangeforms.common.core.exception.MyRuntimeException; +import com.orangeforms.common.core.exception.RemoteDataBuildException; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.AopTargetUtil; +import com.orangeforms.common.core.util.ApplicationContextHolder; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.LogMessageUtil; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.lang.reflect.Modifier; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Function; + +import static java.util.stream.Collectors.*; + +/** + * 所有Service的基类。 + * + * @param Model对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public abstract class BaseService extends ServiceImpl, M> implements IBaseService { + /** + * 当前Service关联的主Model实体对象的Class。 + */ + @Getter + protected final Class modelClass; + /** + * 当前Service关联的主Model实体对象主键字段的Class。 + */ + protected final Class idFieldClass; + /** + * 当前Service关联的主Model对象的实际表名称。 + */ + protected final String tableName; + /** + * 当前Service关联的主Model对象主键字段名称。 + */ + protected String idFieldName; + /** + * 当前Service关联的主数据表中主键列名称。 + */ + protected String idColumnName; + /** + * 当前Service关联的主Model对象逻辑删除字段名称。 + */ + protected String deletedFlagFieldName; + /** + * 当前Service关联的主数据表中逻辑删除字段名称。 + */ + protected String deletedFlagColumnName; + /** + * 当前Service关联的主Model对象租户Id字段。 + */ + protected Field tenantIdField; + /** + * 当前Service关联的主Model对象租户Id字段名称。 + */ + protected String tenantIdFieldName; + /** + * 当前Service关联的主数据表中租户Id列名称。 + */ + protected String tenantIdColumnName; + /** + * 当前Job服务源主表Model对象的最后更新时间字段名称。 + */ + protected String jobUpdateTimeFieldName; + /** + * 当前Job服务源主表Model对象的最后更新时间列名称。 + */ + protected String jobUpdateTimeColumnName; + /** + * 当前业务服务源主表Model对象最后更新时间字段名称。 + */ + protected String updateTimeFieldName; + /** + * 当前业务服务源主表Model对象最后更新时间列名称。 + */ + protected String updateTimeColumnName; + /** + * 当前业务服务源主表Model对象最后更新用户Id字段名称。 + */ + protected String updateUserIdFieldName; + /** + * 当前业务服务源主表Model对象最后更新用户Id列名称。 + */ + protected String updateUserIdColumnName; + /** + * 当前Service关联的主Model对象主键字段赋值方法的反射对象。 + */ + protected Method setIdFieldMethod; + /** + * 当前Service关联的主Model对象主键字段访问方法的反射对象。 + */ + protected Method getIdFieldMethod; + /** + * 当前Service关联的主Model对象逻辑删除字段赋值方法的反射对象。 + */ + protected Method setDeletedFlagMethod; + /** + * 当前Service关联的主Model对象的所有本地服务常量字典关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List relationConstDictStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有本地服务字典关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List localRelationDictStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有本地服务一对一关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List localRelationOneToOneStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有本地服务一对多关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List localRelationOneToManyStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有多对多关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List localRelationManyToManyStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有本地服务一对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List localRelationOneToManyAggrStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有本地服务多对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List localRelationManyToManyAggrStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有远程字典关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List remoteRelationDictStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有远程一对一关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List remoteRelationOneToOneStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有远程一对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List remoteRelationOneToManyAggrStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有远程多对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private final List remoteRelationManyToManyAggrStructList = new LinkedList<>(); + + private static final String AND_OP = " AND "; + + @Override + public BaseDaoMapper getBaseMapper() { + return mapper(); + } + + /** + * 构造函数,在实例化的时候,一次性完成所有有关主Model对象信息的加载。 + */ + @SuppressWarnings("unchecked") + public BaseService() { + modelClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + idFieldClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; + this.tableName = modelClass.getAnnotation(TableName.class).value(); + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field field : fields) { + initializeField(field); + } + } + + private void initializeField(Field field) { + if (idFieldName == null && null != field.getAnnotation(TableId.class)) { + idFieldName = field.getName(); + TableId c = field.getAnnotation(TableId.class); + idColumnName = c == null ? idFieldName : c.value(); + setIdFieldMethod = ReflectUtil.getMethod( + modelClass, "set" + StringUtils.capitalize(idFieldName), idFieldClass); + getIdFieldMethod = ReflectUtil.getMethod( + modelClass, "get" + StringUtils.capitalize(idFieldName)); + } + if (jobUpdateTimeFieldName == null && null != field.getAnnotation(JobUpdateTimeColumn.class)) { + jobUpdateTimeFieldName = field.getName(); + jobUpdateTimeColumnName = this.safeMapToColumnName(jobUpdateTimeFieldName); + } + if (deletedFlagFieldName == null && null != field.getAnnotation(TableLogic.class)) { + deletedFlagFieldName = field.getName(); + deletedFlagColumnName = this.safeMapToColumnName(deletedFlagFieldName); + setDeletedFlagMethod = ReflectUtil.getMethod( + modelClass, "set" + StringUtils.capitalize(deletedFlagFieldName), Integer.class); + } + if (tenantIdFieldName == null && null != field.getAnnotation(TenantFilterColumn.class)) { + tenantIdField = field; + tenantIdFieldName = field.getName(); + tenantIdColumnName = this.safeMapToColumnName(tenantIdFieldName); + } + } + + /** + * 获取子类中注入的Mapper类 + * + * @return 子类中注入的Mapper类 + */ + protected abstract BaseDaoMapper mapper(); + + /** + * 该方法为BaseService类buildXXX方法中使用到的模板方法,子类实现方法中提供具体的实现, + * 可根据配置项决定是否忽略远程调用异常。由于来自于配置项,因此可在运行时动态修改。 + * 是否忽略获取远程查询数据过程中出现的任何错误。包括各种逻辑错误,系统错误等。 + * 通常建议在开发阶段设置为false,以便及时发现问题。 + * + * @return true忽略,否则抛出RemoteDataBuildException异常。 + */ + protected boolean ignoreRpcError() { + return false; + } + + @SuppressWarnings("unchecked") + @Override + public void saveNewOrUpdate(M data, Consumer saveNew, BiConsumer update) { + if (data == null) { + return; + } + K id = (K) ReflectUtil.getFieldValue(data, idFieldName); + if (id == null) { + saveNew.accept(data); + } else { + update.accept(data, this.getById(id)); + } + } + + @SuppressWarnings("unchecked") + @Override + public void saveNewOrUpdateBatch(List dataList, Consumer> saveNewBatch, BiConsumer update) { + if (CollUtil.isEmpty(dataList)) { + return; + } + List saveNewDataList = dataList.stream() + .filter(c -> ReflectUtil.getFieldValue(c, idFieldName) == null).collect(toList()); + if (CollUtil.isNotEmpty(saveNewDataList)) { + saveNewBatch.accept(saveNewDataList); + } + List updateDataList = dataList.stream() + .filter(c -> ReflectUtil.getFieldValue(c, idFieldName) != null).collect(toList()); + if (CollUtil.isNotEmpty(updateDataList)) { + for (M data : updateDataList) { + K id = (K) ReflectUtil.getFieldValue(data, idFieldName); + update.accept(data, this.getById(id)); + } + } + } + + /** + * 根据过滤条件删除数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Integer removeBy(M filter) { + return mapper().delete(new QueryWrapper<>(filter)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateBatchOneToManyRelation( + String relationFieldName, + Object relationFieldValue, + String updateUserIdFieldName, + String updateTimeFieldName, + List dataList, + Consumer> batchInserter) { + // 删除在现有数据列表dataList中不存在的从表数据。 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(this.safeMapToColumnName(relationFieldName), relationFieldValue); + if (CollUtil.isNotEmpty(dataList)) { + Set keptIdSet = dataList.stream() + .filter(c -> ReflectUtil.getFieldValue(c, idFieldName) != null) + .map(c -> ReflectUtil.getFieldValue(c, idFieldName)).collect(toSet()); + if (CollUtil.isNotEmpty(keptIdSet)) { + queryWrapper.notIn(idColumnName, keptIdSet); + } + } + mapper().delete(queryWrapper); + if (CollUtil.isNotEmpty(dataList)) { + // 没有包含主键的对象被视为新对象,为了效率最优化,这里执行批量插入。 + List newDataList = dataList.stream() + .filter(c -> ReflectUtil.getFieldValue(c, idFieldName) == null).collect(toList()); + if (CollUtil.isNotEmpty(newDataList)) { + newDataList.forEach(o -> ReflectUtil.setFieldValue(o, relationFieldName, relationFieldValue)); + batchInserter.accept(newDataList); + } + // 对于主键已经存在的数据,我们视为已存在数据,这里执行逐条更新操作。 + List updateDataList = + dataList.stream().filter(c -> ReflectUtil.getFieldValue(c, idFieldName) != null).collect(toList()); + for (M updateData : updateDataList) { + // 如果前端将更新用户Id置空,这里使用当前用户更新该字段。 + if (updateUserIdFieldName != null && ReflectUtil.getFieldValue(updateData, updateUserIdFieldName) == null) { + ReflectUtil.setFieldValue(updateData, updateUserIdFieldName, TokenData.takeFromRequest().getUserId()); + } + // 如果前端将更新时间置空,这里使用当前时间更新该字段。 + if (updateTimeFieldName != null && ReflectUtil.getFieldValue(updateData, updateTimeFieldName) == null) { + ReflectUtil.setFieldValue(updateData, updateTimeFieldName, new Date()); + } + if (this.deletedFlagFieldName != null) { + ReflectUtil.setFieldValue(updateData, deletedFlagFieldName, GlobalDeletedFlag.NORMAL); + } + @SuppressWarnings("unchecked") + UpdateWrapper uw = this.createUpdateQueryForNullValue( + updateData, (K) ReflectUtil.getFieldValue(updateData, idFieldName)); + mapper().update(updateData, uw); + } + } + } + + /** + * 判断主键Id关联的数据是否存在。 + * + * @param id 主键Id + * @return 存在返回true,否则false + */ + @Override + public boolean existId(K id) { + return this.getById(id) != null; + } + + /** + * 判断指定字段的数据是否存在,且仅仅存在一条记录。 + * 如果是基于主键的过滤,会直接调用existId过滤函数,提升性能。在有缓存的场景下,也可以利用缓存。 + * + * @param fieldName 待过滤的字段名(Java 字段)。 + * @param fieldValue 字段值。 + * @return 存在且仅存在一条返回true,否则false。 + */ + @SuppressWarnings("unchecked") + @Override + public boolean existOne(String fieldName, Object fieldValue) { + if (fieldName.equals(this.idFieldName)) { + return this.existId((K) fieldValue); + } + String columnName = MyModelUtil.mapToColumnName(fieldName, modelClass); + return mapper().selectCount(new QueryWrapper().eq(columnName, fieldValue)) == 1; + } + + /** + * 返回符合 filterField = filterValue 条件的一条数据。 + * + * @param filterField 过滤的Java字段。 + * @param filterValue 过滤的Java字段值。 + * @return 查询后的数据对象。 + */ + @SuppressWarnings("unchecked") + @Override + public M getOne(String filterField, Object filterValue) { + if (filterField.equals(idFieldName)) { + return this.getById((K) filterValue); + } + String columnName = this.safeMapToColumnName(filterField); + QueryWrapper queryWrapper = new QueryWrapper().eq(columnName, filterValue); + return mapper().selectOne(queryWrapper); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param id 主表主键Id。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 查询结果对象。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + @Override + public M getByIdWithRelation(K id, MyRelationParam relationParam) { + M dataObject = this.getById(id); + this.buildRelationForData(dataObject, relationParam); + return dataObject; + } + + /** + * 获取所有数据。单表查询,不进行任何数据关联。 + * + * @return 返回所有数据。 + */ + @Override + public List getAllList() { + return mapper().selectList(Wrappers.emptyWrapper()); + } + + /** + * 获取排序后所有数据。单表查询,不进行任何数据关联。 + * + * @param orderByProperties 需要排序的字段属性,这里使用Java对象中的属性名,而不是数据库字段名。 + * @return 返回排序后所有数据。 + */ + @Override + public List getAllListByOrder(String... orderByProperties) { + String[] columns = new String[orderByProperties.length]; + for (int i = 0; i < orderByProperties.length; i++) { + columns[i] = this.safeMapToColumnName(orderByProperties[i]); + } + return mapper().selectList(new QueryWrapper().orderByAsc(columns)); + } + + /** + * 判断参数值主键集合中的所有数据,是否全部存在 + * + * @param idSet 待校验的主键集合。 + * @return 全部存在返回true,否则false。 + */ + @Override + public boolean existAllPrimaryKeys(Set idSet) { + if (CollectionUtils.isEmpty(idSet)) { + return true; + } + return this.existUniqueKeyList(idFieldName, idSet); + } + + /** + * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 + * + * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id。 + * @param inFilterValues 数据值集合。 + * @return 全部存在返回true,否则false。 + */ + @Override + public boolean existUniqueKeyList(String inFilterField, Set inFilterValues) { + if (CollectionUtils.isEmpty(inFilterValues)) { + return true; + } + String column = this.safeMapToColumnName(inFilterField); + return mapper().selectCount(new QueryWrapper().in(column, inFilterValues)) == inFilterValues.size(); + } + + /** + * 返回符合主键 in (idValues) 条件的所有数据。单表查询,不进行任何数据关联。 + * + * @param idValues 主键值列表。 + * @return 检索后的数据列表。 + */ + @Override + public List getInList(Set idValues) { + return this.getInList(idFieldName, idValues, null); + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。单表查询,不进行任何数据关联。 + * + * @param inFilterField 参与(In-list)过滤的Java对象字段。 + * @param inFilterValues 参与(In-list)过滤的字段值集合。 + * @return 检索后的数据列表。 + */ + @Override + public List getInList(String inFilterField, Set inFilterValues) { + return this.getInList(inFilterField, inFilterValues, null); + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据,并根据orderBy字段排序。单表查询,不进行任何数据关联。 + * + * @param inFilterField 参与(In-list)过滤的Java对象字段。 + * @param inFilterValues 参与(In-list)过滤的字段值集合。 + * @param orderBy SQL的ORDER BY排序从句。 + * @return 检索后的数据列表。 + */ + @Override + public List getInList(String inFilterField, Set inFilterValues, String orderBy) { + if (CollectionUtils.isEmpty(inFilterValues)) { + return new LinkedList<>(); + } + String column = this.safeMapToColumnName(inFilterField); + QueryWrapper queryWrapper = new QueryWrapper().in(column, inFilterValues); + if (StringUtils.isNotBlank(orderBy)) { + queryWrapper.last(orderBy); + } + return mapper().selectList(queryWrapper); + } + + /** + * 返回符合主键 in (idValues) 条件的所有数据。同时返回关联数据。 + * + * @param idValues 主键值集合。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 检索后的数据列表。 + */ + @Override + public List getInListWithRelation(Set idValues, MyRelationParam relationParam) { + List resultList = this.getInList(idValues); + this.buildRelationForDataList(resultList, relationParam); + return resultList; + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。同时返回关联数据。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 检索后的数据列表。 + */ + @Override + public List getInListWithRelation(String inFilterField, Set inFilterValues, MyRelationParam relationParam) { + List resultList = this.getInList(inFilterField, inFilterValues); + this.buildRelationForDataList(resultList, relationParam); + return resultList; + } + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据,并根据orderBy字段排序。同时返回关联数据。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @param orderBy 排序字段。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 检索后的数据列表。 + */ + @Override + public List getInListWithRelation( + String inFilterField, Set inFilterValues, String orderBy, MyRelationParam relationParam) { + List resultList = this.getInList(inFilterField, inFilterValues, orderBy); + this.buildRelationForDataList(resultList, relationParam); + return resultList; + } + + /** + * 用参数对象作为过滤条件,获取数据数量。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件。 + * @return 返回过滤后的数据数量。 + */ + @Override + public int getCountByFilter(M filter) { + return mapper().selectCount(new QueryWrapper<>(filter)); + } + + /** + * 用参数对象作为过滤条件,判断是否存在过滤数据。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件 + * @return 存在返回true,否则false + */ + @Override + public boolean existByFilter(M filter) { + return this.getCountByFilter(filter) > 0; + } + + /** + * 用参数对象作为过滤条件,获取查询结果。 + * + * @param filter 该方法基于mybatis的通用mapper,如果参数为null,则返回全部数据。 + * @return 返回过滤后的数据。 + */ + @Override + public List getListByFilter(M filter) { + return mapper().selectList(new QueryWrapper<>(filter)); + } + + /** + * 获取父主键Id下的所有子数据列表。单表查询,不进行任何数据关联。 + * + * @param parentIdFieldName 父主键字段名字,如"courseId"。 + * @param parentId 父主键的值。 + * @return 父主键Id下的所有子数据列表。 + */ + @Override + public List getListByParentId(String parentIdFieldName, K parentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + String parentIdColumn = this.safeMapToColumnName(parentIdFieldName); + if (parentId != null) { + queryWrapper.eq(parentIdColumn, parentId); + } else { + queryWrapper.isNull(parentIdColumn); + } + return mapper().selectList(queryWrapper); + } + + /** + * 根据指定的显示字段列表、过滤条件字符串和分组字符串,返回聚合计算后的查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectFields 选择的字段列表,多个字段逗号分隔。 + * NOTE: 如果数据表字段和Java对象字段名字不同,Java对象字段应该以别名的形式出现。 + * 如: table_column_name modelFieldName。否则无法被反射回Bean对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param groupBy SQL常量形式分组字段列表,逗号分隔。 + * @return 聚合计算后的数据结果集。 + */ + @Override + public List> getGroupedListByCondition( + String selectFields, String whereClause, String groupBy) { + return mapper().getGroupedListByCondition(tableName, selectFields, whereClause, groupBy); + } + + /** + * 根据指定的显示字段列表、过滤条件字符串和排序字符串,返回查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectList 选择的Java字段列表。如果为空表示返回全部字段。 + * @param filter 过滤对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param orderBy SQL常量形式排序字段列表,逗号分隔。 + * @return 查询结果。 + */ + @Override + public List getListByCondition(List selectList, M filter, String whereClause, String orderBy) { + QueryWrapper queryWrapper = new QueryWrapper<>(filter); + if (CollectionUtils.isNotEmpty(selectList)) { + String[] columns = new String[selectList.size()]; + for (int i = 0; i < selectList.size(); i++) { + columns[i] = this.safeMapToColumnName(selectList.get(i)); + } + queryWrapper.select(columns); + } + if (StringUtils.isNotBlank(whereClause)) { + queryWrapper.apply(whereClause); + } + if (StringUtils.isNotBlank(orderBy)) { + queryWrapper.last(" ORDER BY " + orderBy); + } + return mapper().selectList(queryWrapper); + } + + /** + * 用指定过滤条件,计算记录数量。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param whereClause SQL常量形式的条件从句。 + * @return 返回过滤后的数据数量。 + */ + @Override + public Integer getCountByCondition(String whereClause) { + return mapper().getCountByCondition(this.tableName, whereClause); + } + + @Override + public CallResult verifyRelatedData(M data, M originalData) { + return CallResult.ok(); + } + + @SuppressWarnings("unchecked") + @Override + public CallResult verifyRelatedData(List dataList) { + if (CollUtil.isEmpty(dataList)) { + return CallResult.ok(); + } + // 1. 先过滤出数据列表中的主键Id集合。 + Set idList = dataList.stream() + .filter(c -> ReflectUtil.getFieldValue(c, idFieldName) != null) + .map(c -> (K) ReflectUtil.getFieldValue(c, idFieldName)).collect(toSet()); + // 2. 列表中,我们目前仅支持全部是更新数据,或全部新增数据,不能混着。如果有主键值,说明当前全是更新数据。 + if (CollUtil.isNotEmpty(idList)) { + // 3. 这里是批量读取的优化,用一个主键值得in list查询,一步获取全部原有数据。然后再在内存中基于Map排序。 + List originalList = this.getInList(idList); + Map originalMap = originalList.stream() + .collect(toMap(c -> ReflectUtil.getFieldValue(c, idFieldName), c2 -> c2)); + // 迭代列表,传入当前最新数据和更新前数据进行比对,如果关联数据变化了,就对新数据进行合法性验证。 + for (M data : dataList) { + CallResult result = this.verifyRelatedData( + data, originalMap.get(ReflectUtil.getFieldValue(data, idFieldName))); + if (!result.isSuccess()) { + return result; + } + } + } else { + // 4. 迭代列表,传入当前最新数据,对关联数据进行合法性验证。 + for (M data : dataList) { + CallResult result = this.verifyRelatedData(data, null); + if (!result.isSuccess()) { + return result; + } + } + } + return CallResult.ok(); + } + + @Override + public CallResult verifyRemoteRelatedData(M data, M originalData) { + return CallResult.ok(); + } + + @SuppressWarnings("unchecked") + @Override + public CallResult verifyRemoteRelatedData(List dataList) { + if (CollUtil.isEmpty(dataList)) { + return CallResult.ok(); + } + // 1. 先过滤出数据列表中的主键Id集合。 + Set idList = dataList.stream() + .filter(c -> ReflectUtil.getFieldValue(c, idFieldName) != null) + .map(c -> (K) ReflectUtil.getFieldValue(c, idFieldName)).collect(toSet()); + // 2. 列表中,我们目前仅支持全部是更新数据,或全部新增数据,不能混着。如果有主键值,说明当前全是更新数据。 + if (CollUtil.isNotEmpty(idList)) { + // 3. 这里是批量读取的优化,用一个主键值得in list查询,一步获取全部原有数据。然后再在内存中基于Map排序。 + List originalList = this.getInList(idList); + Map originalMap = originalList.stream() + .collect(toMap(c -> ReflectUtil.getFieldValue(c, idFieldName), c2 -> c2)); + // 迭代列表,传入当前最新数据和更新前数据进行比对,如果关联数据变化了,就对新数据进行合法性验证。 + for (M data : dataList) { + CallResult result = this.verifyRemoteRelatedData( + data, originalMap.get(ReflectUtil.getFieldValue(data, idFieldName))); + if (!result.isSuccess()) { + return result; + } + } + } else { + // 4. 迭代列表,传入当前最新数据,对关联数据进行合法性验证。 + for (M data : dataList) { + CallResult result = this.verifyRemoteRelatedData(data, null); + if (!result.isSuccess()) { + return result; + } + } + } + return CallResult.ok(); + } + + @Override + public CallResult verifyAllRelatedData(M data, M originalData) { + CallResult verifyResult = this.verifyRelatedData(data, originalData); + if (!verifyResult.isSuccess()) { + return verifyResult; + } + return this.verifyRemoteRelatedData(data, originalData); + } + + @Override + public CallResult verifyAllRelatedData(List dataList) { + CallResult verifyResult = this.verifyRelatedData(dataList); + if (!verifyResult.isSuccess()) { + return verifyResult; + } + return this.verifyRemoteRelatedData(dataList); + } + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + @Override + public void buildRelationForDataList(List resultList, MyRelationParam relationParam) { + this.buildRelationForDataList(resultList, relationParam, null); + } + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + @Override + public void buildRelationForDataList( + List resultList, MyRelationParam relationParam, Set ignoreFields) { + if (relationParam == null || CollectionUtils.isEmpty(resultList)) { + return; + } + boolean dataFilterValue = GlobalThreadLocal.setDataFilter(false); + try { + // 集成本地一对一和字段级别的数据关联。 + // NOTE: 这里必须要在集成远程一对一之前集成本地一对一。因为远程集成方法中,会为本地一对一从表数据进行远程集成。 + boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict(); + // 这里集成一对一关联。 + if (buildOneToOne) { + this.buildOneToOneForDataList(resultList, relationParam.isBuildOneToOneWithDict(), ignoreFields); + } + // 集成一对多关联 + if (relationParam.isBuildOneToMany()) { + this.buildOneToManyForDataList(resultList, ignoreFields); + } + // 这里集成字典关联 + if (relationParam.isBuildDict()) { + // 构建常量字典关联关系 + this.buildConstDictForDataList(resultList, ignoreFields); + this.buildDictForDataList(resultList, buildOneToOne, ignoreFields); + } + // 集成远程一对一和字段级别的数据关联。 + boolean buildRemoteOneToOne = + relationParam.isBuildRemoteOneToOne() || relationParam.isBuildRemoteOneToOneWithDict(); + if (buildRemoteOneToOne) { + this.buildRemoteOneToOneForDataList(resultList, relationParam.isBuildRemoteOneToOneWithDict(), ignoreFields); + } + if (relationParam.isBuildRemoteDict()) { + this.buildRemoteDictForDataList(resultList, buildRemoteOneToOne, ignoreFields); + } + // 组装本地聚合计算关联数据 + if (relationParam.isBuildAggregation()) { + // 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。 + this.buildOneToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields); + // 处理多对多场景下,根据主表的结果,进行从表聚合数据的计算。 + this.buildManyToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields); + } + // 组装远程聚合计算关联数据 + if (relationParam.isBuildRemoteAggregation()) { + // 一对多场景。 + this.buildRemoteOneToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields); + // 处理多对多场景。 + this.buildRemoteManyToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields); + } + } finally { + GlobalThreadLocal.setDataFilter(dataFilterValue); + } + } + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + */ + @Override + public void buildRelationForDataList(List resultList, MyRelationParam relationParam, int batchSize) { + this.buildRelationForDataList(resultList, relationParam, batchSize, null); + } + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + @Override + public void buildRelationForDataList( + List resultList, MyRelationParam relationParam, int batchSize, Set ignoreFields) { + if (CollectionUtils.isEmpty(resultList)) { + return; + } + if (batchSize <= 0) { + this.buildRelationForDataList(resultList, relationParam); + return; + } + int totalCount = resultList.size(); + int fromIndex = 0; + int toIndex = Math.min(batchSize, totalCount); + while (toIndex > fromIndex) { + List subResultList = resultList.subList(fromIndex, toIndex); + this.buildRelationForDataList(subResultList, relationParam); + fromIndex = toIndex; + toIndex = Math.min(batchSize + fromIndex, totalCount); + } + } + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param 实体对象类型。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + @Override + public void buildRelationForData(T dataObject, MyRelationParam relationParam) { + this.buildRelationForData(dataObject, relationParam, null); + } + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @param 实体对象类型。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + @Override + public void buildRelationForData(T dataObject, MyRelationParam relationParam, Set ignoreFields) { + if (dataObject == null || relationParam == null) { + return; + } + boolean dataFilterValue = GlobalThreadLocal.setDataFilter(false); + try { + // 集成本地一对一和字段级别的数据关联。 + boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict(); + if (buildOneToOne) { + this.buildOneToOneForData(dataObject, relationParam.isBuildOneToOneWithDict(), ignoreFields); + } + // 集成一对多关联 + if (relationParam.isBuildOneToMany()) { + this.buildOneToManyForData(dataObject, ignoreFields); + } + if (relationParam.isBuildDict()) { + // 构建常量字典关联关系 + this.buildConstDictForData(dataObject, ignoreFields); + // 构建本地数据字典关联关系。 + this.buildDictForData(dataObject, buildOneToOne, ignoreFields); + } + boolean buildRemoteOneToOne = + relationParam.isBuildRemoteOneToOne() || relationParam.isBuildRemoteOneToOneWithDict(); + if (buildRemoteOneToOne) { + this.buildRemoteOneToOneForData(dataObject, relationParam.isBuildRemoteOneToOneWithDict(), ignoreFields); + } + if (relationParam.isBuildRemoteDict()) { + this.buildRemoteDictForData(dataObject, buildRemoteOneToOne, ignoreFields); + } + // 组装本地聚合计算关联数据 + if (relationParam.isBuildAggregation()) { + // 构建一对多场景 + buildOneToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields); + // 开始处理多对多场景。 + buildManyToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields); + } + // 组装远程聚合计算关联数据 + if (relationParam.isBuildRemoteAggregation()) { + // 处理一对多场景 + this.buildRemoteOneToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields); + // 处理多对多场景 + this.buildRemoteManyToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields); + } + if (relationParam.isBuildRelationManyToMany()) { + this.buildRelationManyToMany(dataObject, ignoreFields); + } + } finally { + GlobalThreadLocal.setDataFilter(dataFilterValue); + } + } + + /** + * 为参数列表数据集成本地静态字典关联数据。 + * + * @param resultList 主表数据列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildConstDictForDataList(List resultList, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.relationConstDictStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (LocalRelationStruct relationStruct : this.relationConstDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + for (M dataObject : resultList) { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + String name = relationStruct.dictMap.get(id); + if (name != null) { + Map dictMap = new HashMap<>(2); + dictMap.put("id", id); + dictMap.put("name", name); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, dictMap); + } + } + } + } + } + + /** + * 为参数实体对象数据集成本地静态字典关联数据。 + * + * @param dataObject 实体对象。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildConstDictForData(T dataObject, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationConstDictStructList)) { + return; + } + for (LocalRelationStruct relationStruct : this.relationConstDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + String name = relationStruct.dictMap.get(id); + if (name != null) { + Map dictMap = new HashMap<>(2); + dictMap.put("id", id); + dictMap.put("name", name); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, dictMap); + } + } + } + } + + /** + * 集成主表和多对多中间表之间的关联关系。 + * + * @param dataObject 关联后的主表数据对象。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildRelationManyToMany(T dataObject, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.localRelationManyToManyStructList)) { + return; + } + for (LocalRelationStruct relationStruct : this.localRelationManyToManyStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + String masterIdColumn = this.safeMapToColumnName(relationStruct.masterIdField.getName()); + Map filterMap = new HashMap<>(1); + filterMap.put(masterIdColumn, masterIdValue); + List manyToManyList = relationStruct.manyToManyMapper.selectByMap(filterMap); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, manyToManyList); + } + } + + /** + * 为实体对象参数列表数据集成远程一对一关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + private void buildRemoteOneToOneForDataList(List resultList, boolean withDict, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.remoteRelationOneToOneStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RemoteRelationStruct relationStruct : this.remoteRelationOneToOneStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + boolean buildRemoteOneToOneDict = withDict && relationStruct.relationOneToOne.loadSlaveDict(); + MyQueryParam queryParam = new MyQueryParam(buildRemoteOneToOneDict); + queryParam.setUseDataFilter(false); + MyWhereCriteria whereCriteria = new MyWhereCriteria(); + whereCriteria.setCriteria( + relationStruct.relationOneToOne.slaveIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + queryParam.addCriteriaList(whereCriteria); + ResponseResult> result = relationStruct.remoteClient.listBy(queryParam); + if (result.isSuccess()) { + List relationList = result.getData().getDataList(); + MyModelUtil.makeOneToOneRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + } else { + this.logErrorOrThrowException(result.getErrorMessage()); + } + } + } + + /** + * 为实体对象数据集成远程一对一关联数据。 + * + * @param dataObject 实体对象。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + private void buildRemoteOneToOneForData(T dataObject, boolean withDict, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.remoteRelationOneToOneStructList)) { + return; + } + for (RemoteRelationStruct relationStruct : this.remoteRelationOneToOneStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + MyQueryParam queryParam = new MyQueryParam(withDict); + queryParam.setUseDataFilter(false); + MyWhereCriteria whereCriteria = new MyWhereCriteria(); + whereCriteria.setCriteria( + relationStruct.relationOneToOne.slaveIdField(), MyWhereCriteria.OPERATOR_EQUAL, id); + queryParam.addCriteriaList(whereCriteria); + ResponseResult result = relationStruct.remoteClient.getBy(queryParam); + if (result.isSuccess()) { + Object relationObject = this.normalizeData( + result.getData(), relationStruct.relationOneToOne.slaveModelClass()); + if (relationObject != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); + } + } else { + this.logErrorOrThrowException(result.getErrorMessage()); + } + } + } + } + + /** + * 为实体对象参数列表数据集成远程字典关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + private void buildRemoteDictForDataList(List resultList, boolean hasBuiltOneToOne, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.remoteRelationDictStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RemoteRelationStruct relationStruct : this.remoteRelationDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + List relationList = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationList = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.equalOneToOneRelationField)) + .filter(Objects::nonNull) + .collect(toList()); + } else { + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + MyQueryParam queryParam = new MyQueryParam(false); + queryParam.setUseDataFilter(false); + MyWhereCriteria whereCriteria = new MyWhereCriteria(); + whereCriteria.setCriteria( + relationStruct.relationDict.slaveIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + queryParam.addCriteriaList(whereCriteria); + ResponseResult> result = relationStruct.remoteClient.listBy(queryParam); + // 成功或者没有数据 + if (result.isSuccess()) { + relationList = result.getData().getDataList(); + } else { + logErrorOrThrowException(result.getErrorMessage()); + } + } + MyModelUtil.makeDictRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + } + } + + /** + * 为实体对象数据集成远程字典关联数据。 + * + * @param dataObject 实体对象。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + private void buildRemoteDictForData(T dataObject, boolean hasBuiltOneToOne, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.remoteRelationDictStructList)) { + return; + } + for (RemoteRelationStruct relationStruct : this.remoteRelationDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object relationObject = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationObject = ReflectUtil.getFieldValue(dataObject, relationStruct.equalOneToOneRelationField); + } else { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id == null) { + continue; + } + MyQueryParam queryParam = new MyQueryParam(false); + queryParam.setUseDataFilter(false); + MyWhereCriteria whereCriteria = new MyWhereCriteria(); + whereCriteria.setCriteria( + relationStruct.relationDict.slaveIdField(), MyWhereCriteria.OPERATOR_EQUAL, id); + queryParam.addCriteriaList(whereCriteria); + ResponseResult result = relationStruct.remoteClient.getBy(queryParam); + if (result.isSuccess()) { + relationObject = this.normalizeData( + result.getData(), relationStruct.relationDict.slaveModelClass()); + } else { + this.logErrorOrThrowException(result.getErrorMessage()); + } + } + MyModelUtil.makeDictRelation( + modelClass, dataObject, relationObject, relationStruct.relationField.getName()); + } + } + + /** + * 根据实体对象参数列表和过滤条件,集成远程一对多关联聚合计算数据。 + * + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildRemoteOneToManyAggregationForDataList( + List resultList, Map> criteriaListMap, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.remoteRelationOneToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(this.remoteRelationOneToManyAggrStructList.size()); + } + for (RemoteRelationStruct relationStruct : this.remoteRelationOneToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + MyAggregationParam aggregationParam = + createAggregationParam(AggregationKind.ONE_TO_MANY, + relation.aggregationType(), relation.aggregationField(), relation.slaveIdField()); + List criteriaList = + criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria criteria = new MyWhereCriteria(); + CallResult result = criteria.setCriteria( + relation.slaveIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + if (!result.isSuccess()) { + log.error("过滤条件设置失败,错误:" + result.getErrorMessage()); + throw new IllegalStateException(result.getErrorMessage()); + } + criteriaList.add(criteria); + aggregationParam.setWhereCriteriaList(criteriaList); + aggregationParam.setUseDataFilter(false); + ResponseResult>> responseResult = + relationStruct.remoteClient.aggregateBy(aggregationParam); + if (responseResult.isSuccess()) { + this.doMakeAggregationData(responseResult.getData(), resultList, relationStruct); + } else { + this.logErrorOrThrowException(result.getErrorMessage()); + } + } + } + + /** + * 根据实体对象和过滤条件,集成远程一对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildRemoteOneToManyAggregationForData( + T dataObject, Map> criteriaListMap, Set ignoreFields) { + // 处理一对多场景 + if (dataObject == null || CollectionUtils.isEmpty(this.remoteRelationOneToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(this.remoteRelationOneToManyAggrStructList.size()); + } + for (RemoteRelationStruct relationStruct : this.remoteRelationOneToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue == null) { + continue; + } + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + MyAggregationParam aggregationParam = createAggregationParam(AggregationKind.ONE_TO_MANY, + relation.aggregationType(), relation.aggregationField(), relation.slaveIdField()); + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria criteria = new MyWhereCriteria(); + criteria.setCriteria(relation.slaveModelClass(), + relation.slaveIdField(), MyWhereCriteria.OPERATOR_EQUAL, masterIdValue); + criteriaList.add(criteria); + aggregationParam.setWhereCriteriaList(criteriaList); + aggregationParam.setUseDataFilter(false); + ResponseResult>> result = + relationStruct.remoteClient.aggregateBy(aggregationParam); + if (result.isSuccess()) { + List resultList = new LinkedList<>(); + resultList.add(dataObject); + this.doMakeAggregationData(result.getData(), resultList, relationStruct); + } else { + this.logErrorOrThrowException(result.getErrorMessage()); + } + } + } + + /** + * 根据实体对象参数列表和过滤条件,集成远程多对多关联聚合计算数据。 + * + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildRemoteManyToManyAggregationForDataList( + List resultList, Map> criteriaListMap, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.remoteRelationManyToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(this.remoteRelationManyToManyAggrStructList.size()); + } + for (RemoteRelationStruct relationStruct : this.remoteRelationManyToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + // 这里需要拆分出哪些是关联表过滤,哪些是从表过滤。 + RemoteAggregationRelationInfo relationInfo = this.parseRemoteAggregationRelationInfo( + relationStruct, criteriaListMap, masterIdSet, true); + // 先处理聚合字段位于中间表的case。 + if (relation.aggregationModelClass().equals(relation.relationModelClass())) { + this.processRemoteManyToManyAggregationWithRelationModel( + relationInfo, relation, relationStruct, resultList, masterIdSet, true); + } else { + this.processRemoteManyToManyAggregationWithSlaveModel( + relationInfo, relation, relationStruct, resultList); + } + } + } + + /** + * 根据实体对象和过滤条件,集成本地多对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildRemoteManyToManyAggregationForData( + T dataObject, Map> criteriaListMap, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.remoteRelationManyToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(this.remoteRelationManyToManyAggrStructList.size()); + } + for (RemoteRelationStruct relationStruct : this.remoteRelationManyToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue == null) { + continue; + } + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + // 这里需要拆分出哪些是关联表过滤,哪些是从表过滤。 + RemoteAggregationRelationInfo relationInfo = this.parseRemoteAggregationRelationInfo( + relationStruct, criteriaListMap, masterIdValue, false); + List resultList = new LinkedList<>(); + resultList.add(dataObject); + // 先处理聚合字段位于中间表的case。 + if (relation.aggregationModelClass().equals(relation.relationModelClass())) { + this.processRemoteManyToManyAggregationWithRelationModel( + relationInfo, relation, relationStruct, resultList, masterIdValue, false); + } else { + this.processRemoteManyToManyAggregationWithSlaveModel( + relationInfo, relation, relationStruct, resultList); + } + } + } + + /** + * 为实体对象参数列表数据集成本地一对一关联数据。 + * NOTE: 当参数withDict为true时,由于一对一从表对象可能关联远程字典,如从表是Teacher对象, + * Teacher对象包含gradeId字段,而该字段关联的Grade对象与Teacher对象位于不同的服务。 + * 此时,在关联gradeId远程字典时,就可能产生RPC调用。参数ignoreRpcError应用于该远程 + * 调用。 + * + * @param resultList 实体对象数据列表。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + private void buildOneToOneForDataList(List resultList, boolean withDict, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.localRelationOneToOneStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (LocalRelationStruct relationStruct : this.localRelationOneToOneStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + // 从主表集合中,抽取主表关联字段的集合,再以in list形式去从表中查询。 + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + BaseService relationService = relationStruct.localService; + List relationList = + relationService.getInList(relationStruct.relationOneToOne.slaveIdField(), masterIdSet); + MyModelUtil.makeOneToOneRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + // 仅仅当需要加载从表字典关联时,才去加载。 + if (withDict && relationStruct.relationOneToOne.loadSlaveDict() + && CollectionUtils.isNotEmpty(relationList)) { + @SuppressWarnings("unchecked") + BaseService proxyTarget = + (BaseService) AopTargetUtil.getTarget(relationService); + // 关联常量字典 + proxyTarget.buildConstDictForDataList(relationList, ignoreFields); + // 关联本地字典。 + proxyTarget.buildDictForDataList(relationList, false, ignoreFields); + // 关联远程字典。 + proxyTarget.buildRemoteDictForDataList(relationList, false, ignoreFields); + } + } + } + + /** + * 为实体对象数据集成本地一对一关联数据。 + * + * @param dataObject 实体对象。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @throws RemoteDataBuildException ignoreRpcError()方法返回false,同时远程服务调用出现错误时抛出此异常。 + */ + private void buildOneToOneForData(M dataObject, boolean withDict, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.localRelationOneToOneStructList)) { + return; + } + for (LocalRelationStruct relationStruct : this.localRelationOneToOneStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + BaseService relationService = relationStruct.localService; + Object relationObject = relationService.getOne(relationStruct.relationOneToOne.slaveIdField(), id); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); + // 仅仅当需要加载从表字典关联时,才去加载。 + if (withDict && relationStruct.relationOneToOne.loadSlaveDict() && relationObject != null) { + @SuppressWarnings("unchecked") + BaseService proxyTarget = + (BaseService) AopTargetUtil.getTarget(relationService); + // 关联常量字典 + proxyTarget.buildConstDictForData(relationObject, ignoreFields); + // 关联本地字典。 + proxyTarget.buildDictForData(relationObject, false, ignoreFields); + // 关联远程字典。 + proxyTarget.buildRemoteDictForData(relationObject, false, ignoreFields); + } + } + } + } + + /** + * 为实体对象参数列表数据集成本地一对多关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyForDataList(List resultList, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.localRelationOneToManyStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (LocalRelationStruct relationStruct : this.localRelationOneToManyStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + // 从主表集合中,抽取主表关联字段的集合,再以in list形式去从表中查询。 + if (CollectionUtils.isNotEmpty(masterIdSet)) { + BaseService relationService = relationStruct.localService; + List relationList = + relationService.getInList(relationStruct.relationOneToMany.slaveIdField(), masterIdSet); + MyModelUtil.makeOneToManyRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + } + } + } + + /** + * 为实体对象数据集成本地一对多关联数据。 + * + * @param dataObject 实体对象。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyForData(M dataObject, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.localRelationOneToManyStructList)) { + return; + } + for (LocalRelationStruct relationStruct : this.localRelationOneToManyStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + BaseService relationService = relationStruct.localService; + Set masterIdSet = new HashSet<>(1); + masterIdSet.add(id); + List relationObject = relationService.getInList( + relationStruct.relationOneToMany.slaveIdField(), masterIdSet); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); + } + } + } + + /** + * 为实体对象参数列表数据集成本地字典关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildDictForDataList(List resultList, boolean hasBuiltOneToOne, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.localRelationDictStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + for (LocalRelationStruct relationStruct : this.localRelationDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + List relationList = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationList = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.equalOneToOneRelationField)) + .filter(Objects::nonNull) + .collect(toList()); + } else { + String slaveId = relationStruct.relationDict.slaveIdField(); + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isNotEmpty(masterIdSet)) { + relationList = relationStruct.localService.getInList(slaveId, masterIdSet); + } + } + MyModelUtil.makeDictRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + } + } + + /** + * 为实体对象数据集成本地数据字典关联数据。 + * + * @param dataObject 实体对象。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildDictForData(T dataObject, boolean hasBuiltOneToOne, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.localRelationDictStructList)) { + return; + } + for (LocalRelationStruct relationStruct : this.localRelationDictStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object relationObject = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationObject = ReflectUtil.getFieldValue(dataObject, relationStruct.equalOneToOneRelationField); + } else { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + relationObject = relationStruct.localService.getOne(relationStruct.relationDict.slaveIdField(), id); + } + } + MyModelUtil.makeDictRelation( + modelClass, dataObject, relationObject, relationStruct.relationField.getName()); + } + } + + /** + * 根据实体对象参数列表和过滤条件,集成本地多对多关联聚合计算数据。 + * + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildManyToManyAggregationForDataList( + List resultList, Map> criteriaListMap, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.localRelationManyToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(this.localRelationManyToManyAggrStructList.size()); + } + for (LocalRelationStruct relationStruct : this.localRelationManyToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; + } + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + // 提取关联中用到的各种字段和表数据。 + LocalAggregationRelationInfo basicRelationInfo = + this.parseLocalAggregationRelationInfo(relationStruct, criteriaListMap); + // 构建多表关联的where语句 + StringBuilder whereClause = new StringBuilder(256); + // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 + if (!basicRelationInfo.onlySelectRelationTable) { + whereClause.append(basicRelationInfo.relationTable) + .append(".") + .append(basicRelationInfo.relationSlaveColumn) + .append(" = ") + .append(basicRelationInfo.slaveTable) + .append(".") + .append(basicRelationInfo.slaveColumn); + } else { + whereClause.append("1 = 1"); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria inlistFilter = new MyWhereCriteria(); + inlistFilter.setCriteria(relation.relationModelClass(), + relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + criteriaList.add(inlistFilter); + if (StringUtils.isNotBlank(relationStruct.localService.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relation.slaveModelClass(), + relationStruct.localService.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + StringBuilder tableNames = new StringBuilder(64); + tableNames.append(basicRelationInfo.relationTable); + if (!basicRelationInfo.onlySelectRelationTable) { + tableNames.append(", ").append(basicRelationInfo.slaveTable); + } + List> aggregationMapList = + mapper().getGroupedListByCondition(tableNames.toString(), + basicRelationInfo.selectList, whereClause.toString(), basicRelationInfo.groupBy); + doMakeAggregationData(aggregationMapList, resultList, relationStruct); + } + } + + /** + * 根据实体对象参数列表和过滤条件,集成本地一对多关联聚合计算数据。 + * + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyAggregationForDataList( + List resultList, Map> criteriaListMap, Set ignoreFields) { + if (CollectionUtils.isEmpty(this.localRelationOneToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(localRelationOneToManyAggrStructList.size()); + } + for (LocalRelationStruct relationStruct : this.localRelationOneToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isNotEmpty(masterIdSet)) { + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + // 开始获取后面所需的各种关联数据。此部分今后可以移植到缓存中,无需每次计算。 + String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + String slaveColumnName = MyModelUtil.mapToColumnName( + relation.slaveIdField(), relation.slaveModelClass()); + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + slaveTable, slaveColumnName, relation.slaveModelClass(), + slaveTable, relation.aggregationField(), relation.aggregationType()); + String selectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria inlistFilter = new MyWhereCriteria(); + inlistFilter.setCriteria(relation.slaveModelClass(), + relation.slaveIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + criteriaList.add(inlistFilter); + if (StringUtils.isNotBlank(relationStruct.localService.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relation.slaveModelClass(), + relationStruct.localService.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + List> aggregationMapList = + mapper().getGroupedListByCondition(slaveTable, selectList, criteriaString, groupBy); + doMakeAggregationData(aggregationMapList, resultList, relationStruct); + } + } + } + + /** + * 根据实体对象和过滤条件,集成本地多对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildManyToManyAggregationForData( + T dataObject, Map> criteriaListMap, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.localRelationManyToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(localRelationManyToManyAggrStructList.size()); + } + for (LocalRelationStruct relationStruct : this.localRelationManyToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue != null) { + LocalAggregationRelationInfo basicRelationInfo = + this.parseLocalAggregationRelationInfo(relationStruct, criteriaListMap); + // 组装过滤条件 + String whereClause = this.makeManyToManyWhereClause( + relationStruct, masterIdValue, basicRelationInfo, criteriaListMap); + StringBuilder tableNames = new StringBuilder(64); + tableNames.append(basicRelationInfo.relationTable); + if (!basicRelationInfo.onlySelectRelationTable) { + tableNames.append(", ").append(basicRelationInfo.slaveTable); + } + List> aggregationMapList = + mapper().getGroupedListByCondition(tableNames.toString(), + basicRelationInfo.selectList, whereClause, basicRelationInfo.groupBy); + // 将查询后的结果回填到主表数据中。 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Object value = aggregationMapList.get(0).get(MyAggregationParam.VALUE_NAME); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); + } + } + } + } + } + + /** + * 根据实体对象和过滤条件,集成本地一对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + private void buildOneToManyAggregationForData( + T dataObject, Map> criteriaListMap, Set ignoreFields) { + if (dataObject == null || CollectionUtils.isEmpty(this.localRelationOneToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(localRelationOneToManyAggrStructList.size()); + } + for (LocalRelationStruct relationStruct : this.localRelationOneToManyAggrStructList) { + if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) { + continue; + } + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue != null) { + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + String slaveColumnName = + MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + slaveTable, slaveColumnName, relation.slaveModelClass(), + slaveTable, relation.aggregationField(), relation.aggregationType()); + String selectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + String whereClause = this.makeOneToManyWhereClause( + relationStruct, masterIdValue, slaveColumnName, criteriaListMap); + // 获取分组聚合计算结果 + List> aggregationMapList = + mapper().getGroupedListByCondition(slaveTable, selectList, whereClause, groupBy); + // 将计算结果回填到主表关联字段 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Object value = aggregationMapList.get(0).get(MyAggregationParam.VALUE_NAME); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); + } + } + } + } + } + + /** + * 仅仅在spring boot 启动后的监听器事件中调用,缓存所有远程调用Client的关联关系,加速后续的数据绑定效率。 + */ + @Override + public void loadRemoteRelationStruct() { + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field f : fields) { + initializeRemoteRelationDictStruct(f); + initializeRemoteRelationStruct(f); + initializeRemoteRelationAggregationStruct(f); + } + } + + /** + * 仅仅在spring boot 启动后的监听器事件中调用,缓存所有service的关联关系,加速后续的数据绑定效率。 + */ + @Override + public void loadLocalRelationStruct() { + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field f : fields) { + initializeLocalRelationDictStruct(f); + initializeLocalRelationStruct(f); + initializeLocalRelationAggregationStruct(f); + } + } + + /** + * 缺省实现返回null,在进行一对多和多对多聚合计算时,没有额外的自定义过滤条件。如有需要,需子类自行实现。 + * + * @return 自定义过滤条件列表。 + */ + protected Map> buildAggregationAdditionalWhereCriteria() { + return null; + } + + /** + * 判断当前对象的关联字段数据是否需要被验证,如果原有对象为null,表示新对象第一次插入,则必须验证。 + * + * @param object 新对象。 + * @param originalObject 原有对象。 + * @param fieldGetter 获取需要验证字段的函数对象。 + * @param 需要验证字段的类型。 + * @return 需要关联验证返回true,否则false。 + */ + protected boolean needToVerify(M object, M originalObject, Function fieldGetter) { + if (object == null) { + return false; + } + T data = fieldGetter.apply(object); + if (data == null) { + return false; + } + if (data instanceof String) { + String stringData = (String) data; + if (stringData.length() == 0) { + return false; + } + } + if (originalObject == null) { + return true; + } + T originalData = fieldGetter.apply(originalObject); + return !data.equals(originalData); + } + + /** + * 判断远程关联数据是否包含错误信息。 + * + * @param responseResult 远程服务返回结果对象。 + * @return true表示包含错误信息,否则false。 + */ + protected boolean hasErrorOfVerifyRemoteRelatedData(ResponseResult responseResult) { + return !responseResult.isSuccess() || Boolean.FALSE.equals(responseResult.getData()); + } + + /** + * 因为Mybatis Plus中QueryWrapper的条件方法都要求传入数据表字段名,因此提供该函数将 + * Java实体对象的字段名转换为数据表字段名,如果不存在会抛出异常。 + * 另外在MyModelUtil.mapToColumnName有一级缓存,对于查询过的对象字段都会放到缓存中, + * 下次映射转换的时候,会直接从缓存获取。 + * + * @param fieldName Java实体对象的字段名。 + * @return 对应的数据表字段名。 + */ + protected String safeMapToColumnName(String fieldName) { + String columnName = MyModelUtil.mapToColumnName(fieldName, modelClass); + if (columnName == null) { + throw new InvalidDataFieldException(modelClass.getSimpleName(), fieldName); + } + return columnName; + } + + /** + * 因为Mybatis Plus在update的时候,不能将实体对象中值为null的字段,更新为null, + * 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。 + * 该函数会遍历实体对象中,所有不包含@Transient注解,没有transient修饰符的字段,如果 + * 当前对象的该字段值为null,则会调用UpdateWrapper的set方法,将该字段赋值为null。 + * 相比于其他重载方法,该方法会将参数中的主键id,设置到UpdateWrapper的过滤条件中。 + * + * @param o 实体对象。 + * @param id 实体对象的主键值。 + * @return 创建后的UpdateWrapper。 + */ + protected UpdateWrapper createUpdateQueryForNullValue(M o, K id) { + UpdateWrapper uw = createUpdateQueryForNullValue(o, modelClass); + try { + M filter = modelClass.newInstance(); + this.setIdFieldMethod.invoke(filter, id); + uw.setEntity(filter); + } catch (Exception e) { + log.error("Failed to call reflection code of BaseService.createUpdateQueryForNullValue.", e); + throw new MyRuntimeException(e); + } + return uw; + } + + /** + * 因为Mybatis Plus在update的时候,不能将实体对象中值为null的字段,更新为null, + * 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。 + * 该函数会遍历实体对象中,所有不包含@Transient注解,没有transient修饰符的字段,如果 + * 当前对象的该字段值为null,则会调用UpdateWrapper的set方法,将该字段赋值为null。 + * + * @param o 实体对象。 + * @return 创建后的UpdateWrapper。 + */ + protected UpdateWrapper createUpdateQueryForNullValue(M o) { + return createUpdateQueryForNullValue(o, modelClass); + } + + /** + * 因为Mybatis Plus在update的时候,不能将实体对象中值为null的字段,更新为null, + * 而且忽略更新,在全部更新场景下,这个是非常重要的,所以我们写了这个函数绕开这一问题。 + * 该函数会遍历实体对象中,所有不包含@Transient注解,没有transient修饰符的字段,如果 + * 当前对象的该字段值为null,则会调用UpdateWrapper的set方法,将该字段赋值为null。 + * + * @param o 实体对象。 + * @param clazz 实体对象的class。 + * @return 创建后的UpdateWrapper。 + */ + public static UpdateWrapper createUpdateQueryForNullValue(T o, Class clazz) { + UpdateWrapper uw = new UpdateWrapper<>(); + Field[] fields = ReflectUtil.getFields(clazz); + List nullColumnList = new LinkedList<>(); + for (Field field : fields) { + TableField tableField = field.getAnnotation(TableField.class); + if (tableField == null || tableField.exist()) { + int modifiers = field.getModifiers(); + // transient类型的字段不能作为查询条件,静态字段和逻辑删除都不考虑。 + int transientMask = 128; + if ((modifiers & transientMask) == 1 + || Modifier.isStatic(modifiers) + || field.getAnnotation(TableLogic.class) != null) { + continue; + } + // 仅当实体对象参数中,当前字段值为null的时候,才会赋值给UpdateWrapper。 + // 以便在后续的更新中,可以将这些null字段的值设置到数据库表对应的字段中。 + if (ReflectUtil.getFieldValue(o, field) == null) { + nullColumnList.add(MyModelUtil.safeMapToColumnName(field.getName(), clazz)); + } + } + } + if (CollectionUtils.isNotEmpty(nullColumnList)) { + for (String nullColumn : nullColumnList) { + uw.set(nullColumn, null); + } + } + return uw; + } + + @SuppressWarnings("unchecked") + private void initializeRemoteRelationDictStruct(Field f) { + RelationDict relationDict = f.getAnnotation(RelationDict.class); + if (relationDict != null) { + if (relationDict.slaveClientClass().equals(DummyClass.class)) { + return; + } + RemoteRelationStruct relationStruct = new RemoteRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationDict.masterIdField()); + relationStruct.relationDict = relationDict; + if (StringUtils.isNotBlank(relationDict.equalOneToOneRelationField())) { + relationStruct.equalOneToOneRelationField = + ReflectUtil.getField(modelClass, relationDict.equalOneToOneRelationField()); + } + Object client = ApplicationContextHolder.getBean(relationDict.slaveClientClass()); + relationStruct.remoteClient = (BaseClient) client; + remoteRelationDictStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeRemoteRelationStruct(Field f) { + RelationOneToOne relationOneToOne = f.getAnnotation(RelationOneToOne.class); + if (relationOneToOne != null) { + if (relationOneToOne.slaveClientClass().equals(DummyClass.class)) { + return; + } + RemoteRelationStruct relationStruct = new RemoteRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToOne.masterIdField()); + relationStruct.relationOneToOne = relationOneToOne; + Object client = ApplicationContextHolder.getBean(relationOneToOne.slaveClientClass()); + relationStruct.remoteClient = (BaseClient) client; + remoteRelationOneToOneStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeRemoteRelationAggregationStruct(Field f) { + RelationOneToManyAggregation relationOneToManyAggregation = + f.getAnnotation(RelationOneToManyAggregation.class); + if (relationOneToManyAggregation != null) { + if (relationOneToManyAggregation.slaveClientClass().equals(DummyClass.class)) { + return; + } + RemoteRelationStruct relationStruct = new RemoteRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToManyAggregation.masterIdField()); + relationStruct.relationOneToManyAggregation = relationOneToManyAggregation; + Object client = ApplicationContextHolder.getBean(relationOneToManyAggregation.slaveClientClass()); + relationStruct.remoteClient = (BaseClient) client; + remoteRelationOneToManyAggrStructList.add(relationStruct); + return; + } + RelationManyToManyAggregation relationManyToManyAggregation = + f.getAnnotation(RelationManyToManyAggregation.class); + if (relationManyToManyAggregation != null) { + if (relationManyToManyAggregation.slaveClientClass().equals(DummyClass.class)) { + return; + } + RemoteRelationStruct relationStruct = new RemoteRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField( + modelClass, relationManyToManyAggregation.masterIdField()); + relationStruct.relationManyToManyAggregation = relationManyToManyAggregation; + Object client = ApplicationContextHolder.getBean(relationManyToManyAggregation.slaveClientClass()); + relationStruct.remoteClient = (BaseClient) client; + remoteRelationManyToManyAggrStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeLocalRelationStruct(Field f) { + RelationOneToOne relationOneToOne = f.getAnnotation(RelationOneToOne.class); + if (relationOneToOne != null) { + if (StringUtils.isBlank(relationOneToOne.slaveServiceName())) { + return; + } + LocalRelationStruct relationStruct = new LocalRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToOne.masterIdField()); + relationStruct.relationOneToOne = relationOneToOne; + if (StringUtils.isNotBlank(relationOneToOne.slaveServiceName())) { + relationStruct.localService = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToOne.slaveServiceName())); + } else { + relationStruct.localService = (BaseService) + ApplicationContextHolder.getBean(relationOneToOne.slaveServiceClass()); + } + localRelationOneToOneStructList.add(relationStruct); + return; + } + RelationOneToMany relationOneToMany = f.getAnnotation(RelationOneToMany.class); + if (relationOneToMany != null) { + LocalRelationStruct relationStruct = new LocalRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToMany.masterIdField()); + relationStruct.relationOneToMany = relationOneToMany; + if (StringUtils.isNotBlank(relationOneToMany.slaveServiceName())) { + relationStruct.localService = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToMany.slaveServiceName())); + } else { + relationStruct.localService = (BaseService) + ApplicationContextHolder.getBean(relationOneToMany.slaveServiceClass()); + } + localRelationOneToManyStructList.add(relationStruct); + return; + } + RelationManyToMany relationManyToMany = f.getAnnotation(RelationManyToMany.class); + if (relationManyToMany != null) { + LocalRelationStruct relationStruct = new LocalRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationManyToMany.relationMasterIdField()); + relationStruct.relationManyToMany = relationManyToMany; + relationStruct.manyToManyMapper = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationManyToMany.relationMapperName())); + localRelationManyToManyStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeLocalRelationDictStruct(Field f) { + RelationConstDict relationConstDict = f.getAnnotation(RelationConstDict.class); + if (relationConstDict != null) { + LocalRelationStruct relationStruct = new LocalRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationConstDict.masterIdField()); + Field dictMapField = ReflectUtil.getField(relationConstDict.constantDictClass(), "DICT_MAP"); + relationStruct.dictMap = (Map) ReflectUtil.getFieldValue(modelClass, dictMapField); + relationConstDictStructList.add(relationStruct); + return; + } + RelationDict relationDict = f.getAnnotation(RelationDict.class); + if (relationDict != null) { + if (StringUtils.isBlank(relationDict.slaveServiceName())) { + return; + } + LocalRelationStruct relationStruct = new LocalRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationDict.masterIdField()); + relationStruct.relationDict = relationDict; + if (StringUtils.isNotBlank(relationDict.equalOneToOneRelationField())) { + relationStruct.equalOneToOneRelationField = + ReflectUtil.getField(modelClass, relationDict.equalOneToOneRelationField()); + } + if (StringUtils.isNotBlank(relationDict.slaveServiceName())) { + relationStruct.localService = + ApplicationContextHolder.getBean(StringUtils.uncapitalize(relationDict.slaveServiceName())); + } else { + relationStruct.localService = (BaseService) + ApplicationContextHolder.getBean(relationDict.slaveServiceClass()); + } + localRelationDictStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeLocalRelationAggregationStruct(Field f) { + RelationOneToManyAggregation relationOneToManyAggregation = f.getAnnotation(RelationOneToManyAggregation.class); + if (relationOneToManyAggregation != null) { + if (!relationOneToManyAggregation.slaveClientClass().equals(DummyClass.class)) { + return; + } + LocalRelationStruct relationStruct = new LocalRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToManyAggregation.masterIdField()); + relationStruct.relationOneToManyAggregation = relationOneToManyAggregation; + if (StringUtils.isNotBlank(relationOneToManyAggregation.slaveServiceName())) { + relationStruct.localService = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToManyAggregation.slaveServiceName())); + } else { + relationStruct.localService = (BaseService) + ApplicationContextHolder.getBean(relationOneToManyAggregation.slaveServiceClass()); + } + localRelationOneToManyAggrStructList.add(relationStruct); + return; + } + RelationManyToManyAggregation relationManyToManyAggregation = f.getAnnotation(RelationManyToManyAggregation.class); + if (relationManyToManyAggregation != null) { + if (!relationManyToManyAggregation.slaveClientClass().equals(DummyClass.class)) { + return; + } + LocalRelationStruct relationStruct = new LocalRelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationManyToManyAggregation.masterIdField()); + relationStruct.relationManyToManyAggregation = relationManyToManyAggregation; + if (StringUtils.isNotBlank(relationManyToManyAggregation.slaveServiceName())) { + relationStruct.localService = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationManyToManyAggregation.slaveServiceName())); + } else { + relationStruct.localService = (BaseService) + ApplicationContextHolder.getBean(relationManyToManyAggregation.slaveServiceClass()); + } + localRelationManyToManyAggrStructList.add(relationStruct); + } + } + + private Object normalizeData(Object data, Class clazz) { + if (data instanceof JSONObject) { + return ((JSONObject) data).toJavaObject(clazz); + } + return data; + } + + private void logErrorOrThrowException(String errorMsg) { + log.error(LogMessageUtil.makeRpcError(errorMsg)); + if (!this.ignoreRpcError()) { + throw new RemoteDataBuildException(errorMsg); + } + } + + private LocalAggregationRelationInfo parseLocalAggregationRelationInfo( + LocalRelationStruct relationStruct, Map> criteriaListMap) { + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + LocalAggregationRelationInfo relationInfo = new LocalAggregationRelationInfo(); + // 提取关联中用到的各种字段和表数据。 + relationInfo.slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + relationInfo.relationTable = MyModelUtil.mapToTableName(relation.relationModelClass()); + relationInfo.relationMasterColumn = + MyModelUtil.mapToColumnName(relation.relationMasterIdField(), relation.relationModelClass()); + relationInfo.relationSlaveColumn = + MyModelUtil.mapToColumnName(relation.relationSlaveIdField(), relation.relationModelClass()); + relationInfo.slaveColumn = MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + // 判断是否只需要关联中间表即可,从而提升查询统计的效率。 + // 1. 统计字段为中间表字段。2. 自定义过滤条件中没有基于从表字段的过滤条件。 + relationInfo.onlySelectRelationTable = + relation.aggregationModelClass().equals(relation.relationModelClass()); + if (relationInfo.onlySelectRelationTable && MapUtils.isNotEmpty(criteriaListMap)) { + List criteriaList = + criteriaListMap.get(relationStruct.relationField.getName()); + if (CollectionUtils.isNotEmpty(criteriaList)) { + for (MyWhereCriteria whereCriteria : criteriaList) { + if (whereCriteria.getModelClazz().equals(relation.slaveModelClass())) { + relationInfo.onlySelectRelationTable = false; + break; + } + } + } + } + String aggregationTable = relation.aggregationModelClass().equals(relation.relationModelClass()) + ? relationInfo.relationTable : relationInfo.slaveTable; + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + relationInfo.relationTable, relationInfo.relationMasterColumn, relation.aggregationModelClass(), + aggregationTable, relation.aggregationField(), relation.aggregationType()); + relationInfo.selectList = selectAndGroupByTuple.getFirst(); + relationInfo.groupBy = selectAndGroupByTuple.getSecond(); + return relationInfo; + } + + private RemoteAggregationRelationInfo parseRemoteAggregationRelationInfo( + RemoteRelationStruct relationStruct, + Map> criteriaListMap, + Object value, + boolean forDataList) { + RemoteAggregationRelationInfo relationInfo = new RemoteAggregationRelationInfo(); + // 这里需要拆分出哪些是关联表过滤,哪些是从表过滤。 + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + relationInfo.relationTable = MyModelUtil.mapToTableName(relation.relationModelClass()); + relationInfo.relationMasterColumn = MyModelUtil.mapToColumnName( + relation.relationMasterIdField(), relation.relationModelClass()); + relationInfo.relationSlaveColumn = MyModelUtil.mapToColumnName( + relation.relationSlaveIdField(), relation.relationModelClass()); + // 这里需要拆分出哪些是关联表过滤,哪些是从表过滤。 + List relationCriteriaList = new LinkedList<>(); + // 先把关联表的inlist过滤 [r_table.master_id = masterIdValue] 预先插入。 + MyWhereCriteria criteria = new MyWhereCriteria(); + if (forDataList) { + criteria.setCriteria(relation.relationModelClass(), + relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_IN, value); + } else { + criteria.setCriteria(relation.relationModelClass(), + relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_EQUAL, value); + } + relationCriteriaList.add(criteria); + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (CollectionUtils.isNotEmpty(criteriaList)) { + for (MyWhereCriteria c : criteriaList) { + if (c.getModelClazz().equals(relation.relationModelClass())) { + relationCriteriaList.add(c); + } else if (c.getModelClazz().equals(relation.slaveModelClass())) { + if (relationInfo.slaveCriteriaList == null) { + relationInfo.slaveCriteriaList = new LinkedList<>(); + } + relationInfo.slaveCriteriaList.add(c); + } + } + } + relationInfo.relationWhereClause = MyWhereCriteria.makeCriteriaString(relationCriteriaList); + return relationInfo; + } + + private void processRemoteManyToManyAggregationWithRelationModel( + RemoteAggregationRelationInfo relationInfo, RelationManyToManyAggregation relation, + RemoteRelationStruct relationStruct, List resultList, Object value, boolean forDataList) { + // 1. 先构建SQL中的Select List,下面的函数返回值是: + // relationTable.relationMasterColumn as GROUPED_KEY, SUM(relationTable.aggregationField) AGGREGATED_VALUE + // 2. 基于中间表与主表的关联字段构建SQL语句中的GROUP BY从句。 + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + relationInfo.relationTable, relationInfo.relationMasterColumn, + relation.aggregationModelClass(), relationInfo.relationTable, + relation.aggregationField(), relation.aggregationType()); + String groupedSelectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + List> aggregationMapList = null; + // 过滤条件中不涉及远程从表,那么可以直接进行基于中间表的SQL计算即可,避免了远程调用。 + if (relationInfo.slaveCriteriaList == null) { + // 3. 下面的函数调用将会执行仅包含中间表的SQL。 + aggregationMapList = mapper().getGroupedListByCondition( + relationInfo.relationTable, groupedSelectList, relationInfo.relationWhereClause, groupBy); + this.doMakeAggregationData(aggregationMapList, resultList, relationStruct); + return; + } + // 此场景是最复杂的,实现步骤如下: + // 1. 先基于主表的inlist和中间表的过滤条件,过滤出符合条件的中间表数据列表。 + // 构建获取中间表数据SQL的Select List部分。 + StringBuilder selectList = new StringBuilder(64); + selectList.append(relationInfo.relationMasterColumn).append(", ").append(relationInfo.relationSlaveColumn); + // SQL中的Where从句不变,和上面的过滤逻辑是一致的。 + List> mapList = mapper().getListByCondition( + relationInfo.relationTable, selectList.toString(), relationInfo.relationWhereClause, null); + if (CollectionUtils.isNotEmpty(mapList)) { + // 2. 基于中间表的查询结果,即中间表中与从表关联字段的列表作为从表的inlist过滤条件, + // 同时结合远程从表的自身过滤条件,获取远程从表数据。目前仅需从表中的关联字段即可。 + MyWhereCriteria slaveInlistFilterCriteria = new MyWhereCriteria(); + // 将中间表对从表进行inlist过滤的条件手动插入。 + slaveInlistFilterCriteria.setCriteria(relation.slaveIdField(), MyWhereCriteria.OPERATOR_IN, + mapList.stream().map(m -> m.get(relationInfo.relationSlaveColumn)).collect(toSet())); + relationInfo.slaveCriteriaList.add(slaveInlistFilterCriteria); + MyQueryParam queryParam = new MyQueryParam(); + queryParam.setCriteriaList(relationInfo.slaveCriteriaList); + // 远程从表返回的结果集中,仅仅包含从表中的关联字段即可。 + List slaveSelectList = new LinkedList<>(); + slaveSelectList.add(relation.slaveIdField()); + queryParam.setSelectFieldList(slaveSelectList); + // 关联集成数据需要把数据权限过滤关闭,以保证计算结果的正确性。 + queryParam.setUseDataFilter(false); + ResponseResult>> result = relationStruct.remoteClient.listMapBy(queryParam); + if (!result.isSuccess()) { + this.logErrorOrThrowException(result.getErrorMessage()); + return; + } + // 3. 将远程从表查询的返回结果,作为中间表与从表关联字段(relationSlaveColumn)的inlistFilter。 + // 并计算最终聚合结果。 + List slaveList = null; + if (result.getData() != null) { + slaveList = result.getData().getDataList() + .stream().map(m -> m.get(relation.slaveIdField())).collect(toList()); + } + if (CollectionUtils.isNotEmpty(slaveList)) { + // 中间表的最终过滤条件是从表返回的id列表将作为关联表slaveIdColumn的inlist-filter, + // 同时原有主表的id列表仍将作为关联表masterIdColumn的inlist-filter。 + List finalRelationCriteriaList = new LinkedList<>(); + MyWhereCriteria relationSlaveIdInListFilterCriteria = new MyWhereCriteria(); + relationSlaveIdInListFilterCriteria.setCriteria(relation.relationModelClass(), + relation.relationSlaveIdField(), MyWhereCriteria.OPERATOR_IN, slaveList); + finalRelationCriteriaList.add(relationSlaveIdInListFilterCriteria); + MyWhereCriteria relationMasterIdInListFilterCriteria = new MyWhereCriteria(); + if (forDataList) { + relationMasterIdInListFilterCriteria.setCriteria(relation.relationModelClass(), + relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_IN, value); + } else { + relationMasterIdInListFilterCriteria.setCriteria(relation.relationModelClass(), + relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_EQUAL, value); + } + finalRelationCriteriaList.add(relationMasterIdInListFilterCriteria); + String whereClause = MyWhereCriteria.makeCriteriaString(finalRelationCriteriaList); + aggregationMapList = mapper().getGroupedListByCondition( + relationInfo.relationTable, groupedSelectList, whereClause, groupBy); + } + } + this.doMakeAggregationData(aggregationMapList, resultList, relationStruct); + } + + private void processRemoteManyToManyAggregationWithSlaveModel( + RemoteAggregationRelationInfo relationInfo, + RelationManyToManyAggregation relation, + RemoteRelationStruct relationStruct, + List resultList) { + // 聚合字段在远程从表,计算步骤如下: + // 1. 先进行中间表过滤,并将中间表的过滤结果。 + StringBuilder selectList = new StringBuilder(64); + selectList.append(relationInfo.relationMasterColumn).append(", ").append(relationInfo.relationSlaveColumn); + List> relationMapList = + mapper().getListByCondition(relationInfo.relationTable, + selectList.toString(), relationInfo.relationWhereClause, null); + if (CollectionUtils.isNotEmpty(relationMapList)) { + // 2. 将中间表的过滤结果,作为从表关联字段的inlistFilter过滤,再结合从表自身的过滤条件, + // 一并传给远程服务进行聚合计算,并返回计算结果。 + MyAggregationParam aggregationParam = createAggregationParam(AggregationKind.MANY_TO_MANY, + relation.aggregationType(), relation.aggregationField(), null); + aggregationParam.setInFilterField(relation.slaveIdField()); + if (relationInfo.slaveCriteriaList != null) { + aggregationParam.setWhereCriteriaList(relationInfo.slaveCriteriaList); + } + // 将过滤后的中间表结果集手动分组,传给远程分组计算调用,保证一次返回所有分组结果。 + Map> groupedFilterMap = + relationMapList.stream().collect( + groupingBy(m -> m.get(relationInfo.relationMasterColumn), + mapping(n -> n.get(relationInfo.relationSlaveColumn), toSet()))); + aggregationParam.setGroupedInFilterValues(groupedFilterMap); + aggregationParam.setUseDataFilter(false); + // 开始将远程返回的聚合计算结果集合,回填到主表中的聚合虚拟字段。 + ResponseResult>> result = + relationStruct.remoteClient.aggregateBy(aggregationParam); + if (result.isSuccess()) { + this.doMakeAggregationData(result.getData(), resultList, relationStruct); + } else { + this.logErrorOrThrowException(result.getErrorMessage()); + } + } + } + + private String makeManyToManyWhereClause( + LocalRelationStruct relationStruct, + Object masterIdValue, + LocalAggregationRelationInfo localRelationInfo, + Map> criteriaListMap) { + StringBuilder whereClause = new StringBuilder(256); + whereClause.append(localRelationInfo.relationTable) + .append(".").append(localRelationInfo.relationMasterColumn); + if (masterIdValue instanceof Number) { + whereClause.append(" = ").append(masterIdValue); + } else { + whereClause.append(" = '").append(masterIdValue).append("'"); + } + // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 + if (!localRelationInfo.onlySelectRelationTable) { + whereClause.append(AND_OP) + .append(localRelationInfo.relationTable) + .append(".") + .append(localRelationInfo.relationSlaveColumn) + .append(" = ") + .append(localRelationInfo.slaveTable) + .append(".") + .append(localRelationInfo.slaveColumn); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + if (StringUtils.isNotBlank(relationStruct.localService.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relationStruct.relationManyToManyAggregation.slaveModelClass(), + relationStruct.localService.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + if (CollectionUtils.isNotEmpty(criteriaList)) { + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + } + return whereClause.toString(); + } + + private String makeOneToManyWhereClause( + LocalRelationStruct relationStruct, + Object masterIdValue, + String slaveColumnName, + Map> criteriaListMap) { + StringBuilder whereClause = new StringBuilder(64); + if (masterIdValue instanceof Number) { + whereClause.append(slaveColumnName).append(" = ").append(masterIdValue); + } else { + whereClause.append(slaveColumnName).append(" = '").append(masterIdValue).append("'"); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + if (StringUtils.isNotBlank(relationStruct.localService.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relationStruct.relationOneToManyAggregation.slaveModelClass(), + relationStruct.localService.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + if (CollectionUtils.isNotEmpty(criteriaList)) { + String criteriaString = MyWhereCriteria.makeCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + } + return whereClause.toString(); + } + + private static class LocalAggregationRelationInfo { + private String slaveTable; + private String slaveColumn; + private String relationTable; + private String relationMasterColumn; + private String relationSlaveColumn; + private String selectList; + private String groupBy; + private boolean onlySelectRelationTable; + } + + private static class RemoteAggregationRelationInfo { + private String relationTable; + private String relationMasterColumn; + private String relationSlaveColumn; + private String relationWhereClause; + private List slaveCriteriaList; + } + + private void doMakeAggregationData( + List> aggregationMapList, + List resultList, + RelationStruct relationStruct) { + // 根据获取的分组聚合结果集,绑定到主表总的关联字段。 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Map relatedMap = new HashMap<>(aggregationMapList.size()); + for (Map map : aggregationMapList) { + relatedMap.put(map.get(MyAggregationParam.KEY_NAME), map.get(MyAggregationParam.VALUE_NAME)); + } + for (M dataObject : resultList) { + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue != null) { + Object value = relatedMap.get(masterIdValue); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); + } + } + } + } + } + + private MyAggregationParam createAggregationParam(int kind, int type, String aggregationField, String groupField) { + MyAggregationParam aggregationParam = new MyAggregationParam(); + aggregationParam.setAggregationKind(kind); + aggregationParam.setAggregationType(type); + aggregationParam.setAggregationField(aggregationField); + aggregationParam.setGroupField(groupField); + return aggregationParam; + } + + private Tuple2 makeSelectListAndGroupByClause( + String groupTableName, + String groupColumnName, + Class aggregationModel, + String aggregationTableName, + String aggregationField, + Integer aggregationType) { + if (!AggregationType.isValid(aggregationType)) { + throw new IllegalArgumentException("Invalid AggregationType Value [" + + aggregationType + "] in Model [" + aggregationModel.getName() + "]."); + } + String aggregationFunc = AggregationType.getAggregationFunction(aggregationType); + String aggregationColumn = MyModelUtil.mapToColumnName(aggregationField, aggregationModel); + if (StringUtils.isBlank(aggregationColumn)) { + throw new IllegalArgumentException("Invalid AggregationField [" + + aggregationField + "] in Model [" + aggregationModel.getName() + "]."); + } + // 构建Select List + // 如:r_table.master_id groupedKey, SUM(r_table.aggr_column) aggregated_value + StringBuilder groupedSelectList = new StringBuilder(128); + groupedSelectList.append(groupTableName) + .append(".") + .append(groupColumnName) + .append(" ") + .append(MyAggregationParam.KEY_NAME) + .append(", ") + .append(aggregationFunc) + .append("(") + .append(aggregationTableName) + .append(".") + .append(aggregationColumn) + .append(") ") + .append(MyAggregationParam.VALUE_NAME) + .append(" "); + StringBuilder groupBy = new StringBuilder(64); + groupBy.append(groupTableName).append(".").append(groupColumnName); + return new Tuple2<>(groupedSelectList.toString(), groupBy.toString()); + } + + static class RelationStruct { + protected Field relationField; + protected Field masterIdField; + } + + static class LocalRelationStruct extends RelationStruct { + private Field equalOneToOneRelationField; + private BaseService localService; + private BaseDaoMapper manyToManyMapper; + private Map dictMap; + private RelationDict relationDict; + private RelationOneToOne relationOneToOne; + private RelationOneToMany relationOneToMany; + private RelationManyToMany relationManyToMany; + private RelationOneToManyAggregation relationOneToManyAggregation; + private RelationManyToManyAggregation relationManyToManyAggregation; + } + + static class RemoteRelationStruct extends RelationStruct { + private Field equalOneToOneRelationField; + private BaseClient remoteClient; + private RelationDict relationDict; + private RelationOneToOne relationOneToOne; + private RelationOneToManyAggregation relationOneToManyAggregation; + private RelationManyToManyAggregation relationManyToManyAggregation; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/IBaseDictService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/IBaseDictService.java new file mode 100644 index 00000000..87a56497 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/IBaseDictService.java @@ -0,0 +1,82 @@ +package com.orangeforms.common.core.base.service; + +import java.io.Serializable; +import java.util.List; + +/** + * 带有缓存功能的字典Service接口。 + * + * @param Model实体对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2020-08-08 + */ +public interface IBaseDictService extends IBaseService { + + /** + * 重新加载数据库中所有当前表数据到系统内存。 + * + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + void reloadCachedData(boolean force); + + /** + * 保存新增对象。 + * + * @param data 新增对象。 + * @return 返回新增对象。 + */ + M saveNew(M data); + + /** + * 更新数据对象。 + * + * @param data 更新的对象。 + * @param originalData 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(M data, M originalData); + + /** + * 删除指定数据。 + * + * @param id 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(K id); + + /** + * 直接从缓存池中获取所有数据。 + * + * @return 返回所有数据。 + */ + List getAllListFromCache(); + + /** + * 存入缓存。 + * + * @param data 新增或更新数据。 + */ + void putDictionaryCache(M data); + + /** + * 根据字典主键将数据从缓存中删除。 + * + * @param id 字典主键。 + */ + void removeDictionaryCache(K id); + + /** + * 根据字典对象将数据从缓存中删除。 + * + * @param data 字典数据。 + */ + void removeDictionaryCacheByModel(M data); + + /** + * 获取缓存中的数据数量。 + * + * @return 缓存中的数据总量。 + */ + int getCachedCount(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/IBaseService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/IBaseService.java new file mode 100644 index 00000000..91ba686a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/base/service/IBaseService.java @@ -0,0 +1,409 @@ +package com.orangeforms.common.core.base.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.orangeforms.common.core.object.CallResult; +import com.orangeforms.common.core.object.MyRelationParam; + +import java.io.Serializable; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +/** + * 所有Service的接口。 + * + * @param Model对象的类型。 + * @param Model对象主键的类型。 + * @author Jerry + * @date 2020-08-08 + */ +public interface IBaseService extends IService{ + + /** + * 如果主键存在则更新,否则新增保存实体对象。 + * + * @param data 实体对象数据。 + * @param saveNew 新增实体对象方法。 + * @param update 更新实体对象方法。 + */ + void saveNewOrUpdate(M data, Consumer saveNew, BiConsumer update); + + /** + * 如果主键存在的则更新,否则批量新增保存实体对象。 + * + * @param dataList 实体对象数据列表。 + * @param saveNewBatch 批量新增实体对象方法。 + * @param update 更新实体对象方法。 + */ + void saveNewOrUpdateBatch(List dataList, Consumer> saveNewBatch, BiConsumer update); + + /** + * 根据过滤条件删除数据。 + * + * @param filter 过滤对象。 + * @return 删除数量。 + */ + Integer removeBy(M filter); + + /** + * 基于主从表之间的关联字段,批量改更新一对多从表数据。 + * 该操作会覆盖增、删、改三个操作,具体如下: + * 1. 先删除。从表中relationFieldName字段的值为relationFieldValue, 同时主键Id不在dataList中的。 + * 2. 再批量插入。遍历dataList中没有主键Id的对象,视为新对象批量插入。 + * 3. 最后逐条更新,遍历dataList中有主键Id的对象,视为已存在对象并逐条更新。 + * 4. 如果更新时间和更新用户Id为空,我们将视当前记录为变化数据,因此使用当前时间和用户分别填充这两个字段。 + * + * @param relationFieldName 主从表关联中,从表的Java字段名。 + * @param relationFieldValue 主从表关联中,与从表关联的主表字段值。该值会被赋值给从表关联字段。 + * @param updateUserIdFieldName 一对多从表的更新用户Id字段名。 + * @param updateTimeFieldName 一对多从表的更新时间字段名 + * @param dataList 批量更新的从表数据列表。 + * @param batchInserter 从表批量插入方法。 + */ + void updateBatchOneToManyRelation( + String relationFieldName, + Object relationFieldValue, + String updateUserIdFieldName, + String updateTimeFieldName, + List dataList, + Consumer> batchInserter); + + /** + * 判断指定字段的数据是否存在,且仅仅存在一条记录。 + * 如果是基于主键的过滤,会直接调用existId过滤函数,提升性能。在有缓存的场景下,也可以利用缓存。 + * + * @param fieldName 待过滤的字段名(Java 字段)。 + * @param fieldValue 字段值。 + * @return 存在且仅存在一条返回true,否则false。 + */ + boolean existOne(String fieldName, Object fieldValue); + + /** + * 判断主键Id关联的数据是否存在。 + * + * @param id 主键Id。 + * @return 存在返回true,否则false。 + */ + boolean existId(K id); + + /** + * 返回符合 filterField = filterValue 条件的一条数据。 + * + * @param filterField 过滤的Java字段。 + * @param filterValue 过滤的Java字段值。 + * @return 查询后的数据对象。 + */ + M getOne(String filterField, Object filterValue); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * + * @param id 主表主键Id。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 查询结果对象。 + */ + M getByIdWithRelation(K id, MyRelationParam relationParam); + + /** + * 获取所有数据。 + * + * @return 返回所有数据。 + */ + List getAllList(); + + /** + * 获取排序后所有数据。 + * + * @param orderByProperties 需要排序的字段属性,这里使用Java对象中的属性名,而不是数据库字段名。 + * @return 返回排序后所有数据。 + */ + List getAllListByOrder(String... orderByProperties); + + /** + * 判断参数值主键集合中的所有数据,是否全部存在 + * + * @param idSet 待校验的主键集合。 + * @return 全部存在返回true,否则false。 + */ + boolean existAllPrimaryKeys(Set idSet); + + /** + * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 + * + * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id + * @param inFilterValues 数据值列表。 + * @return 全部存在返回true,否则false。 + */ + boolean existUniqueKeyList(String inFilterField, Set inFilterValues); + + /** + * 返回符合主键 in (idValues) 条件的所有数据。 + * + * @param idValues 主键值集合。 + * @return 检索后的数据列表。 + */ + List getInList(Set idValues); + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @return 检索后的数据列表。 + */ + List getInList(String inFilterField, Set inFilterValues); + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据,并根据orderBy字段排序。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @param orderBy 排序字段。 + * @return 检索后的数据列表。 + */ + List getInList(String inFilterField, Set inFilterValues, String orderBy); + + /** + * 返回符合主键 in (idValues) 条件的所有数据。同时返回关联数据。 + * + * @param idValues 主键值集合。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 检索后的数据列表。 + */ + List getInListWithRelation(Set idValues, MyRelationParam relationParam); + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。同时返回关联数据。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 检索后的数据列表。 + */ + List getInListWithRelation(String inFilterField, Set inFilterValues, MyRelationParam relationParam); + + /** + * 返回符合 inFilterField in (inFilterValues) 条件的所有数据,并根据orderBy字段排序。同时返回关联数据。 + * + * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 + * @param orderBy 排序字段。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @return 检索后的数据列表。 + */ + List getInListWithRelation( + String inFilterField, Set inFilterValues, String orderBy, MyRelationParam relationParam); + + /** + * 用参数对象作为过滤条件,获取数据数量。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件。 + * @return 返回过滤后的数据数量。 + */ + int getCountByFilter(M filter); + + /** + * 用参数对象作为过滤条件,判断是否存在过滤数据。 + * + * @param filter 该方法基于mybatis 通用mapper,过滤对象中,只有被赋值的字段,才会成为where中的条件。 + * @return 存在返回true,否则false。 + */ + boolean existByFilter(M filter); + + /** + * 用参数对象作为过滤条件,获取查询结果。 + * + * @param filter 该方法基于mybatis的通用mapper。如果参数为null,则返回全部数据。 + * @return 返回过滤后的数据。 + */ + List getListByFilter(M filter); + + /** + * 获取父主键Id下的所有子数据列表。 + * + * @param parentIdFieldName 父主键字段名字,如"courseId"。 + * @param parentId 父主键的值。 + * @return 父主键Id下的所有子数据列表。 + */ + List getListByParentId(String parentIdFieldName, K parentId); + + /** + * 根据指定的显示字段列表、过滤条件字符串和分组字符串,返回聚合计算后的查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectFields 选择的字段列表,多个字段逗号分隔。 + * NOTE: 如果数据表字段和Java对象字段名字不同,Java对象字段应该以别名的形式出现。 + * 如: table_column_name modelFieldName。否则无法被反射回Bean对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param groupBy SQL常量形式分组字段列表,逗号分隔。 + * @return 聚合计算后的数据结果集。 + */ + List> getGroupedListByCondition(String selectFields, String whereClause, String groupBy); + + /** + * 根据指定的显示字段列表、过滤条件字符串和排序字符串,返回查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param selectList 选择的Java字段列表。如果为空表示返回全部字段。 + * @param filter 过滤对象。 + * @param whereClause SQL常量形式的条件从句。 + * @param orderBy SQL常量形式排序字段列表,逗号分隔。 + * @return 查询结果。 + */ + List getListByCondition(List selectList, M filter, String whereClause, String orderBy); + + /** + * 用指定过滤条件,计算记录数量。(基本是内部框架使用,不建议外部接口直接使用)。 + * + * @param whereClause SQL常量形式的条件从句。 + * @return 返回过滤后的数据数量。 + */ + Integer getCountByCondition(String whereClause); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * NOTE: BaseService中会给出返回CallResult.ok()的缺省实现。每个业务服务实现类在需要的时候可以重载该方法。 + * + * @param data 数据对象。 + * @param originalData 原有数据对象,null表示data为新增对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + CallResult verifyRelatedData(M data, M originalData); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。 + * NOTE: BaseService中会给出返回CallResult.ok()的缺省实现。每个业务服务实现类在需要的时候可以重载该方法。 + * + * @param dataList 数据对象列表。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + CallResult verifyRelatedData(List dataList); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的远程字典数据和多对一主表数据是否都是合法数据。 + * NOTE: BaseService中会给出返回CallResult.ok()的缺省实现。每个业务服务实现类在需要的时候可以重载该方法。 + * + * @param data 数据对象。 + * @param originalData 原有数据对象,null表示data为新增对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + CallResult verifyRemoteRelatedData(M data, M originalData); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的远程字典数据和多对一主表数据是否都是合法数据。 + * NOTE: BaseService中会给出返回CallResult.ok()的缺省实现。每个业务服务实现类在需要的时候可以重载该方法。 + * + * @param dataList 数据对象列表。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + CallResult verifyRemoteRelatedData(List dataList); + + /** + * 根据最新对象和原有对象的数据对比,判断关联的本地和远程字典数据和多对一主表数据是否都是合法数据。 + * NOTE: BaseService中给出了缺省实现。 + * + * @param data 数据对象。 + * @param originalData 原有数据对象,null表示data为新增对象。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + CallResult verifyAllRelatedData(M data, M originalData); + + /** + * 根据最新对象列表和原有对象列表的数据对比,判断关联的本地和远程字典数据和多对一主表数据是否都是合法数据。 + * NOTE: BaseService中给出了缺省实现。 + * + * @param dataList 数据对象列表。 + * @return 数据全部正确返回true,否则false,同时返回具体的错误信息。 + */ + CallResult verifyAllRelatedData(List dataList); + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + */ + void buildRelationForDataList(List resultList, MyRelationParam relationParam); + + /** + * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + void buildRelationForDataList(List resultList, MyRelationParam relationParam, Set ignoreFields); + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + */ + void buildRelationForDataList(List resultList, MyRelationParam relationParam, int batchSize); + + /** + * 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制, + * 因此在导出数据量较大的情况下,很容易给数据库的内存、CPU和IO带来较大的压力。而通过 + * 我们的分批处理,可以极大的规避该问题的出现几率。调整batchSize的大小,也可以有效的 + * 改善运行效率。 + * 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时, + * 后面几批数据,因为skip过多而带来的效率问题。因为是单表过滤,不会给数据库带来过大的压力。 + * 之后再在主表结果集数据上进行分批级联处理。 + * 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param batchSize 每批集成的记录数量。小于等于0时将不做分批处理。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + */ + void buildRelationForDataList( + List resultList, MyRelationParam relationParam, int batchSize, Set ignoreFields); + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param 实体对象类型。 + */ + void buildRelationForData(T dataObject, MyRelationParam relationParam); + + /** + * 集成所有与主表实体对象相关的关联数据对象。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。 + * 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。 + * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * + * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 + * @param relationParam 实体对象数据组装的参数构建器。 + * @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。 + * @param 实体对象类型。 + */ + void buildRelationForData(T dataObject, MyRelationParam relationParam, Set ignoreFields); + + /** + * 仅仅在spring boot 启动后的监听器事件中调用,缓存所有远程调用Client的关联关系,加速后续的数据绑定效率。 + */ + void loadRemoteRelationStruct(); + + /** + * 仅仅在spring boot 启动后的监听器事件中调用,缓存所有service的关联关系,加速后续的数据绑定效率。 + */ + void loadLocalRelationStruct(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/DictionaryCache.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/DictionaryCache.java new file mode 100644 index 00000000..1701fc2f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/DictionaryCache.java @@ -0,0 +1,88 @@ +package com.orangeforms.common.core.cache; + +import java.util.List; +import java.util.Set; + +/** + * 主要用于完整缓存字典表数据的接口对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +public interface DictionaryCache { + + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ + List getAll(); + + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ + List getInList(Set keys); + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + void putAll(List dataList); + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + void reload(List dataList, boolean force); + + /** + * 从缓存中获取指定的数据。 + * + * @param key 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ + V get(K key); + + /** + * 将数据存入缓存。 + * + * @param key 通常为字典数据的主键。 + * @param object 字典数据对象。 + */ + void put(K key, V object); + + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ + int getCount(); + + /** + * 删除缓存中指定的键。 + * + * @param key 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + V invalidate(K key); + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + void invalidateSet(Set keys); + + /** + * 清空缓存。 + */ + void invalidateAll(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/MapDictionaryCache.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/MapDictionaryCache.java new file mode 100644 index 00000000..12f9dce9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/MapDictionaryCache.java @@ -0,0 +1,358 @@ +package com.orangeforms.common.core.cache; + +import com.orangeforms.common.core.exception.MapCacheAccessException; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.function.Function; + +/** + * 字典数据内存缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class MapDictionaryCache implements DictionaryCache { + + /** + * 存储字典数据的Map。 + */ + protected final LinkedHashMap dataMap = new LinkedHashMap<>(); + /** + * 获取字典主键数据的函数对象。 + */ + protected final Function idGetter; + /** + * 由于大部分场景是读取操作,所以使用读写锁提高并发的伸缩性。 + */ + protected final ReadWriteLock lock = new ReentrantReadWriteLock(); + /** + * 超时时长。单位毫秒。 + */ + protected static final long TIMEOUT = 2000L; + + /** + * 当前对象的构造器函数。 + * + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的字典内存缓存对象。 + */ + public static MapDictionaryCache create(Function idGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + return new MapDictionaryCache<>(idGetter); + } + + /** + * 构造函数。 + * + * @param idGetter 主键Id的获取函数对象。 + */ + public MapDictionaryCache(Function idGetter) { + this.idGetter = idGetter; + } + + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ + @Override + public List getAll() { + List resultList = new LinkedList<>(); + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + for (Map.Entry entry : dataMap.entrySet()) { + resultList.add(entry.getValue()); + } + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return resultList; + } + + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ + @Override + public List getInList(Set keys) { + List resultList = new LinkedList<>(); + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(key -> { + V object = dataMap.get(key); + if (object != null) { + resultList.add(object); + } + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return resultList; + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (dataList == null) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList.forEach(dataObj -> { + K id = idGetter.apply(dataObj); + dataMap.put(id, dataObj); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + if (!force && this.getCount() > 0) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + dataList.forEach(dataObj -> { + K id = idGetter.apply(dataObj); + dataMap.put(id, dataObj); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 从缓存中获取指定的数据。 + * + * @param id 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ + @Override + public V get(K id) { + if (id == null) { + return null; + } + V data; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.get(id); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return data; + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param object 字典数据对象。 + */ + @Override + public void put(K id, V object) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.put(id, object); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ + @Override + public int getCount() { + return dataMap.size(); + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + String exceptionMessage; + V data; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.remove(id); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return data; + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @Override + public void invalidateSet(Set keys) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(id -> { + if (id != null) { + dataMap.remove(id); + } + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/MapTreeDictionaryCache.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/MapTreeDictionaryCache.java new file mode 100644 index 00000000..af635f3d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/cache/MapTreeDictionaryCache.java @@ -0,0 +1,292 @@ +package com.orangeforms.common.core.cache; + +import com.orangeforms.common.core.exception.MapCacheAccessException; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.function.Function; + +/** + * 树形字典数据内存缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class MapTreeDictionaryCache extends MapDictionaryCache { + + /** + * 树形数据存储对象。 + */ + private final Multimap allTreeMap = LinkedHashMultimap.create(); + /** + * 获取字典父主键数据的函数对象。 + */ + protected final Function parentIdGetter; + + /** + * 当前对象的构造器函数。 + * + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的树形字典内存缓存对象。 + */ + public static MapTreeDictionaryCache create(Function idGetter, Function parentIdGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + if (parentIdGetter == null) { + throw new IllegalArgumentException("ParentIdGetter can't be NULL."); + } + return new MapTreeDictionaryCache<>(idGetter, parentIdGetter); + } + + /** + * 构造函数。 + * + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + */ + public MapTreeDictionaryCache(Function idGetter, Function parentIdGetter) { + super(idGetter); + this.parentIdGetter = parentIdGetter; + } + + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + if (!force && this.getCount() > 0) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + allTreeMap.clear(); + dataList.forEach(data -> { + K id = idGetter.apply(data); + dataMap.put(id, data); + K parentId = parentIdGetter.apply(data); + allTreeMap.put(parentId, data); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 获取该父主键的子数据列表。 + * + * @param parentId 父主键Id。 + * @return 子数据列表。 + */ + public List getListByParentId(K parentId) { + List resultList = new LinkedList<>(); + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + resultList.addAll(allTreeMap.get(parentId)); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return resultList; + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (dataList == null) { + return; + } + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList.forEach(data -> { + K id = idGetter.apply(data); + dataMap.put(id, data); + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, data); + allTreeMap.put(parentId, data); + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.put(id, data); + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, data); + allTreeMap.put(parentId, data); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + V v; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + v = dataMap.remove(id); + if (v != null) { + K parentId = parentIdGetter.apply(v); + allTreeMap.remove(parentId, v); + } + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + return v; + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @Override + public void invalidateSet(Set keys) { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(id -> { + if (id != null) { + V data = dataMap.remove(id); + if (data != null) { + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, data); + } + } + }); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + allTreeMap.clear(); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [MapDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT.", + e.getClass().getSimpleName()); + log.warn(exceptionMessage); + throw new MapCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/CommonWebMvcConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/CommonWebMvcConfig.java new file mode 100644 index 00000000..52087e97 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/CommonWebMvcConfig.java @@ -0,0 +1,67 @@ +package com.orangeforms.common.core.config; + +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import com.orangeforms.common.core.interceptor.MyRequestArgumentResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +/** + * 所有的项目拦截器、参数解析器、消息对象转换器都在这里集中配置。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class CommonWebMvcConfig implements WebMvcConfigurer { + + @Bean + public MethodValidationPostProcessor methodValidationPostProcessor() { + return new MethodValidationPostProcessor(); + } + + @Override + public void addArgumentResolvers(List argumentResolvers) { + // 添加MyRequestBody参数解析器 + argumentResolvers.add(new MyRequestArgumentResolver()); + } + + @Bean + public HttpMessageConverter responseBodyConverter() { + return new StringHttpMessageConverter(StandardCharsets.UTF_8); + } + + @Bean + public FastJsonHttpMessageConverter fastJsonHttpMessageConverters() { + FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); + List supportedMediaTypes = new ArrayList<>(); + supportedMediaTypes.add(MediaType.APPLICATION_JSON); + supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); + fastConverter.setSupportedMediaTypes(supportedMediaTypes); + FastJsonConfig fastJsonConfig = new FastJsonConfig(); + fastJsonConfig.setSerializerFeatures( + SerializerFeature.PrettyFormat, + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.IgnoreNonFieldGetter); + fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); + fastConverter.setFastJsonConfig(fastJsonConfig); + return fastConverter; + } + + @Override + public void configureMessageConverters(List> converters) { + converters.add(responseBodyConverter()); + converters.add(fastJsonHttpMessageConverters()); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/DataSourceContextHolder.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/DataSourceContextHolder.java new file mode 100644 index 00000000..00b63ebf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/DataSourceContextHolder.java @@ -0,0 +1,52 @@ +package com.orangeforms.common.core.config; + +/** + * 通过线程本地存储的方式,保存当前数据库操作所需的数据源类型,动态数据源会根据该值,进行动态切换。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class DataSourceContextHolder { + + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 设置数据源类型。 + * + * @param type 数据源类型 + * @return 原有数据源类型,如果第一次设置则返回null。 + */ + public static Integer setDataSourceType(Integer type) { + Integer datasourceType = CONTEXT_HOLDER.get(); + CONTEXT_HOLDER.set(type); + return datasourceType; + } + + /** + * 获取当前数据库操作执行线程的数据源类型,同时由动态数据源的路由函数调用。 + * + * @return 数据源类型。 + */ + public static Integer getDataSourceType() { + return CONTEXT_HOLDER.get(); + } + + /** + * 清除线程本地变量,以免内存泄漏。 + + * @param originalType 原有的数据源类型,如果该值为null,则情况本地化变量。 + */ + public static void unset(Integer originalType) { + if (originalType == null) { + CONTEXT_HOLDER.remove(); + } else { + CONTEXT_HOLDER.set(originalType); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DataSourceContextHolder() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/DynamicDataSource.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/DynamicDataSource.java new file mode 100644 index 00000000..057cbd83 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/DynamicDataSource.java @@ -0,0 +1,17 @@ +package com.orangeforms.common.core.config; + +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +/** + * 动态数据源对象。当存在多个数据连接时使用。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class DynamicDataSource extends AbstractRoutingDataSource { + + @Override + protected Object determineCurrentLookupKey() { + return DataSourceContextHolder.getDataSourceType(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/EncryptConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/EncryptConfig.java new file mode 100644 index 00000000..d39f3314 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/EncryptConfig.java @@ -0,0 +1,20 @@ +package com.orangeforms.common.core.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +/** + * 目前用于用户密码加密,UAA接入应用客户端的client_secret加密。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class EncryptConfig { + + @Bean + public BCryptPasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/FeignConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/FeignConfig.java new file mode 100644 index 00000000..9e514983 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/FeignConfig.java @@ -0,0 +1,39 @@ +package com.orangeforms.common.core.config; + +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.util.ContextUtil; +import feign.RequestInterceptor; +import feign.RequestTemplate; +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.annotation.Configuration; + +/** + * FeignClient的配置对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class FeignConfig implements RequestInterceptor { + + @Override + public void apply(RequestTemplate requestTemplate) { + // 对于非servlet请求发起的远程调用,由于无法获取到标识用户身份的TokenData,因此需要略过下面的HEADER注入。 + // 如:由消息队列consumer发起的远程调用请求。 + if (!ContextUtil.hasRequestContext()) { + return; + } + String tokenData = ContextUtil.getHttpRequest().getHeader(TokenData.REQUEST_ATTRIBUTE_NAME); + if (StringUtils.isNotBlank(tokenData)) { + requestTemplate.header(TokenData.REQUEST_ATTRIBUTE_NAME, tokenData); + } + String traceId = ContextUtil.getHttpRequest().getHeader(ApplicationConstant.HTTP_HEADER_TRACE_ID); + if (StringUtils.isBlank(traceId)) { + traceId = (String) ContextUtil.getHttpRequest().getAttribute(ApplicationConstant.HTTP_HEADER_TRACE_ID); + } + if (StringUtils.isNotBlank(traceId)) { + requestTemplate.header(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/RestTemplateConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/RestTemplateConfig.java new file mode 100644 index 00000000..687d3fc4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/RestTemplateConfig.java @@ -0,0 +1,64 @@ +package com.orangeforms.common.core.config; + +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.web.client.RestOperations; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * RestTemplate连接池配置对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class RestTemplateConfig { + private static final int MAX_TOTAL_CONNECTION = 50; + private static final int MAX_CONNECTION_PER_ROUTE = 20; + private static final int CONNECTION_TIMEOUT = 20000; + private static final int READ_TIMEOUT = 30000; + + @Bean + @ConditionalOnMissingBean({RestOperations.class, RestTemplate.class}) + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(createFactory()); + List> messageConverters = restTemplate.getMessageConverters(); + messageConverters.removeIf( + c -> c instanceof StringHttpMessageConverter || c instanceof MappingJackson2HttpMessageConverter); + messageConverters.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); + messageConverters.add(new FastJsonHttpMessageConverter()); + restTemplate.setErrorHandler(new DefaultResponseErrorHandler() { + @Override + public void handleError(ClientHttpResponse response) throws IOException { + // 防止400+和500等错误被直接抛出异常,这里避开了缺省处理方式,所有的错误均交给业务代码处理。 + } + }); + return restTemplate; + } + + private ClientHttpRequestFactory createFactory() { + HttpClient httpClient = HttpClientBuilder.create() + .setMaxConnTotal(MAX_TOTAL_CONNECTION) + .setMaxConnPerRoute(MAX_CONNECTION_PER_ROUTE) + .build(); + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); + factory.setReadTimeout(READ_TIMEOUT); + factory.setConnectTimeout(CONNECTION_TIMEOUT); + return factory; + } +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/TomcatConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/TomcatConfig.java new file mode 100644 index 00000000..9397752f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/config/TomcatConfig.java @@ -0,0 +1,39 @@ +package com.orangeforms.common.core.config; + +import org.apache.tomcat.util.descriptor.web.SecurityCollection; +import org.apache.tomcat.util.descriptor.web.SecurityConstraint; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * tomcat配置对象。当前配置禁用了PUT和DELETE方法,防止渗透攻击。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class TomcatConfig { + + @Bean + public TomcatServletWebServerFactory servletContainer() { + TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); + factory.addContextCustomizers(context -> { + SecurityConstraint securityConstraint = new SecurityConstraint(); + securityConstraint.setUserConstraint("CONFIDENTIAL"); + SecurityCollection collection = new SecurityCollection(); + collection.addPattern("/*"); + collection.addMethod("HEAD"); + collection.addMethod("PUT"); + collection.addMethod("PATCH"); + collection.addMethod("DELETE"); + collection.addMethod("TRACE"); + collection.addMethod("COPY"); + collection.addMethod("SEARCH"); + collection.addMethod("PROPFIND"); + securityConstraint.addCollection(collection); + context.addConstraint(securityConstraint); + }); + return factory; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AggregationKind.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AggregationKind.java new file mode 100644 index 00000000..4048781a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AggregationKind.java @@ -0,0 +1,36 @@ +package com.orangeforms.common.core.constant; + +/** + * 在跨服务调用时,需要传递的聚合分类常量对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class AggregationKind { + + /** + * 一对多关联中,聚合从表中指定字段,将多条记录汇总到主表的指定字段上。 + */ + public static final int ONE_TO_MANY = 1; + /** + * 多对多关联中,聚合从表中指定字段,将多条记录汇总到主表的指定字段上。 + */ + public static final int MANY_TO_MANY = 2; + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param aggregationKind 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer aggregationKind) { + return aggregationKind != null && + (aggregationKind == ONE_TO_MANY || aggregationKind == MANY_TO_MANY); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AggregationKind() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AggregationType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AggregationType.java new file mode 100644 index 00000000..f111f381 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AggregationType.java @@ -0,0 +1,81 @@ +package com.orangeforms.common.core.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 聚合计算的常量类型对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class AggregationType { + + /** + * sum 计数 + */ + public static final int SUM = 0; + /** + * count 汇总 + */ + public static final int COUNT = 1; + /** + * average 平均值 + */ + public static final int AVG = 2; + /** + * min 最小值 + */ + public static final int MIN = 3; + /** + * max 最大值 + */ + public static final int MAX = 4; + + private static final Map DICT_MAP = new HashMap<>(5); + static { + DICT_MAP.put(SUM, "累计总和"); + DICT_MAP.put(COUNT, "数量总和"); + DICT_MAP.put(AVG, "平均值"); + DICT_MAP.put(MIN, "最小值"); + DICT_MAP.put(MAX, "最大值"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 获取与SQL对应的聚合函数字符串名称。 + * + * @return 聚合函数名称。 + */ + public static String getAggregationFunction(Integer aggregationType) { + switch (aggregationType) { + case COUNT: + return "COUNT"; + case AVG: + return "AVG"; + case SUM: + return "SUM"; + case MAX: + return "MAX"; + case MIN: + return "MIN"; + default: + throw new IllegalArgumentException("无效的聚合类型!"); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AggregationType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AppDeviceType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AppDeviceType.java new file mode 100644 index 00000000..108b8d8f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/AppDeviceType.java @@ -0,0 +1,59 @@ +package com.orangeforms.common.core.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * App 登录的设备类型。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class AppDeviceType { + + /** + * 移动端 (如果不考虑区分android或ios的,可以使用该值) + */ + public static final int MOBILE = 0; + /** + * android + */ + public static final int ANDROID = 1; + /** + * iOS + */ + public static final int IOS = 2; + /** + * 微信公众号和小程序 + */ + public static final int WEIXIN = 3; + /** + * PC WEB + */ + public static final int WEB = 4; + + private static final Map DICT_MAP = new HashMap<>(5); + static { + DICT_MAP.put(MOBILE, "移动端"); + DICT_MAP.put(ANDROID, "Android"); + DICT_MAP.put(IOS, "iOS"); + DICT_MAP.put(WEIXIN, "微信"); + DICT_MAP.put(WEB, "PC WEB"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AppDeviceType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/ApplicationConstant.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/ApplicationConstant.java new file mode 100644 index 00000000..30ec5927 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/ApplicationConstant.java @@ -0,0 +1,85 @@ +package com.orangeforms.common.core.constant; + +/** + * 应用程序的常量声明对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class ApplicationConstant { + + /** + * 数据同步使用的缺省消息队列主题名称。 + */ + public static final String DEFAULT_DATA_SYNC_TOPIC = "OrangeMultiDemo"; + /** + * 全量数据同步中,新增数据对象的键名称。 + */ + public static final String DEFAULT_FULL_SYNC_DATA_KEY = "data"; + /** + * 全量数据同步中,原有数据对象的键名称。 + */ + public static final String DEFAULT_FULL_SYNC_OLD_DATA_KEY = "oldData"; + /** + * 全量数据同步中,数据对象主键的键名称。 + */ + public static final String DEFAULT_FULL_SYNC_ID_KEY = "id"; + /** + * 为字典表数据缓存时,缓存名称的固定后缀。 + */ + public static final String DICT_CACHE_NAME_SUFFIX = "-DICT"; + /** + * 为树形字典表数据缓存时,缓存名称的固定后缀。 + */ + public static final String TREE_DICT_CACHE_NAME_SUFFIX = "-TREE-DICT"; + /** + * 图片文件上传的父目录。 + */ + public static final String UPLOAD_IMAGE_PARENT_PATH = "image"; + /** + * 附件文件上传的父目录。 + */ + public static final String UPLOAD_ATTACHMENT_PARENT_PATH = "attachment"; + /** + * CSV文件扩展名。 + */ + public static final String CSV_EXT = "csv"; + /** + * XLSX文件扩展名。 + */ + public static final String XLSX_EXT = "xlsx"; + /** + * 统计分类计算时,按天聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String DAY_AGGREGATION = "day"; + /** + * 统计分类计算时,按月聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String MONTH_AGGREGATION = "month"; + /** + * 统计分类计算时,按年聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String YEAR_AGGREGATION = "year"; + /** + * 请求头跟踪id名。 + */ + public static final String HTTP_HEADER_TRACE_ID = "traceId"; + /** + * 操作日志的数据源类型。仅当前服务为多数据源时使用。 + * 在common-log模块中,SysOperationLogServiceImpl的MyDataSource注解一定要使用该参数。 + * 在多数据源的业务服务中,DataSourceType的常量一定要包含该值,多数据源的配置中,也一定要有与该值匹配的数据源Bean。 + */ + public static final int OPERATION_LOG_DATASOURCE_TYPE = 1000; + /** + * 重要说明:该值为项目生成后的缺省密钥,仅为使用户可以快速上手并跑通流程。 + * 在实际的应用中,一定要为不同的项目或服务,自行生成公钥和私钥,并将 PRIVATE_KEY 的引用改为服务的配置项。 + * 密钥的生成方式,可通过执行common.core.util.RsaUtil类的main函数动态生成。 + */ + public static final String PRIVATE_KEY = + "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKkLhAydtOtA4WuIkkIIUVaGWu4ElOEAQF9GTulHHWOwCHI1UvcKolvS1G+mdsKcmGtEAQ92AUde/kDRGu8Wn7kLDtCgUfo72soHz7Qfv5pVB4ohMxQd/9cxeKjKbDoirhB9Z3xGF20zUozp4ZPLxpTtI7azr0xzUtd5+D/HfLDrAgMBAAECgYEApESZhDz4YyeAJiPnpJ06lS8oS2VOWzsIUs0av5uoloeoHXtt7Lx7u2kroHeNrl3Hy2yg7ypH4dgQkGHin3VHrVAgjG3TxhgBXIqqntzzk2AGJKBeIIkRX86uTvtKZyp3flUgcwcGmpepAHS1V1DPY3aVYvbcqAmoL6DX6VYN0NECQQDQUitMdC76lEtAr5/ywS0nrZJDo6U7eQ7ywx/eiJ+YmrSye8oorlAj1VBWG+Cl6jdHOHtTQyYv/tu71fjzQiJTAkEAz7wb47/vcSUpNWQxItFpXz0o6rbJh71xmShn1AKP7XptOVZGlW9QRYEzHabV9m/DHqI00cMGhHrWZAhCiTkUCQJAFsJjaJ7o4weAkTieyO7B+CvGZw1h5/V55Jvcx3s1tH5yb22G0Jr6tm9/r2isSnQkReutzZLwgR3e886UvD7lcQJAAUcD2OOuQkDbPwPNtYwaHMbQgJj9JkOI9kskUE5vuiMdltOr/XFAyhygRtdmy2wmhAK1VnDfkmL6/IR8fEGImQJABOB0KCalb0M8CPnqqHzozrD8gPObnIIr4aVvLIPATN2g7MM2N6F7JbI4RZFiKa92LV6bhQCY8OvHi5K2cgFpbw=="; + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ApplicationConstant() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/ErrorCodeEnum.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/ErrorCodeEnum.java new file mode 100644 index 00000000..bcd5d46f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/ErrorCodeEnum.java @@ -0,0 +1,88 @@ +package com.orangeforms.common.core.constant; + +/** + * 返回应答中的错误代码和错误信息。 + * + * @author Jerry + * @date 2020-08-08 + */ +public enum ErrorCodeEnum { + + /** + * 没有错误 + */ + NO_ERROR("没有错误"), + /** + * 未处理的异常! + */ + UNHANDLED_EXCEPTION("未处理的异常!"), + + ARGUMENT_NULL_EXIST("数据验证失败,接口调用参数存在空值,请核对!"), + ARGUMENT_PK_ID_NULL("数据验证失败,接口调用主键Id参数为空,请核对!"), + INVALID_ARGUMENT_FORMAT("数据验证失败,不合法的参数格式,请核对!"), + INVALID_STATUS_ARGUMENT("数据验证失败,无效的状态参数值,请核对!"), + UPLOAD_FAILED("数据验证失败,数据上传失败!"), + INVALID_UPLOAD_FIELD("数据验证失败,该字段不支持数据上传!"), + INVALID_UPLOAD_STORE_TYPE("数据验证失败,并不支持上传存储类型!"), + INVALID_UPLOAD_FILE_ARGUMENT("数据验证失败,上传文件参数错误,请核对!"), + INVALID_UPLOAD_FILE_IOERROR("上传文件写入失败,请联系管理员!"), + UNAUTHORIZED_LOGIN("当前用户尚未登录或登录已超时,请重新登录!"), + UNAUTHORIZED_USER_PERMISSION("权限验证失败,当前用户不能访问该接口,请核对!"), + NO_ACCESS_PERMISSION("当前用户没有访问权限,请核对!"), + NO_OPERATION_PERMISSION("当前用户没有操作权限,请核对!"), + + PASSWORD_ERR("密码错误,请重试!"), + INVALID_USERNAME_PASSWORD("用户名或密码错误,请重试!"), + INVALID_ACCESS_TOKEN("无效的用户访问令牌!"), + INVALID_USER_STATUS("用户状态错误,请刷新后重试!"), + INVALID_TENANT_CODE("指定的租户编码并不存在,请刷新后重试!"), + INVALID_TENANT_STATUS("当前租户为不可用状态,请刷新后重试!"), + INVALID_USER_TENANT("当前用户并不属于当前租户,请刷新后重试!"), + + HAS_CHILDREN_DATA("数据验证失败,子数据存在,请刷新后重试!"), + DATA_VALIDATED_FAILED("数据验证失败,请核对!"), + UPLOAD_FILE_FAILED("文件上传失败,请联系管理员!"), + DATA_SAVE_FAILED("数据保存失败,请联系管理员!"), + DATA_ACCESS_FAILED("数据访问失败,请联系管理员!"), + DATA_PERM_ACCESS_FAILED("数据访问失败,您没有该页面的数据访问权限!"), + DUPLICATED_UNIQUE_KEY("数据保存失败,存在重复数据,请核对!"), + DATA_NOT_EXIST("数据不存在,请刷新后重试!"), + DATA_PARENT_LEVEL_ID_NOT_EXIST("数据验证失败,父级别关联Id不存在,请刷新后重试!"), + DATA_PARENT_ID_NOT_EXIST("数据验证失败,ParentId不存在,请核对!"), + RPC_DATA_ACCESS_FAILED("远程调用数据访问失败,请联系管理员!"), + INVALID_RELATED_RECORD_ID("数据验证失败,关联数据并不存在,请刷新后重试!"), + INVALID_DATA_MODEL("数据验证失败,无效的数据实体对象!"), + INVALID_DATA_FIELD("数据验证失败,无效的数据实体对象字段!"), + INVALID_CLASS_FIELD("数据验证失败,无效的类对象字段!"), + SERVER_INTERNAL_ERROR("服务器内部错误,请联系管理员!"), + REDIS_CACHE_ACCESS_TIMEOUT("Redis缓存数据访问超时,请刷新后重试!"), + REDIS_CACHE_ACCESS_STATE_ERROR("Redis缓存数据访问状态错误,请刷新后重试!"), + MESSAGE_SEND_FAIL("消息发送失败!"), + TRANSACTION_MESSAGE_LOCAL_STATUS_ROLLBACK("本地数据操作失败,请联系管理员!"), + TRANSACTION_MESSAGE_LOCAL_STATUS_UNKNOW("本地数据操作结果未知,请刷新后重试!"); + + // 下面的枚举值为特定枚举值,即开发者可以根据自己的项目需求定义更多的非通用枚举值 + + /** + * 构造函数。 + * + * @param errorMessage 错误消息。 + */ + ErrorCodeEnum(String errorMessage) { + this.errorMessage = errorMessage; + } + + /** + * 错误信息。 + */ + private final String errorMessage; + + /** + * 获取错误信息。 + * + * @return 错误信息。 + */ + public String getErrorMessage() { + return errorMessage; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/GlobalDeletedFlag.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/GlobalDeletedFlag.java new file mode 100644 index 00000000..0317b222 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/constant/GlobalDeletedFlag.java @@ -0,0 +1,25 @@ +package com.orangeforms.common.core.constant; + +/** + * 数据记录逻辑删除标记常量。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class GlobalDeletedFlag { + + /** + * 表示数据表记录已经删除 + */ + public static final int DELETED = -1; + /** + * 数据记录正常 + */ + public static final int NORMAL = 1; + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private GlobalDeletedFlag() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/DataValidationException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/DataValidationException.java new file mode 100644 index 00000000..c1c22bfa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/DataValidationException.java @@ -0,0 +1,26 @@ +package com.orangeforms.common.core.exception; + +/** + * 数据验证失败的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class DataValidationException extends RuntimeException { + + /** + * 构造函数。 + */ + public DataValidationException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public DataValidationException(String msg) { + super(msg); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidClassFieldException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidClassFieldException.java new file mode 100644 index 00000000..355b2856 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidClassFieldException.java @@ -0,0 +1,30 @@ +package com.orangeforms.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的类对象字段的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidClassFieldException extends RuntimeException { + + private final String className; + private final String fieldName; + + /** + * 构造函数。 + * + * @param className 对象名。 + * @param fieldName 字段名。 + */ + public InvalidClassFieldException(String className, String fieldName) { + super("Invalid FieldName [" + fieldName + "] in Class [" + className + "]."); + this.className = className; + this.fieldName = fieldName; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidDataFieldException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidDataFieldException.java new file mode 100644 index 00000000..89ae71b2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidDataFieldException.java @@ -0,0 +1,30 @@ +package com.orangeforms.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的实体对象字段的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidDataFieldException extends RuntimeException { + + private final String modelName; + private final String fieldName; + + /** + * 构造函数。 + * + * @param modelName 实体对象名。 + * @param fieldName 字段名。 + */ + public InvalidDataFieldException(String modelName, String fieldName) { + super("Invalid FieldName [" + fieldName + "] in Model Class [" + modelName + "]."); + this.modelName = modelName; + this.fieldName = fieldName; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidDataModelException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidDataModelException.java new file mode 100644 index 00000000..1950940f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidDataModelException.java @@ -0,0 +1,27 @@ +package com.orangeforms.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的实体对象的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidDataModelException extends RuntimeException { + + private final String modelName; + + /** + * 构造函数。 + * + * @param modelName 实体对象名。 + */ + public InvalidDataModelException(String modelName) { + super("Invalid Model Class [" + modelName + "]."); + this.modelName = modelName; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidRedisModeException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidRedisModeException.java new file mode 100644 index 00000000..492a7262 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/InvalidRedisModeException.java @@ -0,0 +1,27 @@ +package com.orangeforms.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的Redis模式的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidRedisModeException extends RuntimeException { + + private final String mode; + + /** + * 构造函数。 + * + * @param mode 错误的模式。 + */ + public InvalidRedisModeException(String mode) { + super("Invalid Redis Mode [" + mode + "], only supports [single/cluster/sentinel/master_slave]"); + this.mode = mode; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/MapCacheAccessException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/MapCacheAccessException.java new file mode 100644 index 00000000..f172ff6b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/MapCacheAccessException.java @@ -0,0 +1,20 @@ +package com.orangeforms.common.core.exception; + +/** + * 内存缓存访问失败。比如:获取分布式数据锁超时、等待线程中断等。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class MapCacheAccessException extends RuntimeException { + + /** + * 构造函数。 + * + * @param msg 错误信息。 + * @param cause 原始异常。 + */ + public MapCacheAccessException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/MyRuntimeException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/MyRuntimeException.java new file mode 100644 index 00000000..e6f49a4d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/MyRuntimeException.java @@ -0,0 +1,36 @@ +package com.orangeforms.common.core.exception; + +/** + * 自定义的运行时异常,在需要抛出运行时异常时,可使用该异常。 + * NOTE:主要是为了避免SonarQube进行代码质量扫描时,给出警告。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class MyRuntimeException extends RuntimeException { + + /** + * 构造函数。 + */ + public MyRuntimeException() { + + } + + /** + * 构造函数。 + * + * @param throwable 引发异常对象。 + */ + public MyRuntimeException(Throwable throwable) { + super(throwable); + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public MyRuntimeException(String msg) { + super(msg); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/NoDataAffectException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/NoDataAffectException.java new file mode 100644 index 00000000..4848952c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/NoDataAffectException.java @@ -0,0 +1,26 @@ +package com.orangeforms.common.core.exception; + +/** + * 没有数据被修改的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class NoDataAffectException extends RuntimeException { + + /** + * 构造函数。 + */ + public NoDataAffectException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public NoDataAffectException(String msg) { + super(msg); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/NoDataPermException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/NoDataPermException.java new file mode 100644 index 00000000..0e45f6f6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/NoDataPermException.java @@ -0,0 +1,26 @@ +package com.orangeforms.common.core.exception; + +/** + * 没有数据访问权限的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class NoDataPermException extends RuntimeException { + + /** + * 构造函数。 + */ + public NoDataPermException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public NoDataPermException(String msg) { + super(msg); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/RedisCacheAccessException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/RedisCacheAccessException.java new file mode 100644 index 00000000..7d7e9c1d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/RedisCacheAccessException.java @@ -0,0 +1,20 @@ +package com.orangeforms.common.core.exception; + +/** + * Redis缓存访问失败。比如:获取分布式数据锁超时、等待线程中断等。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class RedisCacheAccessException extends RuntimeException { + + /** + * 构造函数。 + * + * @param msg 错误信息。 + * @param cause 原始异常。 + */ + public RedisCacheAccessException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/RemoteDataBuildException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/RemoteDataBuildException.java new file mode 100644 index 00000000..8cc59a46 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/exception/RemoteDataBuildException.java @@ -0,0 +1,26 @@ +package com.orangeforms.common.core.exception; + +/** + * 关联远程服务数据失败的自定义异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class RemoteDataBuildException extends RuntimeException { + + /** + * 构造函数。 + */ + public RemoteDataBuildException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public RemoteDataBuildException(String msg) { + super(msg); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/interceptor/MyRequestArgumentResolver.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/interceptor/MyRequestArgumentResolver.java new file mode 100644 index 00000000..7ea34443 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/interceptor/MyRequestArgumentResolver.java @@ -0,0 +1,234 @@ +package com.orangeforms.common.core.interceptor; + +import cn.hutool.core.convert.Convert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.orangeforms.common.core.annotation.MyRequestBody; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.lang.NonNull; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.util.*; + +/** + * MyRequestBody解析器 + * 解决的问题: + * 1、单个字符串等包装类型都要写一个对象才可以用@RequestBody接收; + * 2、多个对象需要封装到一个对象里才可以用@RequestBody接收。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver { + + private static final String JSONBODY_ATTRIBUTE = "MY_REQUEST_BODY_ATTRIBUTE_XX"; + + private static final Set> CLASS_SET = new HashSet<>(); + + static { + CLASS_SET.add(Integer.class); + CLASS_SET.add(Long.class); + CLASS_SET.add(Short.class); + CLASS_SET.add(Float.class); + CLASS_SET.add(Double.class); + CLASS_SET.add(Boolean.class); + CLASS_SET.add(Byte.class); + CLASS_SET.add(BigDecimal.class); + CLASS_SET.add(Character.class); + } + + /** + * 设置支持的方法参数类型。 + * + * @param parameter 方法参数。 + * @return 支持的类型。 + */ + @Override + public boolean supportsParameter(@NonNull MethodParameter parameter) { + return parameter.hasParameterAnnotation(MyRequestBody.class); + } + + /** + * 参数解析,利用fastjson。 + * 注意:非基本类型返回null会报空指针异常,要通过反射或者JSON工具类创建一个空对象。 + */ + @Override + public Object resolveArgument( + @NonNull MethodParameter parameter, + ModelAndViewContainer mavContainer, + @NonNull NativeWebRequest webRequest, + WebDataBinderFactory binderFactory) throws Exception { + HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); + String contentType = servletRequest.getContentType(); + if (!HttpMethod.POST.name().equals(servletRequest.getMethod())) { + throw new IllegalArgumentException("Only POST method can be applied @MyRequestBody annotation!"); + } + if (!StringUtils.containsIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE)) { + throw new IllegalArgumentException( + "Only application/json Content-Type can be applied @MyRequestBody annotation!"); + } + // 根据@MyRequestBody注解value作为json解析的key + MyRequestBody parameterAnnotation = parameter.getParameterAnnotation(MyRequestBody.class); + JSONObject jsonObject = getRequestBody(webRequest); + if (jsonObject == null) { + if (parameterAnnotation.required()) { + throw new IllegalArgumentException("Request Body is EMPTY!"); + } + return null; + } + String key = parameterAnnotation.value(); + if (StringUtils.isBlank(key)) { + key = parameter.getParameterName(); + } + Object value = jsonObject.get(key); + if (value == null) { + if (parameterAnnotation.required()) { + throw new IllegalArgumentException(String.format("Required parameter %s is not present!", key)); + } + return null; + } + // 获取参数类型。 + Class parameterType = parameter.getParameterType(); + // 基本类型 + if (parameterType.isPrimitive()) { + return parsePrimitive(parameterType.getName(), value); + } + // 基本类型包装类 + if (isBasicDataTypes(parameterType)) { + return parseBasicTypeWrapper(parameterType, value); + } else if (parameterType == String.class) { + // 字符串类型 + return value.toString(); + } + // 数组类型 + if (value instanceof JSONArray) { + return parseArray(parameterType, parameterAnnotation.elementType(), key, value); + } + // 其他复杂对象 + return JSON.toJavaObject((JSONObject) value, parameterType); + } + + @SuppressWarnings("unchecked") + private Object parseArray(Class parameterType, Class elementType, String key, Object value) + throws IllegalAccessException, InstantiationException { + Object o; + if (!parameterType.equals(List.class)) { + o = parameterType.newInstance(); + parameterType = (Class) ((ParameterizedType) + parameterType.getGenericSuperclass()).getActualTypeArguments()[0]; + } else { + parameterType = elementType; + if (parameterType.equals(Class.class)) { + throw new IllegalArgumentException( + String.format("List Type parameter %s MUST have elementType!", key)); + } + o = new LinkedList<>(); + } + if (!(o instanceof List)) { + throw new IllegalArgumentException(String.format("Required parameter %s is List!", key)); + } + ((List) o).addAll(((JSONArray) value).toJavaList(parameterType)); + return o; + } + + private Object parsePrimitive(String parameterTypeName, Object value) { + final String booleanTypeName = "boolean"; + if (booleanTypeName.equals(parameterTypeName)) { + return Boolean.valueOf(value.toString()); + } + final String intTypeName = "int"; + if (intTypeName.equals(parameterTypeName)) { + return Integer.valueOf(value.toString()); + } + final String charTypeName = "char"; + if (charTypeName.equals(parameterTypeName)) { + return value.toString().charAt(0); + } + final String shortTypeName = "short"; + if (shortTypeName.equals(parameterTypeName)) { + return Short.valueOf(value.toString()); + } + final String longTypeName = "long"; + if (longTypeName.equals(parameterTypeName)) { + return Long.valueOf(value.toString()); + } + final String floatTypeName = "float"; + if (floatTypeName.equals(parameterTypeName)) { + return Float.valueOf(value.toString()); + } + final String doubleTypeName = "double"; + if (doubleTypeName.equals(parameterTypeName)) { + return Double.valueOf(value.toString()); + } + final String byteTypeName = "byte"; + if (byteTypeName.equals(parameterTypeName)) { + return Byte.valueOf(value.toString()); + } + return null; + } + + private Object parseBasicTypeWrapper(Class parameterType, Object value) { + if (Number.class.isAssignableFrom(parameterType)) { + if (value instanceof String) { + return Convert.convert(parameterType, value); + } + Number number = (Number) value; + if (parameterType == Integer.class) { + return number.intValue(); + } else if (parameterType == Short.class) { + return number.shortValue(); + } else if (parameterType == Long.class) { + return number.longValue(); + } else if (parameterType == Float.class) { + return number.floatValue(); + } else if (parameterType == Double.class) { + return number.doubleValue(); + } else if (parameterType == Byte.class) { + return number.byteValue(); + } else if (parameterType == BigDecimal.class) { + if (value instanceof Double || value instanceof Float) { + return BigDecimal.valueOf(number.doubleValue()); + } else { + return BigDecimal.valueOf(number.longValue()); + } + } + } else if (parameterType == Boolean.class) { + return value; + } else if (parameterType == Character.class) { + return value.toString().charAt(0); + } + return null; + } + + private boolean isBasicDataTypes(Class clazz) { + return CLASS_SET.contains(clazz); + } + + private JSONObject getRequestBody(NativeWebRequest webRequest) throws IOException { + HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); + // 有就直接获取 + JSONObject jsonObject = (JSONObject) webRequest.getAttribute(JSONBODY_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST); + // 没有就从请求中读取 + if (jsonObject == null) { + String jsonBody = IOUtils.toString(servletRequest.getReader()); + jsonObject = JSON.parseObject(jsonBody); + if (jsonObject != null) { + webRequest.setAttribute(JSONBODY_ATTRIBUTE, jsonObject, RequestAttributes.SCOPE_REQUEST); + } + } + return jsonObject; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/listener/LoadServiceRelationListener.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/listener/LoadServiceRelationListener.java new file mode 100644 index 00000000..043abf15 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/listener/LoadServiceRelationListener.java @@ -0,0 +1,29 @@ +package com.orangeforms.common.core.listener; + +import com.orangeforms.common.core.base.service.BaseService; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Component +public class LoadServiceRelationListener implements ApplicationListener { + + @SuppressWarnings("all") + @Override + public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { + Map serviceMap = + applicationReadyEvent.getApplicationContext().getBeansOfType(BaseService.class); + for (Map.Entry e : serviceMap.entrySet()) { + e.getValue().loadLocalRelationStruct(); + e.getValue().loadRemoteRelationStruct(); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/CallResult.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/CallResult.java new file mode 100644 index 00000000..6018a1e8 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/CallResult.java @@ -0,0 +1,87 @@ +package com.orangeforms.common.core.object; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +/** + * 接口数据验证结果对象。主要是Service类使用。 + * 同时为了提升效率,减少查询次数,可以根据具体的需求,将部分验证关联对象存入data字段,以供Controller使用。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class CallResult { + + /** + * 为了优化性能,所有没有携带数据的正确结果,均可用该对象表示。 + */ + private static final CallResult OK = new CallResult(); + /** + * 是否成功标记。 + */ + private boolean success = true; + /** + * 错误信息描述。 + */ + private String errorMessage = null; + /** + * 在验证同时,仍然需要附加的关联数据对象。 + */ + private JSONObject data; + + /** + * 创建验证结果对象。 + * + * @param errorMessage 错误描述信息。 + * @return 如果参数为空,表示成功,否则返回代码错误信息的错误对象实例。 + */ + public static CallResult create(String errorMessage) { + return errorMessage == null ? ok() : error(errorMessage); + } + + /** + * 创建验证结果对象。 + * + * @param errorMessage 错误描述信息。 + * @param data 附带的数据对象。 + * @return 如果参数为空,表示成功,否则返回代码错误信息的错误对象实例。 + */ + public static CallResult create(String errorMessage, JSONObject data) { + return errorMessage == null ? ok(data) : error(errorMessage); + } + + /** + * 创建表示验证成功的对象实例。 + * + * @return 验证成功对象实例。 + */ + public static CallResult ok() { + return OK; + } + + /** + * 创建表示验证成功的对象实例。 + * + * @param data 附带的数据对象。 + * @return 验证成功对象实例。 + */ + public static CallResult ok(JSONObject data) { + CallResult result = new CallResult(); + result.data = data; + return result; + } + + /** + * 创建表示验证失败的对象实例。 + * + * @param errorMessage 错误描述。 + * @return 验证失败对象实例。 + */ + public static CallResult error(String errorMessage) { + CallResult result = new CallResult(); + result.success = false; + result.errorMessage = errorMessage; + return result; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/DummyClass.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/DummyClass.java new file mode 100644 index 00000000..8f6ba6ca --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/DummyClass.java @@ -0,0 +1,27 @@ +package com.orangeforms.common.core.object; + +/** + * 哑元对象,主要用于注解中的缺省对象占位符。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class DummyClass { + + private static final Object EMPTY_OBJECT = new Object(); + + /** + * 可以忽略的空对象。避免sonarqube的各种警告。 + * + * @return 空对象。 + */ + public static Object emptyObject() { + return EMPTY_OBJECT; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DummyClass() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/GlobalThreadLocal.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/GlobalThreadLocal.java new file mode 100644 index 00000000..1c6d9b75 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/GlobalThreadLocal.java @@ -0,0 +1,52 @@ +package com.orangeforms.common.core.object; + +import cn.hutool.core.util.BooleanUtil; + +/** + * 线程本地化数据管理的工具类。可根据需求自行添加更多的线程本地化变量及其操作方法。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class GlobalThreadLocal { + + /** + * 存储数据权限过滤是否启用的线程本地化对象。 + * 目前的过滤条件,包括数据权限和租户过滤。 + */ + private static final ThreadLocal DATA_FILTER_ENABLE = ThreadLocal.withInitial(() -> Boolean.TRUE); + + /** + * 设置数据过滤是否打开。如果打开,当前Servlet线程所执行的SQL操作,均会进行数据过滤。 + * + * @param enable 打开为true,否则false。 + * @return 返回之前的状态,便于恢复。 + */ + public static boolean setDataFilter(boolean enable) { + boolean oldValue = DATA_FILTER_ENABLE.get(); + DATA_FILTER_ENABLE.set(enable); + return oldValue; + } + + /** + * 判断当前Servlet线程所执行的SQL操作,是否进行数据过滤。 + * + * @return true 进行数据权限过滤,否则false。 + */ + public static boolean enabledDataFilter() { + return BooleanUtil.isTrue(DATA_FILTER_ENABLE.get()); + } + + /** + * 清空该存储数据,主动释放线程本地化存储资源。 + */ + public static void clearDataFilter() { + DATA_FILTER_ENABLE.remove(); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private GlobalThreadLocal() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/LoginUserInfo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/LoginUserInfo.java new file mode 100644 index 00000000..be937103 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/LoginUserInfo.java @@ -0,0 +1,62 @@ +package com.orangeforms.common.core.object; + +import lombok.Data; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; + +/** + * 在线登录用户信息。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@ToString +@Slf4j +public class LoginUserInfo { + + /** + * 用户Id。 + */ + private Long userId; + /** + * 用户所在部门Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long deptId; + /** + * 租户Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long tenantId; + /** + * 是否为超级管理员。 + */ + private Boolean isAdmin; + /** + * 用户登录名。 + */ + private String loginName; + /** + * 用户显示名称。 + */ + private String showName; + /** + * 标识不同登录的会话Id。 + */ + private String sessionId; + /** + * 登录IP。 + */ + private String loginIp; + /** + * 登录时间。 + */ + private Date loginTime; + /** + * 登录设备类型。 + */ + private Integer deviceType; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyAggregationParam.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyAggregationParam.java new file mode 100644 index 00000000..f3171f91 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyAggregationParam.java @@ -0,0 +1,71 @@ +package com.orangeforms.common.core.object; + +import lombok.Data; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 分组聚合查询参数。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class MyAggregationParam { + + /** + * 聚合返回数据中,聚合键的常量字段名。 + * 如select groupColumn groupedKey, max(aggregationColumn) aggregatedValue。 + */ + public static final String KEY_NAME = "groupedKey"; + + /** + * 聚合返回数据中,聚合值的常量字段名。 + * 如select groupColumn groupedKey, max(aggregationColumn) aggregatedValue。 + */ + public static final String VALUE_NAME = "aggregatedValue"; + + /** + * 聚合计算是否使用数据权限进行过滤。true表示数据过滤将产生作用,否则SQL中不会包含数据过滤。 + * 目前数据过滤包括数据权限过滤和租户数据过滤。 + */ + private Boolean useDataFilter = true; + + /** + * 聚合分类,具体数值见AggregationKind。 + */ + private Integer aggregationKind; + + /** + * 和groupedInFilterValues配合使用。其value集合中的值,需要基于infilterField设定的字段进行(in list)过滤。 + */ + private String inFilterField; + + /** + * 需要分组执行的 (in list) 数据集合。 + * 在聚合类别为 MANY_TO_MANY 的场景下,将迭代每一个key并分批次执行(in list)过滤,key作为分组值返回。 + */ + private Map> groupedInFilterValues; + + /** + * 过滤条件列表。 + */ + private List whereCriteriaList; + + /** + * 分组字段。(Java对象字段名称),通常用于聚合类别为 ONE_TO_MANY 的场景。 + */ + private String groupField; + + /** + * 聚合字段。(Java对象字段名称) + */ + private String aggregationField; + + /** + * 聚合类型,具体数值见AggregationType对象的常量值。如COUNT、SUM、MIN、MAX、AVG等。 + */ + private Integer aggregationType; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyGroupCriteria.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyGroupCriteria.java new file mode 100644 index 00000000..9529b37c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyGroupCriteria.java @@ -0,0 +1,24 @@ +package com.orangeforms.common.core.object; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * Mybatis Mapper.xml中所需的分组条件对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@AllArgsConstructor +public class MyGroupCriteria { + + /** + * GROUP BY 从句后面的参数。 + */ + private String groupBy; + /** + * SELECT 从句后面的分组显示字段。 + */ + private String groupSelect; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyGroupParam.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyGroupParam.java new file mode 100644 index 00000000..ac819d07 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyGroupParam.java @@ -0,0 +1,170 @@ +package com.orangeforms.common.core.object; + +import cn.hutool.core.util.ReflectUtil; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.exception.InvalidClassFieldException; +import com.orangeforms.common.core.exception.InvalidDataFieldException; +import com.orangeforms.common.core.exception.InvalidDataModelException; +import com.orangeforms.common.core.util.MyModelUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +/** + * 查询分组参数请求对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EqualsAndHashCode(callSuper = true) +@Slf4j +@Data +public class MyGroupParam extends ArrayList { + + /** + * SQL语句的SELECT LIST中,分组字段的返回字段名称列表。 + */ + private List selectGroupFieldList; + /** + * 分组参数解析后构建的SQL语句中所需的分组数据,如GROUP BY的字段列表和SELECT LIST中的分组字段显示列表。 + */ + private MyGroupCriteria groupCriteria; + /** + * 基于分组参数对象中的数据,构建SQL中select list和group by从句可以直接使用的分组对象。 + * + * @param groupParam 分组参数对象。 + * @param modelClazz 查询表对应的主对象的Class。 + * @return SQL中所需的GROUP对象。详见MyGroupCriteria类定义。 + */ + public static MyGroupParam buildGroupBy(MyGroupParam groupParam, Class modelClazz) { + if (groupParam == null) { + return null; + } + if (modelClazz == null) { + throw new IllegalArgumentException("modelClazz Argument can't be NULL"); + } + groupParam.selectGroupFieldList = new LinkedList<>(); + StringBuilder groupByBuilder = new StringBuilder(128); + StringBuilder groupSelectBuilder = new StringBuilder(128); + int i = 0; + for (GroupInfo groupInfo : groupParam) { + GroupBaseData groupBaseData = parseGroupBaseData(groupInfo, modelClazz); + if (StringUtils.isBlank(groupBaseData.tableName)) { + throw new InvalidDataModelException(groupBaseData.modelName); + } + if (StringUtils.isBlank(groupBaseData.columnName)) { + throw new InvalidDataFieldException(groupBaseData.modelName, groupBaseData.fieldName); + } + processGroupInfo(groupInfo, groupBaseData, groupByBuilder, groupSelectBuilder); + String aliasName = StringUtils.isBlank(groupInfo.aliasName) ? groupInfo.fieldName : groupInfo.aliasName; + // selectGroupFieldList中的元素,目前只是被export操作使用。会根据集合中的元素名称匹配导出表头。 + groupParam.selectGroupFieldList.add(aliasName); + if (++i < groupParam.size()) { + groupByBuilder.append(", "); + groupSelectBuilder.append(", "); + } + } + groupParam.groupCriteria = new MyGroupCriteria(groupByBuilder.toString(), groupSelectBuilder.toString()); + return groupParam; + } + + private static GroupBaseData parseGroupBaseData(GroupInfo groupInfo, Class modelClazz) { + GroupBaseData baseData = new GroupBaseData(); + if (StringUtils.isBlank(groupInfo.fieldName)) { + throw new IllegalArgumentException("GroupInfo.fieldName can't be EMPTY"); + } + String[] stringArray = StringUtils.split(groupInfo.fieldName,'.'); + if (stringArray.length == 1) { + baseData.modelName = modelClazz.getSimpleName(); + baseData.fieldName = groupInfo.fieldName; + baseData.tableName = MyModelUtil.mapToTableName(modelClazz); + baseData.columnName = MyModelUtil.mapToColumnName(groupInfo.fieldName, modelClazz); + } else { + Field field = ReflectUtil.getField(modelClazz, stringArray[0]); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), stringArray[0]); + } + Class fieldClazz = field.getType(); + baseData.modelName = fieldClazz.getSimpleName(); + baseData.fieldName = stringArray[1]; + baseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + baseData.columnName = MyModelUtil.mapToColumnName(baseData.fieldName, fieldClazz); + } + return baseData; + } + + private static void processGroupInfo( + GroupInfo groupInfo, + GroupBaseData baseData, + StringBuilder groupByBuilder, + StringBuilder groupSelectBuilder) { + String tableName = baseData.tableName; + String columnName = baseData.columnName; + if (StringUtils.isNotBlank(groupInfo.dateAggregateBy)) { + groupByBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); + groupSelectBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); + if (ApplicationConstant.DAY_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-%m-%d')"); + groupSelectBuilder.append(", '%Y-%m-%d')"); + } else if (ApplicationConstant.MONTH_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-%m-01')"); + groupSelectBuilder.append(", '%Y-%m-01')"); + } else if (ApplicationConstant.YEAR_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-01-01')"); + groupSelectBuilder.append(", '%Y-01-01')"); + } else { + throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); + } + if (StringUtils.isNotBlank(groupInfo.aliasName)) { + groupSelectBuilder.append(" ").append(groupInfo.aliasName); + } else { + groupSelectBuilder.append(" ").append(columnName); + } + } else { + groupByBuilder.append(tableName).append(".").append(columnName); + groupSelectBuilder.append(tableName).append(".").append(columnName); + if (StringUtils.isNotBlank(groupInfo.aliasName)) { + groupSelectBuilder.append(" ").append(groupInfo.aliasName); + } + } + } + + /** + * 分组信息对象。 + */ + @Data + public static class GroupInfo { + /** + * Java对象的字段名。目前主要包含三种格式: + * 1. 简单的属性名称,如userId,将会直接映射到与其关联的数据库字段。表名为当前ModelClazz所对应的表名。 + * 映射结果或为 my_main_table.user_id + * 2. 一对一关联表属性,如user.userId,这里将先获取user属性的对象类型并映射到对应的表名,后面的userId为 + * user所在实体的属性。映射结果或为:my_sys_user.user_id + */ + private String fieldName; + /** + * SQL语句的Select List中,分组字段的别名。如果别名为NULL,直接取fieldName。 + */ + private String aliasName; + /** + * 如果该值不为NULL,则会对分组字段进行DATE_FORMAT函数的计算,并根据具体的值,将日期数据截取到指定的位。 + * day: 表示按照天聚合,将会截取到天。DATE_FORMAT(columnName, '%Y-%m-%d') + * month: 表示按照月聚合,将会截取到月。DATE_FORMAT(columnName, '%Y-%m-01') + * year: 表示按照年聚合,将会截取到年。DATE_FORMAT(columnName, '%Y-01-01') + */ + private String dateAggregateBy; + } + + private static class GroupBaseData { + private String modelName; + private String fieldName; + private String tableName; + private String columnName; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyOrderParam.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyOrderParam.java new file mode 100644 index 00000000..3df5e106 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyOrderParam.java @@ -0,0 +1,265 @@ +package com.orangeforms.common.core.object; + +import cn.hutool.core.util.ReflectUtil; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.exception.InvalidClassFieldException; +import com.orangeforms.common.core.exception.InvalidDataFieldException; +import com.orangeforms.common.core.exception.InvalidDataModelException; +import com.orangeforms.common.core.util.MyModelUtil; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.util.*; + +/** + * Controller参数中的排序请求对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EqualsAndHashCode(callSuper = true) +@Slf4j +@Data +public class MyOrderParam extends ArrayList { + + private static final String DICT_MAP = "DictMap."; + /** + * 基于排序对象中的JSON数据,构建SQL中order by从句可以直接使用的排序字符串。 + * + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 + * @return SQL中order by从句可以直接使用的排序字符串。 + */ + public static String buildOrderBy(MyOrderParam orderParam, Class modelClazz) { + if (orderParam == null) { + return null; + } + if (modelClazz == null) { + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.buildOrderBy can't be NULL"); + } + int i = 0; + StringBuilder orderBy = new StringBuilder(128); + for (OrderInfo orderInfo : orderParam) { + if (StringUtils.isBlank(orderInfo.getFieldName())) { + continue; + } + OrderBaseData orderBaseData = parseOrderBaseData(orderInfo, modelClazz); + if (StringUtils.isBlank(orderBaseData.tableName)) { + throw new InvalidDataModelException(orderBaseData.modelName); + } + if (StringUtils.isBlank(orderBaseData.columnName)) { + throw new InvalidDataFieldException(orderBaseData.modelName, orderBaseData.fieldName); + } + processOrderInfo(orderInfo, orderBaseData, orderBy); + if (++i < orderParam.size()) { + orderBy.append(", "); + } + } + return orderBy.toString(); + } + + private static void processOrderInfo( + OrderInfo orderInfo, OrderBaseData orderBaseData, StringBuilder orderByBuilder) { + if (StringUtils.isNotBlank(orderInfo.dateAggregateBy)) { + orderByBuilder.append("DATE_FORMAT(") + .append(orderBaseData.tableName).append(".").append(orderBaseData.columnName); + if (ApplicationConstant.DAY_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-%m-%d')"); + } else if (ApplicationConstant.MONTH_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-%m-01')"); + } else if (ApplicationConstant.YEAR_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-01-01')"); + } else { + throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); + } + } else { + orderByBuilder.append(orderBaseData.tableName).append(".").append(orderBaseData.columnName); + } + if (orderInfo.asc != null && !orderInfo.asc) { + orderByBuilder.append(" DESC"); + } + } + + private static OrderBaseData parseOrderBaseData(OrderInfo orderInfo, Class modelClazz) { + OrderBaseData orderBaseData = new OrderBaseData(); + orderBaseData.fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + String[] stringArray = StringUtils.split(orderBaseData.fieldName, '.'); + if (stringArray.length == 1) { + orderBaseData.modelName = modelClazz.getSimpleName(); + orderBaseData.tableName = MyModelUtil.mapToTableName(modelClazz); + orderBaseData.columnName = MyModelUtil.mapToColumnName(orderBaseData.fieldName, modelClazz); + } else { + Field field = ReflectUtil.getField(modelClazz, stringArray[0]); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), stringArray[0]); + } + Class fieldClazz = field.getType(); + orderBaseData.modelName = fieldClazz.getSimpleName(); + orderBaseData.fieldName = stringArray[1]; + orderBaseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + orderBaseData.columnName = MyModelUtil.mapToColumnName(orderBaseData.fieldName, fieldClazz); + } + return orderBaseData; + } + + /** + * 在排序列表中,可能存在基于指定表字段的排序,该函数将获取指定表的所有排序字段。 + * 返回的字符串,可直接用于SQL中的ORDER BY从句。 + * + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 + * @param relationModelName 与关联表对应的Model的名称,如my_course_paper表应对的Java对象CoursePaper。 + * 如果该值为null或空字符串,则获取所有主表的排序字段。 + * @return 返回的是表字段,而非Java对象的属性,多个字段之间逗号分隔。 + */ + public static String getOrderClauseByModelName( + MyOrderParam orderParam, Class modelClazz, String relationModelName) { + if (orderParam == null) { + return null; + } + if (modelClazz == null) { + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.getOrderClauseByModelName can't be NULL"); + } + List fieldNameList = new LinkedList<>(); + String prefix = null; + if (StringUtils.isNotBlank(relationModelName)) { + prefix = relationModelName + "."; + } + for (OrderInfo orderInfo : orderParam) { + OrderBaseData baseData = parseOrderBaseData(orderInfo, modelClazz, prefix, relationModelName); + if (baseData != null) { + fieldNameList.add(makeOrderBy(baseData, orderInfo.asc)); + } + } + return StringUtils.join(fieldNameList, ", "); + } + + private static OrderBaseData parseOrderBaseData( + OrderInfo orderInfo, Class modelClazz, String prefix, String relationModelName) { + OrderBaseData baseData = null; + String fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + if (prefix != null) { + if (fieldName.startsWith(prefix)) { + baseData = new OrderBaseData(); + Field field = ReflectUtil.getField(modelClazz, relationModelName); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), relationModelName); + } + Class fieldClazz = field.getType(); + baseData.modelName = fieldClazz.getSimpleName(); + baseData.fieldName = StringUtils.removeStart(fieldName, prefix); + baseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + baseData.columnName = MyModelUtil.mapToColumnName(fieldName, fieldClazz); + } + } else { + String dotLimitor = "."; + if (!fieldName.contains(dotLimitor)) { + baseData = new OrderBaseData(); + baseData.modelName = modelClazz.getSimpleName(); + baseData.tableName = MyModelUtil.mapToTableName(modelClazz); + baseData.columnName = MyModelUtil.mapToColumnName(fieldName, modelClazz); + } + } + return baseData; + } + + private static String makeOrderBy(OrderBaseData baseData, Boolean asc) { + if (StringUtils.isBlank(baseData.tableName)) { + throw new InvalidDataModelException(baseData.modelName); + } + if (StringUtils.isBlank(baseData.columnName)) { + throw new InvalidDataFieldException(baseData.modelName, baseData.fieldName); + } + StringBuilder orderBy = new StringBuilder(128); + orderBy.append(baseData.tableName).append(".").append(baseData.columnName); + if (asc != null && !asc) { + orderBy.append(" DESC"); + } + return orderBy.toString(); + } + + /** + * 在排序列表中,可能存在基于指定表字段的排序,该函数将删除指定表的所有排序字段。 + * + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 + * @param relationModelName 与关联表对应的Model的名称,如my_course_paper表应对的Java对象CoursePaper。 + * 如果该值为null或空字符串,则获取所有主表的排序字段。 + */ + public static void removeOrderClauseByModelName( + MyOrderParam orderParam, Class modelClazz, String relationModelName) { + if (orderParam == null) { + return; + } + if (modelClazz == null) { + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.removeOrderClauseByModelName can't be NULL"); + } + List fieldIndexList = new LinkedList<>(); + String prefix = null; + if (StringUtils.isNotBlank(relationModelName)) { + prefix = relationModelName + "."; + } + int i = 0; + for (OrderInfo orderInfo : orderParam) { + String fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + if (prefix != null) { + if (fieldName.startsWith(prefix)) { + fieldIndexList.add(i); + } + } else { + if (!fieldName.contains(".")) { + fieldIndexList.add(i); + } + } + ++i; + } + for (int index : fieldIndexList) { + orderParam.remove(index); + } + } + + /** + * 排序信息对象。 + */ + @AllArgsConstructor + @NoArgsConstructor + @Data + public static class OrderInfo { + /** + * Java对象的字段名。如果fieldName为空,则忽略跳过。目前主要包含三种格式: + * 1. 简单的属性名称,如userId,将会直接映射到与其关联的数据库字段。表名为当前ModelClazz所对应的表名。 + * 映射结果或为 my_main_table.user_id + * 2. 字典属性名称,如userIdDictMap.id,由于仅仅支持字典中Id数据的排序,所以直接截取DictMap之前的字符串userId作为排序属性。 + * 表名为当前ModelClazz所对应的表名。映射结果或为 my_main_table.user_id + * 3. 一对一关联表属性,如user.userId,这里将先获取user属性的对象类型并映射到对应的表名,后面的userId为 + * user所在实体的属性。映射结果或为:my_sys_user.user_id + */ + private String fieldName; + /** + * 排序方向。true为升序,否则降序。 + */ + private Boolean asc = true; + /** + * 如果该值不为NULL,则会对日期型排序字段进行DATE_FORMAT函数的计算,并根据具体的值,将日期数据截取到指定的位。 + * day: 表示按照天聚合,将会截取到天。DATE_FORMAT(columnName, '%Y-%m-%d') + * month: 表示按照月聚合,将会截取到月。DATE_FORMAT(columnName, '%Y-%m-01') + * year: 表示按照年聚合,将会截取到年。DATE_FORMAT(columnName, '%Y-01-01') + */ + private String dateAggregateBy; + } + + private static class OrderBaseData { + private String modelName; + private String fieldName; + private String tableName; + private String columnName; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyPageData.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyPageData.java new file mode 100644 index 00000000..81eab93a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyPageData.java @@ -0,0 +1,36 @@ +package com.orangeforms.common.core.object; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.LinkedList; +import java.util.List; + +/** + * 分页数据的应答返回对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MyPageData { + /** + * 数据列表。 + */ + private List dataList; + /** + * 数据总数量。 + */ + private Long totalCount; + + /** + * 为了保持前端的数据格式兼容性,在没有数据的时候,需要返回空分页对象。 + * @return 空分页对象。 + */ + public static MyPageData emptyPageData() { + return new MyPageData<>(new LinkedList<>(), 0L); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyPageParam.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyPageParam.java new file mode 100644 index 00000000..d6d3c166 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyPageParam.java @@ -0,0 +1,57 @@ +package com.orangeforms.common.core.object; + +import lombok.Getter; + +/** + * Controller参数中的分页请求对象 + * + * @author Jerry + * @date 2020-08-08 + */ +@Getter +public class MyPageParam { + + public static final int DEFAULT_PAGE_NUM = 1; + public static final int DEFAULT_PAGE_SIZE = 10; + public static final int DEFAULT_MAX_SIZE = 100; + + /** + * 分页号码,从1开始计数。 + */ + private Integer pageNum; + + /** + * 每页大小。 + */ + private Integer pageSize; + + /** + * 设置当前分页页号。 + * + * @param pageNum 页号,如果传入非法值,则使用缺省值。 + */ + public void setPageNum(Integer pageNum) { + if (pageNum == null) { + return; + } + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + this.pageNum = pageNum; + } + + /** + * 设置分页的大小。 + * + * @param pageSize 分页大小,如果传入非法值,则使用缺省值。 + */ + public void setPageSize(Integer pageSize) { + if (pageSize == null) { + return; + } + if (pageSize <= 0 || pageSize > DEFAULT_MAX_SIZE) { + pageSize = DEFAULT_PAGE_SIZE; + } + this.pageSize = pageSize; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyQueryParam.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyQueryParam.java new file mode 100644 index 00000000..5e466d13 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyQueryParam.java @@ -0,0 +1,115 @@ +package com.orangeforms.common.core.object; + +import cn.hutool.core.bean.BeanUtil; +import lombok.Data; + +import java.util.*; + +/** + * 查询参数。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class MyQueryParam { + + /** + * Select中返回的Java属性列表。 + */ + private List selectFieldList; + + /** + * 用于数据过滤的DTO对象。 + */ + private Map filterMap; + + /** + * 聚合计算是否使用数据权限进行过滤。true表示数据过滤将产生作用,否则SQL中不会包含数据过滤。 + * 目前数据过滤包括数据权限过滤和租户数据过滤。 + */ + private Boolean useDataFilter = true; + + /** + * (In-list) 实体对象中的过滤字段(而非数据表列名),需和下面的inFilterValues字段一起使用。 + * NOTE: MyWhereCriteria中的IN类型过滤条件,完全可以替代该字段。之所以保留主要是为了保证更好的接口可读性。 + */ + private String inFilterField; + + /** + * (In-list) 过滤数据集合。 + */ + private Set inFilterValues; + + /** + * 过滤条件列表。 + */ + private List criteriaList; + + /** + * 排序对象。 + */ + private MyOrderParam orderParam; + + /** + * 分页对象。 + */ + private MyPageParam pageParam; + + /** + * 是否包含关联字典数据 + */ + private Boolean withDict = false; + + /** + * 缺省构造函数。 + */ + public MyQueryParam() { + + } + + /** + * 构造函数。 + * + * @param withDict 是否关联字典数据。 + */ + public MyQueryParam(Boolean withDict) { + this.withDict = withDict; + } + + /** + * 将参数中Dto类型的过滤对象转换为内部的Map对象,便于服务间传输。 + * + * @param filterDto 过滤对象。 + * @param Dto对象的类型。 + */ + public void setFilterDto(T filterDto) { + this.filterMap = BeanUtil.beanToMap(filterDto); + } + + /** + * 将内部的过滤Map对象转换为指定类型的Dto对象并返回。 + * + * @param filterClazz Dto对象的Class对象。 + * @param Dto对象的类型。 + * @return 如果filterMap字段为空,则返回空对象。 + */ + public T getFilterDto(Class filterClazz) { + if (filterMap == null) { + return null; + } + return BeanUtil.toBeanIgnoreError(this.filterMap, filterClazz); + } + + /** + * 添加自定义过滤条件。 + * + * @param criteria 自定义过滤条件。 + */ + public void addCriteriaList(MyWhereCriteria criteria) { + if (this.criteriaList == null) { + criteriaList = new LinkedList<>(); + } + criteriaList.add(criteria); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyRelationParam.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyRelationParam.java new file mode 100644 index 00000000..356a0fe7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyRelationParam.java @@ -0,0 +1,122 @@ +package com.orangeforms.common.core.object; + +import lombok.Builder; +import lombok.Data; + +/** + * 实体对象数据组装参数构建器。 + * BaseService中的实体对象数据组装函数,会根据该参数对象进行数据组装。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@Builder +public class MyRelationParam { + + /** + * 是否组装字典关联的标记。 + * 组装RelationDict和RelationConstDict注解标记的字段。 + */ + private boolean buildDict; + + /** + * 是否组装远程字典关联的标记。 + * 组装RelationDict和RelationConstDict注解标记的字段。 + */ + private boolean buildRemoteDict; + + /** + * 是否组装一对一关联的标记。 + * 组装RelationOneToOne注解标记的字段。 + */ + private boolean buildOneToOne; + + /** + * 是否组装远程一对一关联的标记。 + * 组装RelationOneToOne注解标记的字段。 + */ + private boolean buildRemoteOneToOne; + + /** + * 在组装一对一关联的同时,是否继续关联从表中的字典。 + * 从表中RelationDict和RelationConstDict注解标记的字段。 + * 该字段为true时,无需设置buildOneToOne了。 + */ + private boolean buildOneToOneWithDict; + + /** + * 在组装远程一对一关联的同时,是否继续关联从表中的字典。 + * 从表中RelationDict和RelationConstDict注解标记的字段。 + * 该字段为true时,无需设置buildOneToOne了。 + */ + private boolean buildRemoteOneToOneWithDict; + + /** + * 是否组装本地一对多关联的标记。 + * 组装RelationOneToMany注解标记的字段。 + */ + private boolean buildOneToMany; + + /** + * 是否组装主表对多对多中间表关联的标记。 + * 组装RelationManyToMany注解标记的字段。 + */ + private boolean buildRelationManyToMany; + + /** + * 是否组装聚合计算关联的标记。 + * 组装RelationOneToManyAggregation和RelationManyToManyAggregation注解标记的字段。 + */ + private boolean buildAggregation; + + /** + * 是否组装远程聚合计算关联的标记。 + * 组装RelationOneToManyAggregation和RelationManyToManyAggregation注解标记的字段。 + */ + private boolean buildRemoteAggregation; + + /** + * 便捷方法,返回仅做字典关联的参数对象。 + * + * @return 返回仅做字典关联的参数对象。 + */ + public static MyRelationParam dictOnly() { + return MyRelationParam.builder().buildDict(true).buildRemoteDict(true).build(); + } + + /** + * 便捷方法,返回仅做字典关联、一对一从表及其字典和聚合计算的参数对象。 + * NOTE: 对于一对多和多对多,这种从表数据是列表结果的关联,均不返回。 + * + * @return 返回仅做字典关联、一对一从表及其字典和聚合计算的参数对象。 + */ + public static MyRelationParam normal() { + return MyRelationParam.builder() + .buildDict(true) + .buildRemoteDict(true) + .buildOneToOneWithDict(true) + .buildRemoteOneToOneWithDict(true) + .buildAggregation(true) + .buildRemoteAggregation(true) + .build(); + } + + /** + * 便捷方法,返回全部关联的参数对象。 + * + * @return 返回全部关联的参数对象。 + */ + public static MyRelationParam full() { + return MyRelationParam.builder() + .buildDict(true) + .buildRemoteDict(true) + .buildOneToOneWithDict(true) + .buildRemoteOneToOneWithDict(true) + .buildAggregation(true) + .buildRemoteAggregation(true) + .buildRelationManyToMany(true) + .buildOneToMany(true) + .build(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyWhereCriteria.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyWhereCriteria.java new file mode 100644 index 00000000..0cd2152c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/MyWhereCriteria.java @@ -0,0 +1,361 @@ +package com.orangeforms.common.core.object; + +import cn.hutool.core.util.ReflectUtil; +import com.alibaba.fastjson.annotation.JSONField; +import com.orangeforms.common.core.exception.InvalidDataFieldException; +import com.orangeforms.common.core.exception.InvalidDataModelException; +import com.orangeforms.common.core.util.MyModelUtil; +import lombok.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * Where中的条件语句。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Data +@NoArgsConstructor +public class MyWhereCriteria { + + /** + * 等于 + */ + public static final int OPERATOR_EQUAL = 0; + + /** + * 不等于 + */ + public static final int OPERATOR_NOT_EQUAL = 1; + + /** + * 大于等于 + */ + public static final int OPERATOR_GE = 2; + + /** + * 大于 + */ + public static final int OPERATOR_GT = 3; + + /** + * 小于等于 + */ + public static final int OPERATOR_LE = 4; + + /** + * 小于 + */ + public static final int OPERATOR_LT = 5; + + /** + * LIKE + */ + public static final int OPERATOR_LIKE = 6; + + /** + * NOT NULL + */ + public static final int OPERATOR_NOT_NULL = 7; + + /** + * IS NULL + */ + public static final int OPERATOR_IS_NULL = 8; + + /** + * IN + */ + public static final int OPERATOR_IN = 9; + + /** + * 参与过滤的实体对象的Class。 + */ + @JSONField(serialize = false) + private Class modelClazz; + + /** + * 数据库表名。 + */ + private String tableName; + + /** + * Java属性名称。 + */ + private String fieldName; + + /** + * 数据表字段名。 + */ + private String columnName; + + /** + * 数据表字段类型。 + */ + private Integer columnType; + + /** + * 操作符类型,取值范围见上面的常量值。 + */ + private Integer operatorType; + + /** + * 条件数据值。 + */ + private Object value; + + public MyWhereCriteria(Class modelClazz, String fieldName, Integer operatorType, Object value) { + this.modelClazz = modelClazz; + this.fieldName = fieldName; + this.operatorType = operatorType; + this.value = value; + } + + /** + * 设置条件值。 + * + * @param fieldName 条件所属的实体对象的字段名。 + * @param operatorType 条件操作符。具体值可参考当前对象的静态变量。 + * @param value 条件过滤值。 + * @return 验证结果对象,如果有错误将会返回具体的错误信息。 + */ + public CallResult setCriteria(String fieldName, Integer operatorType, Object value) { + this.operatorType = operatorType; + this.fieldName = fieldName; + this.value = value; + return doVerify(); + } + + /** + * 设置条件值。 + * + * @param modelClazz 数据表对应实体对象的Class. + * @param fieldName 条件所属的实体对象的字段名。 + * @param operatorType 条件操作符。具体值可参考当前对象的静态变量。 + * @param value 条件过滤值。 + * @return 验证结果对象,如果有错误将会返回具体的错误信息。 + */ + public CallResult setCriteria(Class modelClazz, String fieldName, Integer operatorType, Object value) { + this.modelClazz = modelClazz; + this.operatorType = operatorType; + this.fieldName = fieldName; + this.value = value; + return doVerify(); + } + + /** + * 设置条件值,通过该构造方法设置时,通常是直接将表名、字段名、字段类型等赋值,无需在通过modelClazz进行推演。 + * + * @param tableName 数据表名。 + * @param columnName 数据字段名。 + * @param columnType 数据字段类型。 + * @param operatorType 操作类型。具体值可参考当前对象的静态变量。 + * @param value 条件过滤值。 + */ + public void setCriteria( + String tableName, String columnName, String columnType, Integer operatorType, Object value) { + this.tableName = tableName; + this.columnName = columnName; + this.columnType = MyModelUtil.NUMERIC_FIELD_TYPE; + if (String.class.getSimpleName().equals(columnType)) { + this.columnType = MyModelUtil.STRING_FIELD_TYPE; + } else if (Date.class.getSimpleName().equals(columnType)) { + this.columnType = MyModelUtil.DATE_FIELD_TYPE; + } + this.operatorType = operatorType; + this.value = value; + } + + /** + * 在执行该函数之前,该对象的所有数据均已经赋值完毕。 + * 该函数主要验证操作符字段和条件值字段对应关系的合法性。 + * + * @return 验证结果对象,如果有错误将会返回具体的错误信息。 + */ + public CallResult doVerify() { + if (fieldName == null) { + return CallResult.error("过滤字段名称 [fieldName] 不能为空!"); + } + if (modelClazz != null && ReflectUtil.getField(modelClazz, fieldName) == null) { + return CallResult.error( + "过滤字段 [" + fieldName + "] 在实体对象 [" + modelClazz.getSimpleName() + "] 中并不存在!"); + } + if (!checkOperatorType()) { + return CallResult.error("无效的操作符类型 [" + operatorType + "]!"); + } + // 其他操作符必须包含value值 + if (operatorType != OPERATOR_IS_NULL && operatorType != OPERATOR_NOT_NULL && value == null) { + String operatorString = this.getOperatorString(); + return CallResult.error("操作符 [" + operatorString + "] 的条件值不能为空!"); + } + if (this.operatorType == OPERATOR_IN) { + if (!(value instanceof Collection)) { + return CallResult.error("操作符 [IN] 的条件值必须为集合对象!"); + } + if (CollectionUtils.isEmpty((Collection) value)) { + return CallResult.error("操作符 [IN] 的条件值不能为空!"); + } + } + return CallResult.ok(); + } + + /** + * 判断操作符类型是否合法。 + * + * @return 合法返回true,否则false。 + */ + public boolean checkOperatorType() { + return operatorType != null + && (operatorType >= OPERATOR_EQUAL && operatorType <= OPERATOR_IN); + } + + /** + * 获取操作符的字符串形式。 + * + * @return 操作符的字符串。 + */ + public String getOperatorString() { + switch (operatorType) { + case OPERATOR_EQUAL: + return " = "; + case OPERATOR_NOT_EQUAL: + return " != "; + case OPERATOR_GE: + return " >= "; + case OPERATOR_GT: + return " > "; + case OPERATOR_LE: + return " <= "; + case OPERATOR_LT: + return " < "; + case OPERATOR_LIKE: + return " LIKE "; + case OPERATOR_NOT_NULL: + return " IS NOT NULL "; + case OPERATOR_IS_NULL: + return " IS NULL "; + case OPERATOR_IN: + return " IN "; + default: + return null; + } + } + + /** + * 获取组装后的SQL Where从句,如 table_name.column_name = 'value'。 + * 与查询数据表对应的实体对象Class为当前对象的modelClazz字段。 + * + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public String makeCriteriaString() { + return makeCriteriaString(this.modelClazz); + } + + /** + * 获取组装后的SQL Where从句,如 table_name.column_name = 'value'。 + * + * @param modelClazz 与查询数据表对应的实体对象的Class。 + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @exception InvalidDataModelException 参数modelClazz没有对应的table,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public String makeCriteriaString(Class modelClazz) { + String tableName; + String columnName; + Integer columnType; + if (modelClazz != null) { + Tuple2 fieldInfo = MyModelUtil.mapToColumnInfo(fieldName, modelClazz); + if (fieldInfo == null) { + throw new InvalidDataFieldException(modelClazz.getSimpleName(), fieldName); + } + columnName = fieldInfo.getFirst(); + columnType = fieldInfo.getSecond(); + tableName = MyModelUtil.mapToTableName(modelClazz); + if (tableName == null) { + throw new InvalidDataModelException(modelClazz.getSimpleName()); + } + } else { + tableName = this.tableName; + columnName = this.columnName; + columnType = this.columnType; + } + return this.buildClauseString(tableName, columnName, columnType); + } + + /** + * 获取组装后的SQL Where从句。如 table_name.column_name = 'value'。 + * + * @param criteriaList 条件列表,所有条件直接目前仅支持 AND 的关系。 + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public static String makeCriteriaString(List criteriaList) { + return makeCriteriaString(criteriaList, null); + } + + /** + * 获取组装后的SQL Where从句。如 table_name.column_name = 'value'。 + * + * @param criteriaList 条件列表,所有条件直接目前仅支持 AND 的关系。 + * @param modelClazz 与数据表对应的实体对象的Class。 + * 如果不为NULL实体对象Class使用该值,否则使用每个MyWhereCriteria自身的modelClazz。 + * @exception InvalidDataFieldException selectFieldList中存在非法实体字段时,抛出该异常。 + * @return 组装后的SQL条件从句。 + */ + public static String makeCriteriaString(List criteriaList, Class modelClazz) { + if (CollectionUtils.isEmpty(criteriaList)) { + return null; + } + StringBuilder sb = new StringBuilder(256); + int i = 0; + for (MyWhereCriteria whereCriteria : criteriaList) { + Class clazz = modelClazz; + if (clazz == null) { + clazz = whereCriteria.modelClazz; + } + if (i++ != 0) { + sb.append(" AND "); + } + String criteriaString = whereCriteria.makeCriteriaString(clazz); + sb.append(criteriaString); + } + return sb.length() == 0 ? null : sb.toString(); + } + + private String buildClauseString(String tableName, String columnName, Integer columnType) { + StringBuilder sb = new StringBuilder(64); + sb.append(tableName).append(".").append(columnName).append(getOperatorString()); + if (operatorType == OPERATOR_IN) { + Collection filterValues = (Collection) value; + sb.append("("); + int i = 0; + for (Object filterValue : filterValues) { + if (columnType.equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { + sb.append(filterValue); + } else { + sb.append("'").append(filterValue).append("'"); + } + if (i++ != filterValues.size() - 1) { + sb.append(", "); + } + } + sb.append(")"); + return sb.toString(); + } + if (value != null) { + if (columnType.equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { + sb.append(value); + } else { + sb.append("'").append(value).append("'"); + } + } + return sb.toString(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/ResponseResult.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/ResponseResult.java new file mode 100644 index 00000000..eb8a5379 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/ResponseResult.java @@ -0,0 +1,235 @@ +package com.orangeforms.common.core.object; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.util.ContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * 接口返回对象 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Data +public class ResponseResult { + + /** + * 为了优化性能,所有没有携带数据的正确结果,均可用该对象表示。 + */ + private static final ResponseResult OK = new ResponseResult<>(); + /** + * 是否成功标记。 + */ + private boolean success = true; + /** + * 错误码。 + */ + private String errorCode = "NO-ERROR"; + /** + * 错误信息描述。 + */ + private String errorMessage = "NO-MESSAGE"; + /** + * 实际数据。 + */ + private T data = null; + + /** + * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和 getErrorMessage()。 + * + * @param errorCodeEnum 错误码枚举 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult create(ErrorCodeEnum errorCodeEnum) { + return create(errorCodeEnum, errorCodeEnum.getErrorMessage()); + } + + /** + * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 + * + * @param errorCodeEnum 错误码枚举。 + * @param errorMessage 如果该参数为null,错误信息取自errorCodeEnum参数内置的errorMessage,否则使用当前参数。 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult create(ErrorCodeEnum errorCodeEnum, String errorMessage) { + errorMessage = errorMessage != null ? errorMessage : errorCodeEnum.getErrorMessage(); + return errorCodeEnum == ErrorCodeEnum.NO_ERROR ? success() : error(errorCodeEnum.name(), errorMessage); + } + + /** + * 根据参数errorCode是否为空,判断创建成功对象还是错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCode 和参数 errorMessage。 + * + * @param errorCode 自定义的错误码 + * @param errorMessage 自定义的错误信息 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult create(String errorCode, String errorMessage) { + return errorCode == null ? success() : error(errorCode, errorMessage); + } + + /** + * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 + * + * @param errorCodeEnum 错误码枚举。 + * @param errorMessage 如果该参数为null,错误信息取自errorCodeEnum参数内置的errorMessage,否则使用当前参数。 + * @param data 如果错误枚举值为NO_ERROR,则返回该数据。 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult create(ErrorCodeEnum errorCodeEnum, String errorMessage, T data) { + errorMessage = errorMessage != null ? errorMessage : errorCodeEnum.getErrorMessage(); + return errorCodeEnum == ErrorCodeEnum.NO_ERROR ? success(data) : error(errorCodeEnum.name(), errorMessage); + } + + /** + * 创建成功对象。 + * 如果需要绑定返回数据,可以在实例化后调用setDataObject方法。 + * + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult success() { + return OK; + } + + /** + * 创建带有返回数据的成功对象。 + * + * @param data 返回的数据对象 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult success(T data) { + ResponseResult resp = new ResponseResult<>(); + resp.data = data; + return resp; + } + + /** + * 创建错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和 getErrorMessage()。 + * + * @param errorCodeEnum 错误码枚举 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult error(ErrorCodeEnum errorCodeEnum) { + return error(errorCodeEnum.name(), errorCodeEnum.getErrorMessage()); + } + + /** + * 创建错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 + * + * @param errorCodeEnum 错误码枚举 + * @param errorMessage 自定义的错误信息 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult error(ErrorCodeEnum errorCodeEnum, String errorMessage) { + return error(errorCodeEnum.name(), errorMessage); + } + + /** + * 创建错误对象。 + * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCode 和参数 errorMessage。 + * + * @param errorCode 自定义的错误码 + * @param errorMessage 自定义的错误信息 + * @return 返回创建的ResponseResult实例对象 + */ + public static ResponseResult error(String errorCode, String errorMessage) { + return new ResponseResult<>(errorCode, errorMessage); + } + + /** + * 根据参数中出错的ResponseResult,创建新的错误应答对象。 + * + * @param errorCause 导致错误原因的应答对象。 + * @return 返回创建的ResponseResult实例对象。 + */ + public static ResponseResult errorFrom(ResponseResult errorCause) { + return error(errorCause.errorCode, errorCause.getErrorMessage()); + } + + /** + * 根据参数中出错的CallResult,创建新的错误应答对象。 + * + * @param errorCause 导致错误原因的应答对象。 + * @return 返回创建的ResponseResult实例对象。 + */ + public static ResponseResult errorFrom(CallResult errorCause) { + return error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorCause.getErrorMessage()); + } + + /** + * 是否成功。 + * + * @return true成功,否则false。 + */ + public boolean isSuccess() { + return success; + } + + /** + * 通过HttpServletResponse直接输出应该信息的工具方法。 + * + * @param httpStatus http状态码。 + * @param responseResult 应答内容。 + * @param 数据对象类型。 + * @throws IOException 异常错误。 + */ + public static void output(int httpStatus, ResponseResult responseResult) throws IOException { + if (httpStatus != HttpServletResponse.SC_OK) { + log.error(JSON.toJSONString(responseResult)); + } else { + log.info(JSON.toJSONString(responseResult)); + } + HttpServletResponse response = ContextUtil.getHttpResponse(); + PrintWriter out = response.getWriter(); + response.setContentType("application/json; charset=utf-8"); + response.setStatus(httpStatus); + if (responseResult != null) { + out.print(JSON.toJSONString(responseResult)); + } + out.flush(); + } + + /** + * 通过HttpServletResponse直接输出应该信息的工具方法。 + * + * @param httpStatus http状态码。 + * @param 数据对象类型。 + * @throws IOException 异常错误。 + */ + public static void output(int httpStatus) throws IOException { + output(httpStatus, null); + } + + /** + * 通过HttpServletResponse直接输出应该信息的工具方法。Http状态码为200。 + * + * @param responseResult 应答内容。 + * @param 数据对象类型。 + * @throws IOException 异常错误。 + */ + public static void output(ResponseResult responseResult) throws IOException { + output(HttpServletResponse.SC_OK, responseResult); + } + + private ResponseResult() { + + } + + private ResponseResult(String errorCode, String errorMessage) { + this.success = false; + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/TokenData.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/TokenData.java new file mode 100644 index 00000000..ef88a337 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/TokenData.java @@ -0,0 +1,135 @@ +package com.orangeforms.common.core.object; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.util.ContextUtil; +import lombok.Data; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.Date; + +/** + * 基于Jwt,用于前后端传递的令牌对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@ToString +@Slf4j +public class TokenData { + + /** + * 在HTTP Request对象中的属性键。 + */ + public static final String REQUEST_ATTRIBUTE_NAME = "tokenData"; + /** + * 用户Id。 + */ + private Long userId; + /** + * 用户所属角色。多个角色之间逗号分隔。 + */ + private String roleIds; + /** + * 用户所在部门Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long deptId; + /** + * 用户所属岗位Id。多个岗位之间逗号分隔。仅当系统支持岗位时有值。 + */ + private String postIds; + /** + * 用户的部门岗位Id。多个岗位之间逗号分隔。仅当系统支持岗位时有值。 + */ + private String deptPostIds; + /** + * 租户Id。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private Long tenantId; + /** + * 是否为超级管理员。 + */ + private Boolean isAdmin; + /** + * 用户登录名。 + */ + private String loginName; + /** + * 用户显示名称。 + */ + private String showName; + /** + * 设备类型。参考 AppDeviceType。 + */ + private Integer deviceType; + /** + * 标识不同登录的会话Id。 + */ + private String sessionId; + /** + * 访问uaa的授权token。 + * 仅当系统支持uaa时可用,否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。 + */ + private String uaaAccessToken; + /** + * 数据库路由键(仅当水平分库时使用)。 + */ + private Integer datasourceRouteKey; + /** + * 登录IP。 + */ + private String loginIp; + /** + * 登录时间。 + */ + private Date loginTime; + + /** + * 将令牌对象添加到Http请求对象。 + * + * @param tokenData 令牌对象。 + */ + public static void addToRequest(TokenData tokenData) { + HttpServletRequest request = ContextUtil.getHttpRequest(); + request.setAttribute(TokenData.REQUEST_ATTRIBUTE_NAME, tokenData); + } + + /** + * 从Http Request对象中获取令牌对象。 + * + * @return 令牌对象。 + */ + public static TokenData takeFromRequest() { + HttpServletRequest request = ContextUtil.getHttpRequest(); + TokenData tokenData = (TokenData) request.getAttribute(REQUEST_ATTRIBUTE_NAME); + if (tokenData != null) { + return tokenData; + } + String token = request.getHeader(REQUEST_ATTRIBUTE_NAME); + if (StringUtils.isNotBlank(token)) { + tokenData = JSON.parseObject(token, TokenData.class); + } else { + token = request.getParameter(REQUEST_ATTRIBUTE_NAME); + if (StringUtils.isNotBlank(token)) { + tokenData = JSON.parseObject(token, TokenData.class); + } + } + if (tokenData != null) { + try { + tokenData.showName = URLDecoder.decode(tokenData.showName, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + log.error("Failed to call TokenData.takeFromRequest", e); + } + addToRequest(tokenData); + } + return tokenData; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/Tuple2.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/Tuple2.java new file mode 100644 index 00000000..7d7bc81f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/object/Tuple2.java @@ -0,0 +1,49 @@ +package com.orangeforms.common.core.object; + +/** + * 二元组对象。主要用于可以一次返回多个结果的场景,同时还能避免强制转换。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class Tuple2 { + + /** + * 第一个变量。 + */ + private final T1 first; + /** + * 第二个变量。 + */ + private final T2 second; + + /** + * 构造函数。 + * + * @param first 第一个变量。 + * @param second 第二个变量。 + */ + public Tuple2(T1 first, T2 second) { + this.first = first; + this.second = second; + } + + /** + * 获取第一个变量。 + * + * @return 返回第一个变量。 + */ + public T1 getFirst() { + return first; + } + + /** + * 获取第二个变量。 + * + * @return 返回第二个变量。 + */ + public T2 getSecond() { + return second; + } +} + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/BaseUpDownloader.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/BaseUpDownloader.java new file mode 100644 index 00000000..e2702904 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/BaseUpDownloader.java @@ -0,0 +1,137 @@ +package com.orangeforms.common.core.upload; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.util.ContextUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 上传或下载文件抽象父类。 + * 包含存储本地文件的功能,以及上传和下载所需的通用方法。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public abstract class BaseUpDownloader { + + /** + * 构建上传文件的完整目录。 + * + * @param rootBaseDir 文件下载的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @return 上传文件的完整路径名。 + */ + public String makeFullPath( + String rootBaseDir, String modelName, String fieldName, Boolean asImage) { + StringBuilder uploadPathBuilder = new StringBuilder(128); + if (StringUtils.isNotBlank(rootBaseDir)) { + uploadPathBuilder.append(rootBaseDir).append("/"); + } + if (Boolean.TRUE.equals(asImage)) { + uploadPathBuilder.append(ApplicationConstant.UPLOAD_IMAGE_PARENT_PATH); + } else { + uploadPathBuilder.append(ApplicationConstant.UPLOAD_ATTACHMENT_PARENT_PATH); + } + uploadPathBuilder.append("/").append(modelName).append("/").append(fieldName).append("/"); + return uploadPathBuilder.toString(); + } + + /** + * 构建上传操作的返回对象。 + * + * @param serviceContextPath 微服务的上下文路径,如: /admin/upms。 + * @param originalFilename 上传文件的原始文件名(包含扩展名)。 + */ + public void fillUploadResponseInfo( + UploadResponseInfo responseInfo, String serviceContextPath, String originalFilename) { + // 根据请求上传的uri构建下载uri,只是将末尾的/upload改为/download即可。 + HttpServletRequest request = ContextUtil.getHttpRequest(); + String uri = request.getRequestURI(); + uri = StringUtils.removeEnd(uri, "/"); + uri = StringUtils.removeEnd(uri, "/upload"); + String downloadUri; + if (StringUtils.isBlank(serviceContextPath)) { + downloadUri = uri + "/download"; + } else { + downloadUri = serviceContextPath + uri + "/download"; + } + StringBuilder filenameBuilder = new StringBuilder(64); + filenameBuilder.append(MyCommonUtil.generateUuid()) + .append(".").append(FilenameUtils.getExtension(originalFilename)); + responseInfo.setDownloadUri(downloadUri); + responseInfo.setFilename(filenameBuilder.toString()); + } + + /** + * 执行下载操作,从本地文件系统读取数据,并将读取的数据直接写入到HttpServletResponse应答对象。 + * + * @param rootBaseDir 文件下载的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param fileName 文件名。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @param response Http 应答对象。 + * @throws Exception 操作错误。 + */ + public abstract void doDownload( + String rootBaseDir, + String modelName, + String fieldName, + String fileName, + Boolean asImage, + HttpServletResponse response) throws Exception; + + /** + * 执行文件上传操作,并存入本地文件系统,再将与该文件下载对应的Url直接写入到HttpServletResponse应答对象,返回给前端。 + * + * @param serviceContextPath 微服务的上下文路径,如: /admin/upms。 + * @param rootBaseDir 存放上传文件的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param uploadFile Http请求中上传的文件对象。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @return 存储在本地上传文件名。 + * @throws Exception 操作错误。 + */ + public abstract UploadResponseInfo doUpload( + String serviceContextPath, + String rootBaseDir, + String modelName, + String fieldName, + Boolean asImage, + MultipartFile uploadFile) throws Exception; + + /** + * 判断filename参数指定的文件名,是否被包含在fileInfoJson参数中。 + * + * @param fileInfoJson 内部类UploadFileInfo的JSONArray数组。 + * @param filename 被包含的文件名。 + * @return 存在返回true,否则false。 + */ + public static boolean containFile(String fileInfoJson, String filename) { + if (StringUtils.isAnyBlank(fileInfoJson, filename)) { + return false; + } + List fileInfoList = JSON.parseArray(fileInfoJson, UploadResponseInfo.class); + if (CollectionUtils.isNotEmpty(fileInfoList)) { + for (UploadResponseInfo fileInfo : fileInfoList) { + if (StringUtils.equals(filename, fileInfo.getFilename())) { + return true; + } + } + } + return false; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/LocalUpDownloader.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/LocalUpDownloader.java new file mode 100644 index 00000000..b943ae21 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/LocalUpDownloader.java @@ -0,0 +1,149 @@ +package com.orangeforms.common.core.upload; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.Objects; + +/** + * 存储本地文件的上传下载实现类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Component +public class LocalUpDownloader extends BaseUpDownloader { + + @Autowired + private UpDownloaderFactory factory; + + @PostConstruct + public void doRegister() { + factory.registerUpDownloader(UploadStoreTypeEnum.LOCAL_SYSTEM, this); + } + + /** + * 执行下载操作,从本地文件系统读取数据,并将读取的数据直接写入到HttpServletResponse应答对象。 + * + * @param rootBaseDir 文件下载的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param fileName 文件名。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @param response Http 应答对象。 + */ + @Override + public void doDownload( + String rootBaseDir, + String modelName, + String fieldName, + String fileName, + Boolean asImage, + HttpServletResponse response) { + String uploadPath = makeFullPath(rootBaseDir, modelName, fieldName, asImage); + String fullFileanme = uploadPath + "/" + fileName; + File file = new File(fullFileanme); + if (!file.exists()) { + log.warn("Download file [" + fullFileanme + "] failed, no file found!"); + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + response.setHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + byte[] buff = new byte[2048]; + try (OutputStream os = response.getOutputStream(); + BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { + int i = bis.read(buff); + while (i != -1) { + os.write(buff, 0, i); + os.flush(); + i = bis.read(buff); + } + } catch (IOException e) { + log.error("Failed to call LocalUpDownloader.doDownload", e); + } + } + + /** + * 执行文件上传操作,并存入本地文件系统,再将与该文件下载对应的Url直接写入到HttpServletResponse应答对象,返回给前端。 + * + * @param serviceContextPath 微服务的上下文路径,如: /admin/upms。 + * @param rootBaseDir 存放上传文件的根目录。 + * @param modelName 所在数据表的实体对象名。 + * @param fieldName 关联字段的实体对象属性名。 + * @param uploadFile Http请求中上传的文件对象。 + * @param asImage 是否为图片对象。图片是无需权限验证的,因此和附件存放在不同的子目录。 + * @return 存储在本地上传文件名。 + * @throws IOException 文件操作错误。 + */ + @Override + public UploadResponseInfo doUpload( + String serviceContextPath, + String rootBaseDir, + String modelName, + String fieldName, + Boolean asImage, + MultipartFile uploadFile) throws IOException { + UploadResponseInfo responseInfo = new UploadResponseInfo(); + if (Objects.isNull(uploadFile) || uploadFile.isEmpty()) { + responseInfo.setUploadFailed(true); + responseInfo.setErrorMessage(ErrorCodeEnum.INVALID_UPLOAD_FILE_ARGUMENT.getErrorMessage()); + return responseInfo; + } + String uploadPath = makeFullPath(rootBaseDir, modelName, fieldName, asImage); + fillUploadResponseInfo(responseInfo, serviceContextPath, uploadFile.getOriginalFilename()); + try { + byte[] bytes = uploadFile.getBytes(); + Path path = Paths.get(uploadPath + responseInfo.getFilename()); + // 如果没有files文件夹,则创建 + if (!Files.isWritable(path)) { + Files.createDirectories(Paths.get(uploadPath)); + } + // 文件写入指定路径 + Files.write(path, bytes); + } catch (IOException e) { + log.error("Failed to write uploaded file [" + uploadFile.getOriginalFilename() + " ].", e); + responseInfo.setUploadFailed(true); + responseInfo.setErrorMessage(ErrorCodeEnum.INVALID_UPLOAD_FILE_IOERROR.getErrorMessage()); + return responseInfo; + } + return responseInfo; + } + + /** + * 判断filename参数指定的文件名,是否被包含在fileInfoJson参数中。 + * + * @param fileInfoJson 内部类UploadFileInfo的JSONArray数组。 + * @param filename 被包含的文件名。 + * @return 存在返回true,否则false。 + */ + public static boolean containFile(String fileInfoJson, String filename) { + if (StringUtils.isAnyBlank(fileInfoJson, filename)) { + return false; + } + List fileInfoList = JSON.parseArray(fileInfoJson, UploadResponseInfo.class); + if (CollectionUtils.isNotEmpty(fileInfoList)) { + for (UploadResponseInfo fileInfo : fileInfoList) { + if (StringUtils.equals(filename, fileInfo.getFilename())) { + return true; + } + } + } + return false; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UpDownloaderFactory.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UpDownloaderFactory.java new file mode 100644 index 00000000..95228135 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UpDownloaderFactory.java @@ -0,0 +1,49 @@ +package com.orangeforms.common.core.upload; + +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * 业务对象根据上传下载存储类型,获取上传下载对象的工厂类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Component +public class UpDownloaderFactory { + + private final Map upDownloaderMap = new HashMap<>(); + + /** + * 根据存储类型获取上传下载对象。 + * @param storeType 存储类型。 + * @return 匹配的上传下载对象。 + */ + public BaseUpDownloader get(UploadStoreTypeEnum storeType) { + BaseUpDownloader upDownloader = upDownloaderMap.get(storeType); + if (upDownloader == null) { + throw new UnsupportedOperationException( + "The storeType [" + storeType.name() + "] isn't supported, please add dependency jar first."); + } + return upDownloader; + } + + /** + * 注册上传下载对象到工厂。 + * + * @param storeType 存储类型。 + * @param upDownloader 上传下载对象。 + */ + public void registerUpDownloader(UploadStoreTypeEnum storeType, BaseUpDownloader upDownloader) { + if (storeType == null || upDownloader == null) { + throw new IllegalArgumentException("The Argument can't be NULL."); + } + if (upDownloaderMap.containsKey(storeType)) { + throw new UnsupportedOperationException( + "The storeType [" + storeType.name() + "] has been registered already."); + } + upDownloaderMap.put(storeType, upDownloader); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadResponseInfo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadResponseInfo.java new file mode 100644 index 00000000..8dfa996e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadResponseInfo.java @@ -0,0 +1,29 @@ +package com.orangeforms.common.core.upload; + +import lombok.Data; + +/** + * 数据上传操作的应答信息对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class UploadResponseInfo { + /** + * 上传是否出现错误。 + */ + private Boolean uploadFailed = false; + /** + * 具体错误信息。 + */ + private String errorMessage; + /** + * 返回前端的下载url。 + */ + private String downloadUri; + /** + * 返回给前端的文件名。 + */ + private String filename; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadStoreInfo.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadStoreInfo.java new file mode 100644 index 00000000..54d33892 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadStoreInfo.java @@ -0,0 +1,22 @@ +package com.orangeforms.common.core.upload; + +import lombok.Data; + +/** + * 上传数据存储信息对象。这里之所以使用对象,主要是便于今后扩展。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class UploadStoreInfo { + + /** + * 是否支持上传。 + */ + private boolean supportUpload; + /** + * 上传数据存储类型。 + */ + private UploadStoreTypeEnum storeType; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadStoreTypeEnum.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadStoreTypeEnum.java new file mode 100644 index 00000000..cae4cb24 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/upload/UploadStoreTypeEnum.java @@ -0,0 +1,19 @@ +package com.orangeforms.common.core.upload; + +/** + * 上传数据存储介质类型枚举。 + * + * @author Jerry + * @date 2020-08-08 + */ +public enum UploadStoreTypeEnum { + + /** + * 本地系统。 + */ + LOCAL_SYSTEM, + /** + * minio分布式存储。 + */ + MINIO_SYSTEM +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/AopTargetUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/AopTargetUtil.java new file mode 100644 index 00000000..ab4b577a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/AopTargetUtil.java @@ -0,0 +1,64 @@ +package com.orangeforms.common.core.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.framework.AdvisedSupport; +import org.springframework.aop.framework.AopProxy; +import org.springframework.aop.support.AopUtils; + +import java.lang.reflect.Field; + +/** + * 获取JDK动态代理/CGLIB代理对象代理的目标对象的工具类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class AopTargetUtil { + + /** + * 获取参数对象代理的目标对象。 + * + * @param proxy 代理对象 + * @return 代理的目标对象。 + */ + public static Object getTarget(Object proxy) { + if (!AopUtils.isAopProxy(proxy)) { + return proxy; + } + try { + if (AopUtils.isJdkDynamicProxy(proxy)) { + return getJdkDynamicProxyTargetObject(proxy); + } else { + return getCglibProxyTargetObject(proxy); + } + } catch (Exception e) { + log.error("Failed to call getJdkDynamicProxyTargetObject or getCglibProxyTargetObject", e); + return null; + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AopTargetUtil() { + } + + private static Object getCglibProxyTargetObject(Object proxy) throws Exception { + Field h = proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0"); + h.setAccessible(true); + Object dynamicAdvisedInterceptor = h.get(proxy); + Field advised = dynamicAdvisedInterceptor.getClass().getDeclaredField("advised"); + advised.setAccessible(true); + return ((AdvisedSupport) advised.get(dynamicAdvisedInterceptor)).getTargetSource().getTarget(); + } + + private static Object getJdkDynamicProxyTargetObject(Object proxy) throws Exception { + Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); + h.setAccessible(true); + AopProxy aopProxy = (AopProxy) h.get(proxy); + Field advised = aopProxy.getClass().getDeclaredField("advised"); + advised.setAccessible(true); + return ((AdvisedSupport) advised.get(aopProxy)).getTargetSource().getTarget(); + } +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ApplicationContextHolder.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ApplicationContextHolder.java new file mode 100644 index 00000000..979bd598 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ApplicationContextHolder.java @@ -0,0 +1,90 @@ +package com.orangeforms.common.core.util; + +import com.orangeforms.common.core.exception.MyRuntimeException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.Map; + +/** + * Spring 系统启动应用感知对象,主要用于获取Spring Bean的上下文对象,后续的代码中可以直接查找系统中加载的Bean对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Component +public class ApplicationContextHolder implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + /** + * Spring 启动的过程中会自动调用,并将应用上下文对象赋值进来。 + * + * @param applicationContext 应用上下文对象,可通过该对象查找Spring中已经加载的Bean。 + */ + @Override + public void setApplicationContext(@NonNull ApplicationContext applicationContext) { + doSetApplicationContext(applicationContext); + } + + /** + * 获取应用上下文对象。 + * + * @return 应用上下文。 + */ + public static ApplicationContext getApplicationContext() { + assertApplicationContext(); + return applicationContext; + } + + /** + * 根据BeanName,获取Bean对象。 + * + * @param beanName Bean名称。 + * @param 返回的Bean类型。 + * @return Bean对象。 + */ + @SuppressWarnings("unchecked") + public static T getBean(String beanName) { + assertApplicationContext(); + return (T) applicationContext.getBean(beanName); + } + + /** + * 根据Bean的ClassType,获取Bean对象。 + * + * @param beanType Bean的Class类型。 + * @param 返回的Bean类型。 + * @return Bean对象。 + */ + public static T getBean(Class beanType) { + assertApplicationContext(); + return applicationContext.getBean(beanType); + } + + /** + * 根据Bean的ClassType,获取Bean对象列表。 + * + * @param beanType Bean的Class类型。 + * @param 返回的Bean类型。 + * @return Bean对象列表。 + */ + public static Collection getBeanListOfType(Class beanType) { + assertApplicationContext(); + Map beanMap = applicationContext.getBeansOfType(beanType); + return beanMap == null ? null : beanMap.values(); + } + + private static void assertApplicationContext() { + if (ApplicationContextHolder.applicationContext == null) { + throw new MyRuntimeException("applicaitonContext属性为null,请检查是否注入了ApplicationContextHolder!"); + } + } + + private static void doSetApplicationContext(ApplicationContext applicationContext) { + ApplicationContextHolder.applicationContext = applicationContext; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ContextUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ContextUtil.java new file mode 100644 index 00000000..3a35eca6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ContextUtil.java @@ -0,0 +1,49 @@ +package com.orangeforms.common.core.util; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 获取Servlet HttpRequest和HttpResponse的工具类。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class ContextUtil { + + /** + * 判断当前是否处于HttpServletRequest上下文环境。 + * + * @return 是返回true,否则false。 + */ + public static boolean hasRequestContext() { + return RequestContextHolder.getRequestAttributes() != null; + } + + /** + * 获取Servlet请求上下文的HttpRequest对象。 + * + * @return 请求上下文中的HttpRequest对象。 + */ + public static HttpServletRequest getHttpRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + /** + * 获取Servlet请求上下文的HttpResponse对象。 + * + * @return 请求上下文中的HttpResponse对象。 + */ + public static HttpServletResponse getHttpResponse() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ContextUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/DataSourceResolver.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/DataSourceResolver.java new file mode 100644 index 00000000..e832b65c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/DataSourceResolver.java @@ -0,0 +1,19 @@ +package com.orangeforms.common.core.util; + +/** + * 基于自定义解析规则的多数据源解析接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface DataSourceResolver { + + /** + * 动态解析方法。实现类可以根据当前的请求,或者上下文环境进行动态解析。 + * + * @param arg 可选的入参。MyDataSourceResolver注解中的arg参数。 + * @param methodArgs 被织入方法的所有参数。 + * @return 返回用于多数据源切换的类型值。DataSourceResolveAspect 切面方法会根据该返回值和配置信息,进行多数据源切换。 + */ + int resolve(String arg, Object[] methodArgs); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ExportUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ExportUtil.java new file mode 100644 index 00000000..4a7f4a26 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/ExportUtil.java @@ -0,0 +1,95 @@ +package com.orangeforms.common.core.util; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import cn.jimmyshi.beanquery.BeanQuery; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.exception.MyRuntimeException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; +import org.apache.commons.io.FilenameUtils; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * 导出工具类,目前支持xlsx和csv两种类型。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class ExportUtil { + + /** + * 数据导出。目前仅支持xlsx和csv。 + * + * @param dataList 导出数据列表。 + * @param selectFieldMap 导出的数据字段,key为对象字段名称,value为中文标题名称。 + * @param filename 导出文件名。 + * @param 数据对象类型。 + * @throws IOException 文件操作失败。 + */ + public static void doExport( + Collection dataList, Map selectFieldMap, String filename) throws IOException { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + StringBuilder sb = new StringBuilder(128); + for (Map.Entry e : selectFieldMap.entrySet()) { + sb.append(e.getKey()).append(" as ").append(e.getValue()).append(", "); + } + // 去掉末尾的逗号 + String selectFieldString = sb.substring(0, sb.length() - 2); + // 写出数据到xcel格式的输出流 + List> resultList = BeanQuery.select(selectFieldString).executeFrom(dataList); + // 构建HTTP输出流参数 + HttpServletResponse response = ContextUtil.getHttpResponse(); + response.setHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + filename); + if (ApplicationConstant.XLSX_EXT.equals(FilenameUtils.getExtension(filename))) { + ServletOutputStream out = response.getOutputStream(); + ExcelWriter writer = ExcelUtil.getWriter(true); + writer.setRowHeight(-1, 30); + writer.setColumnWidth(-1, 30); + writer.setColumnWidth(1, 20); + writer.write(resultList); + writer.flush(out); + writer.close(); + IoUtil.close(out); + } else if (ApplicationConstant.CSV_EXT.equals(FilenameUtils.getExtension(filename))) { + Collection headerList = selectFieldMap.values(); + String[] headerArray = new String[headerList.size()]; + headerList.toArray(headerArray); + CSVFormat format = CSVFormat.DEFAULT.withHeader(headerArray); + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); + try (Writer out = response.getWriter(); CSVPrinter printer = new CSVPrinter(out, format)) { + for (Map o : resultList) { + for (Map.Entry entry : o.entrySet()) { + printer.print(entry.getValue()); + } + printer.println(); + } + printer.flush(); + } catch (Exception e) { + log.error("Failed to call ExportUtil.doExport", e); + } + } else { + throw new MyRuntimeException("不支持的导出文件类型!"); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ExportUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/IpUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/IpUtil.java new file mode 100644 index 00000000..f15bf98c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/IpUtil.java @@ -0,0 +1,142 @@ +package com.orangeforms.common.core.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.server.reactive.ServerHttpRequest; + +import javax.servlet.http.HttpServletRequest; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +/** + * Ip工具类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class IpUtil { + + private static final String UNKNOWN = "unknown"; + + /** + * 通过Servlet的HttpRequest对象获取Ip地址。 + * + * @param request HttpRequest对象。 + * @return 本次请求的Ip地址。 + */ + public static String getRemoteIpAddress(HttpServletRequest request) { + String ip = null; + // X-Forwarded-For:Squid 服务代理 + String ipAddresses = request.getHeader("X-Forwarded-For"); + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // Proxy-Client-IP:apache 服务代理 + ipAddresses = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + ipAddresses = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // WL-Proxy-Client-IP:weblogic 服务代理 + ipAddresses = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // HTTP_CLIENT_IP:有些代理服务器 + ipAddresses = request.getHeader("HTTP_CLIENT_IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // X-Real-IP:nginx服务代理 + ipAddresses = request.getHeader("X-Real-IP"); + } + // 有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP + if (StringUtils.isNotBlank(ipAddresses)) { + ip = ipAddresses.split(",")[0]; + } + // 还是不能获取到,最后再通过request.getRemoteAddr();获取 + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + /** + * 通过Reactive的ServerHttpRequest对象获取Ip地址。 + * + * @param request ServerHttpRequest对象。 + * @return 本次请求的Ip地址。 + */ + public static String getRemoteIpAddress(ServerHttpRequest request) { + String ip = null; + // X-Forwarded-For:Squid 服务代理 + String ipAddresses = request.getHeaders().getFirst("X-Forwarded-For"); + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // Proxy-Client-IP:apache 服务代理 + ipAddresses = request.getHeaders().getFirst("Proxy-Client-IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // WL-Proxy-Client-IP:weblogic 服务代理 + ipAddresses = request.getHeaders().getFirst("WL-Proxy-Client-IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // HTTP_CLIENT_IP:有些代理服务器 + ipAddresses = request.getHeaders().getFirst("HTTP_CLIENT_IP"); + } + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + // X-Real-IP:nginx服务代理 + ipAddresses = request.getHeaders().getFirst("X-Real-IP"); + } + // 有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP + if (StringUtils.isNotBlank(ipAddresses)) { + ip = ipAddresses.split(",")[0]; + } + // 还是不能获取到,最后再通过request.getRemoteAddr();获取 + if (StringUtils.isBlank(ipAddresses) || UNKNOWN.equalsIgnoreCase(ipAddresses)) { + ip = request.getRemoteAddress().getAddress().getHostAddress(); + } + return ip; + } + + public static String getFirstLocalIpAddress() { + String ip; + try { + List ipList = getHostAddress(); + // default the first + ip = (!ipList.isEmpty()) ? ipList.get(0) : ""; + } catch (Exception ex) { + ip = ""; + log.error("Failed to call ", ex); + } + return ip; + } + + private static List getHostAddress() throws SocketException { + List ipList = new ArrayList<>(5); + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface ni = interfaces.nextElement(); + Enumeration allAddress = ni.getInetAddresses(); + while (allAddress.hasMoreElements()) { + InetAddress address = allAddress.nextElement(); + // skip the IPv6 addr + // skip the IPv6 addr + if (address.isLoopbackAddress() || address instanceof Inet6Address) { + continue; + } + String hostAddress = address.getHostAddress(); + ipList.add(hostAddress); + } + } + return ipList; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private IpUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/JwtUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/JwtUtil.java new file mode 100644 index 00000000..6b542ada --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/JwtUtil.java @@ -0,0 +1,110 @@ +package com.orangeforms.common.core.util; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; +import java.util.Map; + +/** + * 基于JWT的Token生成工具类 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class JwtUtil { + + private static final String TOKEN_PREFIX = "Bearer "; + private static final String CLAIM_KEY_CREATEDTIME = "CreatedTime"; + + /** + * Token缺省过期时间是30分钟 + */ + private static final Long TOKEN_EXPIRATION = 1800000L; + /** + * 缺省情况下,Token会每5分钟被刷新一次 + */ + private static final Long REFRESH_TOKEN_INTERVAL = 300000L; + + /** + * 生成加密后的JWT令牌,生成的结果中包含令牌前缀,如"Bearer " + * + * @param claims 令牌中携带的数据 + * @param expirationMillisecond 过期的毫秒数 + * @return 生成后的令牌信息 + */ + public static String generateToken(Map claims, long expirationMillisecond, String signingKey) { + // 自动添加token的创建时间 + long createTime = System.currentTimeMillis(); + claims.put(CLAIM_KEY_CREATEDTIME, createTime); + String token = Jwts.builder() + .setClaims(claims) + .setExpiration(new Date(createTime + expirationMillisecond)) + .signWith(SignatureAlgorithm.HS512, signingKey) + .compact(); + return TOKEN_PREFIX + token; + } + + /** + * 生成加密后的JWT令牌,生成的结果中包含令牌前缀,如"Bearer " + * + * @param claims 令牌中携带的数据 + * @return 生成后的令牌信息 + */ + public static String generateToken(Map claims, String signingKey) { + return generateToken(claims, TOKEN_EXPIRATION, signingKey); + } + + /** + * 获取token中的数据对象 + * + * @param token 令牌信息(需要包含令牌前缀,如"Bearer ") + * @return 令牌中的数据对象,解析视频返回null。 + */ + public static Claims parseToken(String token, String signingKey) { + if (token == null || !token.startsWith(TOKEN_PREFIX)) { + return null; + } + String tokenKey = token.substring(TOKEN_PREFIX.length()); + Claims claims = null; + try { + claims = Jwts.parser().setSigningKey(signingKey).parseClaimsJws(tokenKey).getBody(); + } catch (Exception e) { + log.error("Token Expired", e); + } + return claims; + } + + /** + * 判断令牌是否过期 + * + * @param claims 令牌解密后的Map对象。 + * @return true 过期,否则false。 + */ + public static boolean isNullOrExpired(Claims claims) { + return claims == null || claims.getExpiration().before(new Date()); + } + + /** + * 判断解密后的Token payload是否需要被强制刷新,如果需要,则调用generateToken方法重新生成Token。 + * + * @param claims Token解密后payload数据 + * @return true 需要刷新,否则false + */ + public static boolean needToRefresh(Claims claims) { + if (claims == null) { + return false; + } + Long createTime = (Long) claims.get(CLAIM_KEY_CREATEDTIME); + return createTime == null || System.currentTimeMillis() - createTime > REFRESH_TOKEN_INTERVAL; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private JwtUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/LogMessageUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/LogMessageUtil.java new file mode 100644 index 00000000..4e124a7e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/LogMessageUtil.java @@ -0,0 +1,33 @@ +package com.orangeforms.common.core.util; + +/** + * 拼接日志消息的工具类。 + * 主要目标是,尽量保证日志输出的统一性,同时也可以有效减少与日志信息相关的常量字符串, + * 提高代码的规范度和可维护性。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class LogMessageUtil { + + /** + * RPC调用错误格式。 + */ + private static final String RPC_ERROR_MSG_FORMAT = "RPC Failed with Error message [%s]"; + + /** + * 组装RPC调用的错误信息。 + * + * @param errorMsg 具体的错误信息。 + * @return 格式化后的错误信息。 + */ + public static String makeRpcError(String errorMsg) { + return String.format(RPC_ERROR_MSG_FORMAT, errorMsg); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private LogMessageUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyCommonUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyCommonUtil.java new file mode 100644 index 00000000..dda30f70 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyCommonUtil.java @@ -0,0 +1,313 @@ +package com.orangeforms.common.core.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.constant.AppDeviceType; +import com.orangeforms.common.core.validator.AddGroup; +import com.orangeforms.common.core.validator.UpdateGroup; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.groups.Default; +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 脚手架中常用的基本工具方法集合,一般而言工程内部使用的方法。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class MyCommonUtil { + + private static final Validator VALIDATOR; + + static { + VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator(); + } + + /** + * 创建uuid。 + * + * @return 返回uuid。 + */ + public static String generateUuid() { + return UUID.randomUUID().toString().replace("-", ""); + } + + /** + * 对用户密码进行加盐后加密。 + * + * @param password 明文密码。 + * @param passwordSalt 盐值。 + * @return 加密后的密码。 + */ + public static String encrptedPassword(String password, String passwordSalt) { + return DigestUtil.md5Hex(password + passwordSalt); + } + + /** + * 这个方法一般用于Controller对于入口参数的基本验证。 + * 对于字符串,如果为空字符串,也将视为Blank,同时返回true。 + * + * @param objs 一组参数。 + * @return 返回是否存在null或空字符串的参数。 + */ + public static boolean existBlankArgument(Object...objs) { + for (Object obj : objs) { + if (MyCommonUtil.isBlankOrNull(obj)) { + return true; + } + } + return false; + } + + /** + * 结果和 existBlankArgument 相反。 + * + * @param objs 一组参数。 + * @return 返回是否存在null或空字符串的参数。 + */ + public static boolean existNotBlankArgument(Object...objs) { + for (Object obj : objs) { + if (!MyCommonUtil.isBlankOrNull(obj)) { + return true; + } + } + return false; + } + + /** + * 验证参数是否为空。 + * + * @param obj 待判断的参数。 + * @return 空或者null返回true,否则false。 + */ + public static boolean isBlankOrNull(Object obj) { + if (obj instanceof Collection) { + return CollUtil.isEmpty((Collection) obj); + } + return obj == null || (obj instanceof CharSequence && StrUtil.isBlank((CharSequence) obj)); + } + + /** + * 验证参数是否为非空。 + * + * @param obj 待判断的参数。 + * @return 空或者null返回false,否则true。 + */ + public static boolean isNotBlankOrNull(Object obj) { + return !isBlankOrNull(obj); + } + + /** + * 判断模型对象是否通过校验,没有通过返回具体的校验错误信息。 + * + * @param model 带校验的model。 + * @param groups Validate绑定的校验组。 + * @return 没有错误返回null,否则返回具体的错误信息。 + */ + public static String getModelValidationError(T model, Class...groups) { + if (model != null) { + Set> constraintViolations = VALIDATOR.validate(model, groups); + if (!constraintViolations.isEmpty()) { + Iterator> it = constraintViolations.iterator(); + ConstraintViolation constraint = it.next(); + return constraint.getMessage(); + } + } + return null; + } + + /** + * 判断模型对象是否通过校验,没有通过返回具体的校验错误信息。 + * + * @param model 带校验的model。 + * @param forUpdate 是否为更新。 + * @return 没有错误返回null,否则返回具体的错误信息。 + */ + public static String getModelValidationError(T model, boolean forUpdate) { + if (model != null) { + Set> constraintViolations; + if (forUpdate) { + constraintViolations = VALIDATOR.validate(model, Default.class, UpdateGroup.class); + } else { + constraintViolations = VALIDATOR.validate(model, Default.class, AddGroup.class); + } + if (!constraintViolations.isEmpty()) { + Iterator> it = constraintViolations.iterator(); + ConstraintViolation constraint = it.next(); + return constraint.getMessage(); + } + } + return null; + } + + /** + * 判断模型对象是否通过校验,没有通过返回具体的校验错误信息。 + * + * @param modelList 带校验的model列表。 + * @param groups Validate绑定的校验组。 + * @return 没有错误返回null,否则返回具体的错误信息。 + */ + public static String getModelValidationError(List modelList, Class... groups) { + if (CollUtil.isNotEmpty(modelList)) { + for (T model : modelList) { + String errorMessage = getModelValidationError(model, groups); + if (StrUtil.isNotBlank(errorMessage)) { + return errorMessage; + } + } + } + return null; + } + + /** + * 判断模型对象是否通过校验,没有通过返回具体的校验错误信息。 + * + * @param modelList 带校验的model列表。 + * @param forUpdate 是否为更新。 + * @return 没有错误返回null,否则返回具体的错误信息。 + */ + public static String getModelValidationError(List modelList, boolean forUpdate) { + if (CollUtil.isNotEmpty(modelList)) { + for (T model : modelList) { + String errorMessage = getModelValidationError(model, forUpdate); + if (StrUtil.isNotBlank(errorMessage)) { + return errorMessage; + } + } + } + return null; + } + + /** + * 拼接参数中的字符串列表,用指定分隔符进行分割,同时每个字符串对象用单引号括起来。 + * + * @param dataList 字符串集合。 + * @param separator 分隔符。 + * @return 拼接后的字符串。 + */ + public static String joinString(Collection dataList, final char separator) { + int index = 0; + StringBuilder sb = new StringBuilder(128); + for (String data : dataList) { + sb.append("'").append(data).append("'"); + if (index++ != dataList.size() - 1) { + sb.append(separator); + } + } + return sb.toString(); + } + + /** + * 将SQL Like中的通配符替换为字符本身的含义,以便于比较。 + * + * @param str 待替换的字符串。 + * @return 替换后的字符串。 + */ + public static String replaceSqlWildcard(String str) { + if (StrUtil.isBlank(str)) { + return str; + } + return StrUtil.replaceChars(StrUtil.replaceChars(str, "_", "\\_"), "%", "\\%"); + } + + /** + * 获取对象中,非空字段的名字列表。 + * + * @param object 数据对象。 + * @param clazz 数据对象的class类型。 + * @param 数据对象类型。 + * @return 数据对象中,值不为NULL的字段数组。 + */ + public static String[] getNotNullFieldNames(T object, Class clazz) { + Field[] fields = ReflectUtil.getFields(clazz); + List fieldNameList = Arrays.stream(fields) + .filter(f -> ReflectUtil.getFieldValue(object, f) != null) + .map(Field::getName).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(fieldNameList)) { + return fieldNameList.toArray(new String[]{}); + } + return new String[]{}; + } + + /** + * 在调用分布式事务产生错误时,通过该方法可构建一对多关联插入错误的字符串。 + * + * @param clazz 服务实现类的Class。 + * @param errorMessage 错误信息。 + * @param mainData 主数据。 + * @param relationData 一对多关联数据列表。 + * @param 主数据类型。 + * @param 一对多关联对象类型。 + * @return 拼接后的错误信息。 + */ + public static String makeAddRelationGlobalTransError( + Class clazz, String errorMessage, M mainData, List relationData) { + return String.format("Failed to remote call {%s} cascadeAddRelationList for error {%s} with main data {%s} and OneToMany relation data {%s}", + clazz.getSimpleName(), errorMessage, JSON.toJSONString(mainData), JSON.toJSONString(relationData)); + } + + /** + * 在调用分布式事务产生错误时,通过该方法可构建一对一关联插入错误的字符串。 + * + * @param clazz 服务实现类的Class。 + * @param errorMessage 错误信息。 + * @param mainData 主数据。 + * @param relationData 一对一关联数据列表。 + * @param 主数据类型。 + * @param 一对一关联对象类型。 + * @return 拼接后的错误信息。 + */ + public static String makeAddRelationGlobalTransError( + Class clazz, String errorMessage, M mainData, R relationData) { + return String.format("Failed to remote call {%s} cascadeAddRelation for error {%s} with main data {%s} and OneToOne relation data {%s}", + clazz.getSimpleName(), errorMessage, JSON.toJSONString(mainData), JSON.toJSONString(relationData)); + } + + /** + * 在调用分布式事务产生错误时,通过该方法可构建删除关联数据错误的字符串。 + * + * @param clazz 服务实现类的Class。 + * @param remoteClazz 远程客户端的Class。 + * @param errorMessage 错误信息。 + * @param id 主表主键值。 + * @param 主表主键类型。 + * @return 拼接后的错误信息。 + */ + public static String makeDeleteRelationGlobalTransError( + Class clazz, Class remoteClazz, String errorMessage, K id) { + return String.format("Failed to remote call {%s} cascadeDeleteRelation for error {%s} with remote client {%s} and id {%s}", + clazz.getSimpleName(), remoteClazz.getSimpleName(), errorMessage, id.toString()); + } + + /** + * 获取请求头中的设备信息。 + * + * @return 设备类型,具体值可参考AppDeviceType常量类。 + */ + public static int getDeviceType() { + // 缺省都按照Web登录方式设置,如果前端header中的值为不合法值,这里也不会报错,而是使用Web缺省方式。 + int deviceType = AppDeviceType.WEB; + String deviceTypeString = ContextUtil.getHttpRequest().getHeader("deviceType"); + if (StrUtil.isNotBlank(deviceTypeString)) { + Integer type = Integer.valueOf(deviceTypeString); + if (AppDeviceType.isValid(type)) { + deviceType = type; + } + } + return deviceType; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyCommonUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyDateUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyDateUtil.java new file mode 100644 index 00000000..f519a6a4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyDateUtil.java @@ -0,0 +1,181 @@ +package com.orangeforms.common.core.util; + +import com.orangeforms.common.core.object.Tuple2; +import org.apache.commons.lang3.time.DateUtils; +import org.joda.time.DateTime; +import org.joda.time.Period; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.util.Calendar; +import java.util.Date; + +import static org.joda.time.PeriodType.days; + +/** + * 日期工具类,主要封装了部分joda-time中的方法,让很多代码一行完成,同时统一了日期到字符串的pattern格式。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class MyDateUtil { + + /** + * 统一的日期pattern,今后可以根据自己的需求去修改。 + */ + public static final String COMMON_DATE_FORMAT = "yyyy-MM-dd"; + /** + * 统一的日期时间pattern,今后可以根据自己的需求去修改。 + */ + public static final String COMMON_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; + /** + * 缺省日期格式化器,提前获取提升运行时效率。 + */ + private static final DateTimeFormatter DATE_PARSE_FORMATTER = + DateTimeFormat.forPattern(MyDateUtil.COMMON_DATE_FORMAT); + /** + * 缺省日期时间格式化器,提前获取提升运行时效率。 + */ + private static final DateTimeFormatter DATETIME_PARSE_FORMATTER = + DateTimeFormat.forPattern(MyDateUtil.COMMON_DATETIME_FORMAT); + + /** + * 获取一天的开始时间的字符串格式,如2019-08-03 00:00:00.000。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 格式化后的字符串。 + */ + public static String getBeginTimeOfDay(DateTime dateTime) { + return dateTime.withTimeAtStartOfDay().toString(COMMON_DATETIME_FORMAT); + } + + /** + * 获取一天的结束时间的字符串格式,如2019-08-03 23:59:59.999。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 格式化后的字符串。 + */ + public static String getEndTimeOfDay(DateTime dateTime) { + return dateTime.withTime(23, 59, 59, 999).toString(COMMON_DATETIME_FORMAT); + } + + /** + * 获取一天中的开始时间和结束时间的字符串格式,如2019-08-03 00:00:00.000 和 2019-08-03 23:59:59.999。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 包含格式后字符串的二元组对象。 + */ + public static Tuple2 getDateTimeRangeOfDay(DateTime dateTime) { + return new Tuple2<>(getBeginTimeOfDay(dateTime), getEndTimeOfDay(dateTime)); + } + + /** + * 获取本月第一天的日期格式。如2019-08-01。 + * + * @param dateTime 待格式化的日期对象。 + * @return 格式化后的字符串。 + */ + public static String getBeginDateOfMonth(DateTime dateTime) { + return dateTime.withDayOfMonth(1).toString(COMMON_DATE_FORMAT); + } + + /** + * 获取本月第一天的日期格式。如2019-08-01。 + * + * @param dateString 待格式化的日期字符串对象。 + * @return 格式化后的字符串。 + */ + public static String getBeginDateOfMonth(String dateString) { + DateTime dateTime = toDate(dateString); + return dateTime.withDayOfMonth(1).toString(COMMON_DATE_FORMAT); + } + + /** + * 计算指定日期距离今天相差的天数。 + * + * @param dateTime 待格式化的日期时间对象。 + * @return 相差天数。 + */ + public static int getDayDiffToNow(DateTime dateTime) { + return new Period(dateTime, new DateTime(), days()).getDays(); + } + + /** + * 将日期对象格式化为缺省的字符串格式。 + * + * @param dateTime 待格式化的日期对象。 + * @return 格式化后的字符串。 + */ + public static String toDateString(DateTime dateTime) { + return dateTime.toString(COMMON_DATE_FORMAT); + } + + /** + * 将日期时间对象格式化为缺省的字符串格式。 + * + * @param dateTime 待格式化的日期对象。 + * @return 格式化后的字符串。 + */ + public static String toDateTimeString(DateTime dateTime) { + return dateTime.toString(COMMON_DATETIME_FORMAT); + } + + /** + * 将缺省格式的日期字符串解析为日期对象。 + * + * @param dateString 待解析的字符串。 + * @return 解析后的日期对象。 + */ + public static DateTime toDate(String dateString) { + return DATE_PARSE_FORMATTER.parseDateTime(dateString); + } + + /** + * 将缺省格式的日期字符串解析为日期对象。 + * + * @param dateTimeString 待解析的字符串。 + * @return 解析后的日期对象。 + */ + public static DateTime toDateTime(String dateTimeString) { + return DATETIME_PARSE_FORMATTER.parseDateTime(dateTimeString); + } + + /** + * 截取时间到天。如2019-10-03 01:20:30 转换为 2019-10-03 00:00:00。 + * 由于没有字符串的中间转换,因此效率更高。 + * + * @param date 待截取日期对象。 + * @return 转换后日期对象。 + */ + public static Date truncateToDay(Date date) { + return DateUtils.truncate(date, Calendar.DAY_OF_MONTH); + } + + /** + * 截取时间到月。如2019-10-03 01:20:30 转换为 2019-10-01 00:00:00。 + * 由于没有字符串的中间转换,因此效率更高。 + * + * @param date 待截取日期对象。 + * @return 转换后日期对象。 + */ + public static Date truncateToMonth(Date date) { + return DateUtils.truncate(date, Calendar.MONTH); + } + + /** + * 截取时间到年。如2019-10-03 01:20:30 转换为 2019-01-01 00:00:00。 + * 由于没有字符串的中间转换,因此效率更高。 + * + * @param date 待截取日期对象。 + * @return 转换后日期对象。 + */ + public static Date truncateToYear(Date date) { + return DateUtils.truncate(date, Calendar.YEAR); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyDateUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyModelUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyModelUtil.java new file mode 100644 index 00000000..9d6b3c93 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyModelUtil.java @@ -0,0 +1,729 @@ +package com.orangeforms.common.core.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ReflectUtil; +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.exception.InvalidDataFieldException; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.exception.MyRuntimeException; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.object.Tuple2; +import com.orangeforms.common.core.upload.UploadStoreInfo; +import com.google.common.base.CaseFormat; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 负责Model数据操作、类型转换和关系关联等行为的工具类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class MyModelUtil { + + /** + * 数值型字段。 + */ + public static final Integer NUMERIC_FIELD_TYPE = 0; + /** + * 字符型字段。 + */ + public static final Integer STRING_FIELD_TYPE = 1; + /** + * 日期型字段。 + */ + public static final Integer DATE_FIELD_TYPE = 2; + /** + * 整个工程的实体对象中,创建者Id字段的Java对象名。 + */ + public static final String CREATE_USER_ID_FIELD_NAME = "createUserId"; + /** + * 整个工程的实体对象中,创建时间字段的Java对象名。 + */ + public static final String CREATE_TIME_FIELD_NAME = "createTime"; + /** + * 整个工程的实体对象中,更新者Id字段的Java对象名。 + */ + public static final String UPDATE_USER_ID_FIELD_NAME = "updateUserId"; + /** + * 整个工程的实体对象中,更新时间字段的Java对象名。 + */ + public static final String UPDATE_TIME_FIELD_NAME = "updateTime"; + /** + * mapToColumnName和mapToColumnInfo使用的缓存。 + */ + private static final Map> CACHED_COLUMNINFO_MAP = new ConcurrentHashMap<>(); + + /** + * 将bean的数据列表转换为Map列表。 + * + * @param dataList bean数据列表。 + * @param bean对象类型。 + * @return 转换后的Map列表。 + */ + public static List> beanToMapList(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return null; + } + List> resultList = new LinkedList<>(); + for (T data : dataList) { + resultList.add(BeanUtil.beanToMap(data)); + } + return resultList; + } + + /** + * 拷贝源类型的集合数据到目标类型的集合中,其中源类型和目标类型中的对象字段类型完全相同。 + * NOTE: 该函数主要应用于框架中,Dto和Model之间的copy,特别针对一对一关联的深度copy。 + * 在Dto中,一对一对象可以使用Map来表示,而不需要使用从表对象的Dto。 + * + * @param sourceCollection 源类型集合。 + * @param targetClazz 目标类型的Class对象。 + * @param 源类型。 + * @param 目标类型。 + * @return copy后的目标类型对象集合。 + */ + public static List copyCollectionTo(Collection sourceCollection, Class targetClazz) { + if (sourceCollection == null) { + return null; + } + List targetList = new LinkedList<>(); + if (CollectionUtils.isNotEmpty(sourceCollection)) { + for (S source : sourceCollection) { + try { + T target = targetClazz.newInstance(); + BeanUtil.copyProperties(source, target); + targetList.add(target); + } catch (Exception e) { + log.error("Failed to call MyModelUtil.copyCollectionTo", e); + return Collections.emptyList(); + } + } + } + return targetList; + } + + /** + * 拷贝源类型的对象数据到目标类型的对象中,其中源类型和目标类型中的对象字段类型完全相同。 + * NOTE: 该函数主要应用于框架中,Dto和Model之间的copy,特别针对一对一关联的深度copy。 + * 在Dto中,一对一对象可以使用Map来表示,而不需要使用从表对象的Dto。 + * + * @param source 源类型对象。 + * @param targetClazz 目标类型的Class对象。 + * @param 源类型。 + * @param 目标类型。 + * @return copy后的目标类型对象。 + */ + public static T copyTo(S source, Class targetClazz) { + if (source == null) { + return null; + } + try { + T target = targetClazz.newInstance(); + BeanUtil.copyProperties(source, target); + return target; + } catch (Exception e) { + log.error("Failed to call MyModelUtil.copyTo", e); + return null; + } + } + + /** + * 映射Model对象的字段反射对象,获取与该字段对应的数据库列名称。 + * + * @param field 字段反射对象。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String mapToColumnName(Field field, Class modelClazz) { + return mapToColumnName(field.getName(), modelClazz); + } + + /** + * 映射Model对象的字段名称,获取与该字段对应的数据库列名称。 + * + * @param fieldName 字段名称。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String mapToColumnName(String fieldName, Class modelClazz) { + Tuple2 columnInfo = mapToColumnInfo(fieldName, modelClazz); + return columnInfo == null ? null : columnInfo.getFirst(); + } + + /** + * 映射Model对象的字段反射对象,获取与该字段对应的数据库列名称。 + * 如果没有匹配到ColumnName,则立刻抛出异常。 + * + * @param field 字段反射对象。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String safeMapToColumnName(Field field, Class modelClazz) { + return safeMapToColumnName(field.getName(), modelClazz); + } + + /** + * 映射Model对象的字段名称,获取与该字段对应的数据库列名称。 + * 如果没有匹配到ColumnName,则立刻抛出异常。 + * + * @param fieldName 字段名称。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称。 + */ + public static String safeMapToColumnName(String fieldName, Class modelClazz) { + String columnName = mapToColumnName(fieldName, modelClazz); + if (columnName == null) { + throw new InvalidDataFieldException(modelClazz.getSimpleName(), fieldName); + } + return columnName; + } + + /** + * 映射Model对象的字段名称,获取与该字段对应的数据库列名称和字段类型。 + * + * @param fieldName 字段名称。 + * @param modelClazz Model对象的Class类。 + * @return 该字段所对应的数据表列名称和Java字段类型。 + */ + public static Tuple2 mapToColumnInfo(String fieldName, Class modelClazz) { + if (StringUtils.isBlank(fieldName)) { + return null; + } + StringBuilder sb = new StringBuilder(128); + sb.append(modelClazz.getName()).append("-#-").append(fieldName); + Tuple2 columnInfo = CACHED_COLUMNINFO_MAP.get(sb.toString()); + if (columnInfo == null) { + Field field = ReflectUtil.getField(modelClazz, fieldName); + if (field == null) { + return null; + } + TableField c = field.getAnnotation(TableField.class); + String columnName = null; + if (c == null) { + TableId id = field.getAnnotation(TableId.class); + if (id != null) { + columnName = id.value(); + } + } + if (columnName == null) { + columnName = c == null ? CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName) : c.value(); + if (StringUtils.isBlank(columnName)) { + columnName = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName); + } + } + // 这里缺省情况下都是按照整型去处理,因为他覆盖太多的类型了。 + // 如Integer/Long/Double/BigDecimal,可根据实际情况完善和扩充。 + String typeName = field.getType().getSimpleName(); + Integer type = NUMERIC_FIELD_TYPE; + if (String.class.getSimpleName().equals(typeName)) { + type = STRING_FIELD_TYPE; + } else if (Date.class.getSimpleName().equals(typeName)) { + type = DATE_FIELD_TYPE; + } + columnInfo = new Tuple2<>(columnName, type); + CACHED_COLUMNINFO_MAP.put(sb.toString(), columnInfo); + } + return columnInfo; + } + + /** + * 映射Model主对象的Class名称,到Model所对应的表名称。 + * + * @param modelClazz Model主对象的Class。 + * @return Model对象对应的数据表名称。 + */ + public static String mapToTableName(Class modelClazz) { + TableName t = modelClazz.getAnnotation(TableName.class); + return t == null ? null : t.value(); + } + + /** + * 根据参数中的数据列表和字段提取函数,封装stream api的方式返回指定字段的数据。 + * + * @param dataList 数据对象列表。 + * @param fieldGetterFunc 字段获取函数。 + * @param 数据对象类型。 + * @param 返回字段类型。 + * @return 指定字段Set集合。 + */ + public static Set retrieveFieldSet(Collection dataList, Function fieldGetterFunc) { + return dataList.stream().map(fieldGetterFunc).collect(Collectors.toSet()); + } + + /** + * 主Model类型中,遍历所有包含RelationConstDict注解的字段,并将关联的静态字典中的数据, + * 填充到thisModel对象的被注解字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModel 主对象。 + * @param 主表对象类型。 + */ + @SuppressWarnings("unchecked") + public static void makeConstDictRelation(Class thisClazz, T thisModel) { + if (thisModel == null) { + return; + } + Field[] fields = ReflectUtil.getFields(thisClazz); + for (Field field : fields) { + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, field.getName()); + RelationConstDict r = thisTargetField.getAnnotation(RelationConstDict.class); + if (r == null) { + continue; + } + Field dictMapField = ReflectUtil.getField(r.constantDictClass(), "DICT_MAP"); + Map dictMap = + (Map) ReflectUtil.getFieldValue(r.constantDictClass(), dictMapField); + Object id = ReflectUtil.getFieldValue(thisModel, r.masterIdField()); + if (id != null) { + String name = dictMap.get(id); + if (name != null) { + Map m = new HashMap<>(2); + m.put("id", id); + m.put("name", name); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + } + } + + /** + * 主Model类型中,遍历所有包含RelationConstDict注解的字段,并将关联的静态字典中的数据, + * 填充到thisModelList集合元素对象的被注解字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param 主表对象类型。 + */ + @SuppressWarnings("unchecked") + public static void makeConstDictRelation(Class thisClazz, List thisModelList) { + if (CollectionUtils.isEmpty(thisModelList)) { + return; + } + Field[] fields = ReflectUtil.getFields(thisClazz); + for (Field field : fields) { + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, field.getName()); + RelationConstDict r = thisTargetField.getAnnotation(RelationConstDict.class); + if (r == null) { + continue; + } + Field dictMapField = ReflectUtil.getField(r.constantDictClass(), "DICT_MAP"); + Map dictMap = + (Map) ReflectUtil.getFieldValue(r.constantDictClass(), dictMapField); + for (T thisModel : thisModelList) { + if (thisModel == null) { + continue; + } + Object id = ReflectUtil.getFieldValue(thisModel, r.masterIdField()); + if (id != null) { + String name = dictMap.get(id); + if (name != null) { + Map m = new HashMap<>(2); + m.put("id", id); + m.put("name", name); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + } + } + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationDict注解参数,将被关联对象thatModel中的数据, + * 关联到thisModel对象的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModel 主对象。 + * @param thatModel 字典关联对象。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeDictRelation( + Class thisClazz, T thisModel, R thatModel, String thisRelationField) { + if (thatModel == null || thisModel == null) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationDict r = thisTargetField.getAnnotation(RelationDict.class); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Field slaveNameField = ReflectUtil.getField(thatClass, r.slaveNameField()); + Map m = new HashMap<>(2); + m.put("id", ReflectUtil.getFieldValue(thatModel, slaveIdField)); + m.put("name", ReflectUtil.getFieldValue(thatModel, slaveNameField)); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationDict注解参数,将被关联对象集合thatModelList中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatModelList 字典关联对象列表集合。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeDictRelation( + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + if (CollectionUtils.isEmpty(thatModelList) + || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationDict r = thisTargetField.getAnnotation(RelationDict.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Field slaveNameField = ReflectUtil.getField(thatClass, r.slaveNameField()); + Map thatMap = new HashMap<>(20); + thatModelList.forEach(thatModel -> { + Object id = ReflectUtil.getFieldValue(thatModel, slaveIdField); + thatMap.put(id, thatModel); + }); + thisModelList.forEach(thisModel -> { + if (thisModel != null) { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMap.get(id); + if (thatModel != null) { + Map m = new HashMap<>(4); + m.put("id", id); + m.put("name", ReflectUtil.getFieldValue(thatModel, slaveNameField)); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + }); + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationDict注解参数,将被关联对象集合thatModelMap中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * 该函数之所以使用Map,主要出于性能优化考虑,在连续使用thatModelMap进行关联时,有效的避免了从多次从List转换到Map的过程。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatMadelMap 字典关联对象映射集合。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeDictRelation( + Class thisClazz, List thisModelList, Map thatMadelMap, String thisRelationField) { + if (MapUtils.isEmpty(thatMadelMap) + || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationDict r = thisTargetField.getAnnotation(RelationDict.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveNameField = ReflectUtil.getField(thatClass, r.slaveNameField()); + thisModelList.forEach(thisModel -> { + if (thisModel != null) { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMadelMap.get(id); + if (thatModel != null) { + Map m = new HashMap<>(4); + m.put("id", id); + m.put("name", ReflectUtil.getFieldValue(thatModel, slaveNameField)); + ReflectUtil.setFieldValue(thisModel, thisTargetField, m); + } + } + }); + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationOneToOne注解参数,将被关联对象列表thatModelList中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatModelList 一对一关联对象列表。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToOneRelation( + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + if (CollectionUtils.isEmpty(thatModelList) + || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationOneToOne r = thisTargetField.getAnnotation(RelationOneToOne.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Map thatMap = new HashMap<>(20); + thatModelList.forEach(thatModel -> { + Object id = ReflectUtil.getFieldValue(thatModel, slaveIdField); + thatMap.put(id, thatModel); + }); + // 判断放在循环的外部,提升一点儿效率。 + if (thisTargetField.getType().equals(Map.class)) { + thisModelList.forEach(thisModel -> { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMap.get(id); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, BeanUtil.beanToMap(thatModel)); + } + }); + } else { + thisModelList.forEach(thisModel -> { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + R thatModel = thatMap.get(id); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, thatModel); + } + }); + } + } + + /** + * 根据主对象和关联对象各自的关联Id函数,将主对象列表和关联对象列表中的数据关联到一起,并将关联对象 + * 设置到主对象的指定关联字段中。 + * NOTE: 用于主对象关联字段中,没有包含RelationOneToOne注解的场景。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thisIdGetterFunc 主对象Id的Getter函数。 + * @param thatModelList 关联对象列表。 + * @param thatIdGetterFunc 关联对象Id的Getter函数。 + * @param thisRelationField 主对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToOneRelation( + Class thisClazz, + List thisModelList, + Function thisIdGetterFunc, + List thatModelList, + Function thatIdGetterFunc, + String thisRelationField) { + makeOneToOneRelation(thisClazz, thisModelList, + thisIdGetterFunc, thatModelList, thatIdGetterFunc, thisRelationField, false); + } + + /** + * 根据主对象和关联对象各自的关联Id函数,将主对象列表和关联对象列表中的数据关联到一起,并将关联对象 + * 设置到主对象的指定关联字段中。 + * NOTE: 用于主对象关联字段中,没有包含RelationOneToOne注解的场景。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thisIdGetterFunc 主对象Id的Getter函数。 + * @param thatModelList 关联对象列表。 + * @param thatIdGetterFunc 关联对象Id的Getter函数。 + * @param thisRelationField 主对象中保存被关联对象的字段名称。 + * @param orderByThatList 如果为true,则按照ThatModelList的顺序输出。同时thisModelList被排序后的新列表替换。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToOneRelation( + Class thisClazz, + List thisModelList, + Function thisIdGetterFunc, + List thatModelList, + Function thatIdGetterFunc, + String thisRelationField, + boolean orderByThatList) { + if (CollectionUtils.isEmpty(thisModelList)) { + return; + } + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + boolean isMap = thisTargetField.getType().equals(Map.class); + if (orderByThatList) { + List newThisModelList = new LinkedList<>(); + Map thisModelMap = + thisModelList.stream().collect(Collectors.toMap(thisIdGetterFunc, c -> c)); + thatModelList.forEach(thatModel -> { + Object thatId = thatIdGetterFunc.apply(thatModel); + T thisModel = thisModelMap.get(thatId); + if (thisModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, normalize(isMap, thatModel)); + newThisModelList.add(thisModel); + } + }); + thisModelList.clear(); + thisModelList.addAll(newThisModelList); + } else { + Map thatMadelMap = + thatModelList.stream().collect(Collectors.toMap(thatIdGetterFunc, c -> c)); + thisModelList.forEach(thisModel -> { + Object thisId = thisIdGetterFunc.apply(thisModel); + R thatModel = thatMadelMap.get(thisId); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, normalize(isMap, thatModel)); + } + }); + } + } + + /** + * 在主Model类型中,根据thisRelationField字段的RelationOneToMany注解参数,将被关联对象列表thatModelList中的数据, + * 逐个关联到thisModelList每一个元素的thisRelationField字段中。 + * + * @param thisClazz 主对象的Class对象。 + * @param thisModelList 主对象列表。 + * @param thatModelList 一对多关联对象列表。 + * @param thisRelationField 主表对象中保存被关联对象的字段名称。 + * @param 主表对象类型。 + * @param 从表对象类型。 + */ + public static void makeOneToManyRelation( + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + if (CollectionUtils.isEmpty(thatModelList) || CollectionUtils.isEmpty(thisModelList)) { + return; + } + // 这里不做任何空值判断,从而让配置错误在调试期间即可抛出 + Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + RelationOneToMany r = thisTargetField.getAnnotation(RelationOneToMany.class); + Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); + Class thatClass = r.slaveModelClass(); + Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); + Map> thatMap = new HashMap<>(20); + thatModelList.forEach(thatModel -> { + Object id = ReflectUtil.getFieldValue(thatModel, slaveIdField); + List thatModelSubList = thatMap.computeIfAbsent(id, k -> new LinkedList<>()); + thatModelSubList.add(thatModel); + }); + thisModelList.forEach(thisModel -> { + Object id = ReflectUtil.getFieldValue(thisModel, masterIdField); + List thatModel = thatMap.get(id); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, thatModel); + } + }); + } + + private static Object normalize(boolean isMap, M model) { + return isMap ? BeanUtil.beanToMap(model) : model; + } + + /** + * 获取上传字段的存储信息。 + * + * @param modelClass model的class对象。 + * @param uploadFieldName 上传字段名。 + * @param model的类型。 + * @return 字段的上传存储信息对象。该值始终不会返回null。 + */ + public static UploadStoreInfo getUploadStoreInfo(Class modelClass, String uploadFieldName) { + UploadStoreInfo uploadStoreInfo = new UploadStoreInfo(); + Field uploadField = ReflectUtil.getField(modelClass, uploadFieldName); + if (uploadField == null) { + throw new UnsupportedOperationException("The Field [" + + uploadFieldName + "] doesn't exist in Model [" + modelClass.getSimpleName() + "]."); + } + uploadStoreInfo.setSupportUpload(false); + UploadFlagColumn anno = uploadField.getAnnotation(UploadFlagColumn.class); + if (anno != null) { + uploadStoreInfo.setSupportUpload(true); + uploadStoreInfo.setStoreType(anno.storeType()); + } + return uploadStoreInfo; + } + + /** + * 在插入实体对象数据之前,可以调用该方法,初始化通用字段的数据。 + * + * @param data 实体对象。 + * @param 实体对象类型。 + */ + public static void fillCommonsForInsert(M data) { + try { + Field createdByField = ReflectUtil.getField(data.getClass(), CREATE_USER_ID_FIELD_NAME); + if (createdByField != null) { + ReflectUtil.setAccessible(createdByField); + createdByField.set(data, TokenData.takeFromRequest().getUserId()); + } + Field createTimeField = ReflectUtil.getField(data.getClass(), CREATE_TIME_FIELD_NAME); + if (createTimeField != null) { + ReflectUtil.setAccessible(createTimeField); + createTimeField.set(data, new Date()); + } + Field updatedByField = ReflectUtil.getField(data.getClass(), UPDATE_USER_ID_FIELD_NAME); + if (updatedByField != null) { + ReflectUtil.setAccessible(updatedByField); + updatedByField.set(data, TokenData.takeFromRequest().getUserId()); + } + Field updateTimeField = ReflectUtil.getField(data.getClass(), UPDATE_TIME_FIELD_NAME); + if (updateTimeField != null) { + ReflectUtil.setAccessible(updateTimeField); + updateTimeField.set(data, new Date()); + } + } catch (IllegalAccessException e) { + throw new MyRuntimeException(e); + } + } + + /** + * 在更新实体对象数据之前,可以调用该方法,更新通用字段的数据。 + * + * @param data 实体对象。 + * @param originalData 原有实体对象。 + * @param 实体对象类型。 + */ + public static void fillCommonsForUpdate(M data, M originalData) { + try { + Object createdByValue = ReflectUtil.getFieldValue(originalData, CREATE_USER_ID_FIELD_NAME); + if (createdByValue != null) { + ReflectUtil.setFieldValue(data, CREATE_USER_ID_FIELD_NAME, createdByValue); + } + Object createTimeValue = ReflectUtil.getFieldValue(originalData, CREATE_TIME_FIELD_NAME); + if (createTimeValue != null) { + ReflectUtil.setFieldValue(data, CREATE_TIME_FIELD_NAME, createTimeValue); + } + Field updatedByField = ReflectUtil.getField(data.getClass(), UPDATE_USER_ID_FIELD_NAME); + if (updatedByField != null) { + ReflectUtil.setAccessible(updatedByField); + updatedByField.set(data, TokenData.takeFromRequest().getUserId()); + } + Field updateTimeField = ReflectUtil.getField(data.getClass(), UPDATE_TIME_FIELD_NAME); + if (updateTimeField != null) { + ReflectUtil.setAccessible(updateTimeField); + updateTimeField.set(data, new Date()); + } + } catch (IllegalAccessException e) { + throw new MyRuntimeException(e); + } + } + + /** + * 为实体对象字段设置缺省值。如果data对象中指定字段的值为NULL,则设置缺省值,否则跳过。 + * @param data 实体对象。 + * @param fieldName 实体对象字段名。 + * @param defaultValue 缺省值。 + * @param 实体对象类型。 + * @param 缺省值类型。 + */ + public static void setDefaultValue(M data, String fieldName, V defaultValue) { + Object v = ReflectUtil.getFieldValue(data, fieldName); + if (v == null) { + ReflectUtil.setFieldValue(data, fieldName, defaultValue); + } + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyModelUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyPageUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyPageUtil.java new file mode 100644 index 00000000..0c646109 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/MyPageUtil.java @@ -0,0 +1,111 @@ +package com.orangeforms.common.core.util; + +import cn.jimmyshi.beanquery.BeanQuery; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.Page; +import org.apache.commons.collections4.CollectionUtils; +import com.orangeforms.common.core.base.mapper.BaseModelMapper; +import com.orangeforms.common.core.object.MyPageData; +import com.orangeforms.common.core.object.Tuple2; + +import java.util.List; + +/** + * 生成带有分页信息的数据列表 + * + * @author Jerry + * @date 2020-08-08 + */ +public class MyPageUtil { + + private static final String DATA_LIST_LITERAL = "dataList"; + private static final String TOTAL_COUNT_LITERAL = "totalCount"; + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 + * @param includeFields 结果集中需要返回到前端的字段,多个字段之间逗号分隔。 + * @param 源数据类型。 + * @return 返回只是包含includeFields字段的数据列表,以及结果集TotalCount。 + */ + public static JSONObject makeResponseData(List dataList, String includeFields) { + JSONObject pageData = new JSONObject(); + pageData.put(DATA_LIST_LITERAL, BeanQuery.select(includeFields).from(dataList).execute()); + if (dataList instanceof Page) { + pageData.put(TOTAL_COUNT_LITERAL, ((Page)dataList).getTotal()); + } + return pageData; + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 + * @param 源数据类型。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(List dataList) { + MyPageData pageData = new MyPageData<>(); + pageData.setDataList(dataList); + if (dataList instanceof Page) { + pageData.setTotalCount(((Page)dataList).getTotal()); + } + return pageData; + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 + * @param totalCount 总数量。 + * @param 源数据类型。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(List dataList, Long totalCount) { + MyPageData pageData = new MyPageData<>(); + pageData.setDataList(dataList); + if (totalCount != null) { + pageData.setTotalCount(totalCount); + } + return pageData; + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param dataList 实体对象数据列表。 + * @param modelMapper 实体对象到DomainVO对象的数据映射器。 + * @param DomainVO对象类型。 + * @param 实体对象类型。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(List dataList, BaseModelMapper modelMapper) { + long totalCount = 0L; + if (CollectionUtils.isEmpty(dataList)) { + // 这里需要构建分页数据对象,统一前端数据格式 + return MyPageData.emptyPageData(); + } + if (dataList instanceof Page) { + totalCount = ((Page) dataList).getTotal(); + } + return MyPageUtil.makeResponseData(modelMapper.fromModelList(dataList), totalCount); + } + + /** + * 用户构建带有分页信息的数据列表。 + * + * @param responseData 第一个数据时数据列表,第二个是列表数量。 + * @param 源数据类型。 + * @return 返回分页数据对象。 + */ + public static MyPageData makeResponseData(Tuple2, Long> responseData) { + return makeResponseData(responseData.getFirst(), responseData.getSecond()); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyPageUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/RedisKeyUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/RedisKeyUtil.java new file mode 100644 index 00000000..806d2020 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/RedisKeyUtil.java @@ -0,0 +1,86 @@ +package com.orangeforms.common.core.util; + +/** + * Redis 键生成工具类。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class RedisKeyUtil { + + /** + * 获取通用的session缓存的键前缀。 + * + * @return session缓存的键前缀。 + */ + public static String getSessionIdPrefix() { + return "SESSIONID__"; + } + + /** + * 获取指定用户Id的session缓存的键前缀。 + * + * @param loginName 指定的用户登录名。 + * @return session缓存的键前缀。 + */ + public static String getSessionIdPrefix(String loginName) { + return "SESSIONID__" + loginName + "_"; + } + + /** + * 获取指定用户Id和登录设备类型的session缓存的键前缀。 + * + * @param loginName 指定的用户登录名。 + * @param deviceType 设备类型。 + * @return session缓存的键前缀。 + */ + public static String getSessionIdPrefix(String loginName, int deviceType) { + return "SESSIONID__" + loginName + "_" + deviceType + "_"; + } + + /** + * 计算SessionId返回存储于Redis中的键。 + * + * @param sessionId 会话Id。 + * @return 会话存储于Redis中的键值。 + */ + public static String makeSessionIdKey(String sessionId) { + return "SESSIONID__" + sessionId; + } + + /** + * 计算SessionId关联的权限数据存储于Redis中的键。 + * + * @param sessionId 会话Id。 + * @return 会话关联的权限数据存储于Redis中的键值。 + */ + public static String makeSessionPermIdKey(String sessionId) { + return "PERM__" + sessionId; + } + + /** + * 计算SessionId关联的数据权限数据存储于Redis中的键。 + * + * @param sessionId 会话Id。 + * @return 会话关联的数据权限数据存储于Redis中的键值。 + */ + public static String makeSessionDataPermIdKey(String sessionId) { + return "DATA_PERM__" + sessionId; + } + + /** + * 计算在线表对象缓存在Redis中的键值。 + * + * @param tableId 在线表主键Id。 + * @return 会话关联的数据权限数据存储于Redis中的键值。 + */ + public static String makeOnlineTableKey(Long tableId) { + return "ONLINE_TABLE_" + tableId; + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private RedisKeyUtil() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/RsaUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/RsaUtil.java new file mode 100644 index 00000000..9d0bddf3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/RsaUtil.java @@ -0,0 +1,116 @@ +package com.orangeforms.common.core.util; + +import javax.crypto.Cipher; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * Java RSA 加密工具类。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class RsaUtil { + + /** + * 密钥长度 于原文长度对应 以及越长速度越慢 + */ + private static final int KEY_SIZE = 1024; + /** + * 用于封装随机产生的公钥与私钥 + */ + private static final Map KEY_MAP = new HashMap<>(); + + /** + * 随机生成密钥对。 + */ + public static void genKeyPair() throws NoSuchAlgorithmException { + // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + // 初始化密钥对生成器 + keyPairGen.initialize(KEY_SIZE, new SecureRandom()); + // 生成一个密钥对,保存在keyPair中 + KeyPair keyPair = keyPairGen.generateKeyPair(); + // 得到私钥 + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + // 得到公钥 + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + String publicKeyString = Base64.getEncoder().encodeToString(publicKey.getEncoded()); + // 得到私钥字符串 + String privateKeyString = Base64.getEncoder().encodeToString(privateKey.getEncoded()); + // 将公钥和私钥保存到Map + // 0表示公钥 + KEY_MAP.put(0, publicKeyString); + // 1表示私钥 + KEY_MAP.put(1, privateKeyString); + } + + /** + * RSA公钥加密。 + * + * @param str 加密字符串 + * @param publicKey 公钥 + * @return 密文 + * @throws Exception 加密过程中的异常信息 + */ + public static String encrypt(String str, String publicKey) throws Exception { + // base64编码的公钥 + byte[] decoded = Base64.getDecoder().decode(publicKey); + RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + // RSA加密。后面这个更安全,但是SonarQube始终report安全漏洞。"RSA/ECB/PKCS1Padding" + // 而浏览器自带的Javascript加密功能,目前safari不支持,而且用的人也不太多。所以暂时都不考虑了。 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, pubKey); + return Base64.getEncoder().encodeToString(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8))); + } + + /** + * RSA私钥解密。 + * + * @param str 加密字符串 + * @param privateKey 私钥 + * @return 明文 + * @throws Exception 解密过程中的异常信息 + */ + public static String decrypt(String str, String privateKey) throws Exception { + // 64位解码加密后的字符串 + byte[] inputByte = Base64.getDecoder().decode(str); + // base64编码的私钥 + byte[] decoded = Base64.getDecoder().decode(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + // RSA解密 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, priKey); + return new String(cipher.doFinal(inputByte)); + } + + public static void main(String[] args) throws Exception { + long temp = System.currentTimeMillis(); + // 生成公钥和私钥 + genKeyPair(); + // 加密字符串 + System.out.println("公钥:" + KEY_MAP.get(0)); + System.out.println("私钥:" + KEY_MAP.get(1)); + System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + System.out.println("生成后的公钥前端使用!"); + System.out.println("生成后的私钥后台使用!"); + + String message = "RSA测试ABCD~!@#$"; + System.out.println("原文:" + message); + temp = System.currentTimeMillis(); + String messageEn = encrypt(message, KEY_MAP.get(0)); + System.out.println("密文:" + messageEn); + System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + temp = System.currentTimeMillis(); + String messageDe = decrypt(messageEn, KEY_MAP.get(1)); + System.out.println("解密:" + messageDe); + System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + } +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/TreeNode.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/TreeNode.java new file mode 100644 index 00000000..6497dda5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/util/TreeNode.java @@ -0,0 +1,93 @@ +package com.orangeforms.common.core.util; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + * 将列表结构组建为树结构的工具类。 + * + * @param 对象类型。 + * @param 节点之间关联键的类型。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class TreeNode { + + private K id; + private K parentId; + private T data; + private List> childList = new ArrayList<>(); + + /** + * 将列表结构组建为树结构的工具方法。 + * + * @param dataList 数据列表结构。 + * @param idFunc 获取关联id的函数对象。 + * @param parentIdFunc 获取关联ParentId的函数对象。 + * @param root 根节点。 + * @param 数据对象类型。 + * @param 节点之间关联键的类型。 + * @return 源数据对象的树结构存储。 + */ + public static List> build( + List dataList, Function idFunc, Function parentIdFunc, K root) { + List> treeNodeList = new ArrayList<>(); + for (T data : dataList) { + if (parentIdFunc.apply(data).equals(idFunc.apply(data))) { + continue; + } + TreeNode dataNode = new TreeNode<>(); + dataNode.setId(idFunc.apply(data)); + dataNode.setParentId(parentIdFunc.apply(data)); + dataNode.setData(data); + treeNodeList.add(dataNode); + } + return root == null ? toBuildTreeWithoutRoot(treeNodeList) : toBuildTree(treeNodeList, root); + } + + private static List> toBuildTreeWithoutRoot(List> treeNodes) { + Map> treeNodeMap = new HashMap<>(treeNodes.size()); + for (TreeNode treeNode : treeNodes) { + treeNodeMap.put(treeNode.id, treeNode); + } + List> treeNodeList = new ArrayList<>(); + for (TreeNode treeNode : treeNodes) { + TreeNode parentNode = treeNodeMap.get(treeNode.getParentId()); + if (parentNode == null) { + treeNodeList.add(treeNode); + } else { + parentNode.add(treeNode); + } + } + return treeNodeList; + } + + private static List> toBuildTree(List> treeNodes, K root) { + List> treeNodeList = new ArrayList<>(); + for (TreeNode treeNode : treeNodes) { + if (root.equals(treeNode.getParentId())) { + treeNodeList.add(treeNode); + } + for (TreeNode it : treeNodes) { + if (it.getParentId() == treeNode.getId()) { + if (treeNode.getChildList() == null) { + treeNode.setChildList(new ArrayList<>()); + } + treeNode.add(it); + } + } + } + return treeNodeList; + } + + private void add(TreeNode node) { + childList.add(node); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/AddGroup.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/AddGroup.java new file mode 100644 index 00000000..6da55cc2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/AddGroup.java @@ -0,0 +1,10 @@ +package com.orangeforms.common.core.validator; + +/** + * 数据增加的验证分组。通常用于数据新增场景。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface AddGroup { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/ConstDictRef.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/ConstDictRef.java new file mode 100644 index 00000000..a1cebd58 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/ConstDictRef.java @@ -0,0 +1,48 @@ +package com.orangeforms.common.core.validator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 定义在Model对象中,标注字段值引用自指定的常量字典,和ConstDictRefValidator对象配合完成数据验证。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = ConstDictValidator.class) +public @interface ConstDictRef { + + /** + * 引用的常量字典对象,该对象必须包含isValid的静态方法。 + * + * @return 最大长度。 + */ + Class constDictClass(); + + /** + * 超过边界后的错误消息提示。 + * + * @return 错误提示。 + */ + String message() default "无效的字典引用值!"; + + /** + * 验证分组。 + * + * @return 验证分组。 + */ + Class[] groups() default {}; + + /** + * 载荷对象类型。 + * + * @return 载荷对象。 + */ + Class[] payload() default {}; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/ConstDictValidator.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/ConstDictValidator.java new file mode 100644 index 00000000..c49e2f7a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/ConstDictValidator.java @@ -0,0 +1,33 @@ +package com.orangeforms.common.core.validator; + +import cn.hutool.core.util.ReflectUtil; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.lang.reflect.Method; + +/** + * 数据字段自定义验证,用于验证Model中字符串字段的最大长度和最小长度。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class ConstDictValidator implements ConstraintValidator { + + private ConstDictRef constDictRef; + + @Override + public void initialize(ConstDictRef constDictRef) { + this.constDictRef = constDictRef; + } + + @Override + public boolean isValid(Object s, ConstraintValidatorContext constraintValidatorContext) { + if (s == null) { + return true; + } + Method method = + ReflectUtil.getMethodByName(constDictRef.constDictClass(), "isValid"); + return ReflectUtil.invokeStatic(method, s); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/TextLength.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/TextLength.java new file mode 100644 index 00000000..bba08af7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/TextLength.java @@ -0,0 +1,55 @@ +package com.orangeforms.common.core.validator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 定义在Model或Dto对象中,UTF-8编码的字符串字段长度的上限和下限,和TextLengthValidator对象配合完成数据验证。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = TextLengthValidator.class) +public @interface TextLength { + + /** + * 字符串字段的最小长度。 + * + * @return 最小长度。 + */ + int min() default 0; + + /** + * 字符串字段的最大长度。 + * + * @return 最大长度。 + */ + int max() default Integer.MAX_VALUE; + + /** + * 超过边界后的错误消息提示。 + * + * @return 错误提示。 + */ + String message() default "字段长度超过最大字节数!"; + + /** + * 验证分组。 + * + * @return 验证分组。 + */ + Class[] groups() default { }; + + /** + * 载荷对象类型。 + * + * @return 载荷对象。 + */ + Class[] payload() default { }; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/TextLengthValidator.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/TextLengthValidator.java new file mode 100644 index 00000000..98295c43 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/TextLengthValidator.java @@ -0,0 +1,39 @@ +package com.orangeforms.common.core.validator; + +import org.apache.commons.lang3.CharUtils; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * 数据字段自定义验证,用于验证Model中UTF-8编码的字符串字段的最大长度和最小长度。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class TextLengthValidator implements ConstraintValidator { + + private TextLength textLength; + + @Override + public void initialize(TextLength textLength) { + this.textLength = textLength; + } + + @Override + public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { + if (s == null) { + return true; + } + int length = 0; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (CharUtils.isAscii(c)) { + ++length; + } else { + length += 2; + } + } + return length >= textLength.min() && length <= textLength.max(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/UpdateGroup.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/UpdateGroup.java new file mode 100644 index 00000000..adb3612f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-core/src/main/java/com/orangeforms/common/core/validator/UpdateGroup.java @@ -0,0 +1,11 @@ +package com.orangeforms.common.core.validator; + +/** + * 数据修改的验证分组。通常用于数据更新的场景。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface UpdateGroup { + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/common-datafilter.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/common-datafilter.iml new file mode 100644 index 00000000..a5b3c58b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/common-datafilter.iml @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/pom.xml new file mode 100644 index 00000000..e791d2f7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/pom.xml @@ -0,0 +1,29 @@ + + + + common + com.orangeforms + 1.0.0 + + 4.0.0 + + common-datafilter + 1.0.0 + common-datafilter + jar + + + + com.orangeforms + common-core + 1.0.0 + + + com.orangeforms + common-redis + 1.0.0 + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/aop/DisableDataFilterAspect.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/aop/DisableDataFilterAspect.java new file mode 100644 index 00000000..d2090cdf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/aop/DisableDataFilterAspect.java @@ -0,0 +1,41 @@ +package com.orangeforms.common.datafilter.aop; + +import com.orangeforms.common.core.object.GlobalThreadLocal; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * 禁用Mybatis拦截器数据过滤的AOP处理类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class DisableDataFilterAspect { + + /** + * 所有标记了DisableDataFilter注解的方法。 + */ + @Pointcut("@annotation(com.orangeforms.common.core.annotation.DisableDataFilter)") + public void disableDataFilterPointCut() { + // 空注释,避免sonar警告 + } + + @Around("disableDataFilterPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + boolean dataFilterEnabled = GlobalThreadLocal.setDataFilter(false); + try { + return point.proceed(); + } finally { + GlobalThreadLocal.setDataFilter(dataFilterEnabled); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterAutoConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterAutoConfig.java new file mode 100644 index 00000000..13726367 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterAutoConfig.java @@ -0,0 +1,13 @@ +package com.orangeforms.common.datafilter.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-datafilter模块的自动配置引导类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EnableConfigurationProperties({DataFilterProperties.class}) +public class DataFilterAutoConfig { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterProperties.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterProperties.java new file mode 100644 index 00000000..0b5386a5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterProperties.java @@ -0,0 +1,44 @@ +package com.orangeforms.common.datafilter.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * common-datafilter模块的配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@ConfigurationProperties(prefix = "datafilter") +public class DataFilterProperties { + + /** + * 是否启用租户过滤。 + */ + @Value("${datafilter.tenant.enabled:false}") + private Boolean enabledTenantFilter; + + /** + * 是否启动数据权限过滤。 + */ + @Value("${datafilter.dataperm.enabled:false}") + private Boolean enabledDataPermFilter; + + /** + * 部门关联表的表名前缀,如zz_。该值主要用在MybatisDataFilterInterceptor拦截器中, + * 用于拼接数据权限过滤的SQL语句。 + */ + @Value("${datafilter.dataperm.deptRelationTablePrefix:}") + private String deptRelationTablePrefix; + + /** + * 该值为true的时候,在进行数据权限过滤时,会加上表名,如:zz_sys_user.dept_id = xxx。 + * 为false时,过滤条件不加表名,只是使用字段名,如:dept_id = xxx。该值目前主要适用于 + * Oracle分页SQL使用了子查询的场景。此场景下,由于子查询使用了别名,再在数据权限过滤条件中 + * 加上原有表名时,SQL语法会报错。 + */ + @Value("${datafilter.dataperm.addTableNamePrefix:true}") + private Boolean addTableNamePrefix; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterWebMvcConfigurer.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterWebMvcConfigurer.java new file mode 100644 index 00000000..48131a70 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/config/DataFilterWebMvcConfigurer.java @@ -0,0 +1,21 @@ +package com.orangeforms.common.datafilter.config; + +import com.orangeforms.common.datafilter.interceptor.DataFilterInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 添加数据过滤相关的拦截器。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class DataFilterWebMvcConfigurer implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new DataFilterInterceptor()).addPathPatterns("/**"); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/constant/DataPermRuleType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/constant/DataPermRuleType.java new file mode 100644 index 00000000..2b186a73 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/constant/DataPermRuleType.java @@ -0,0 +1,69 @@ +package com.orangeforms.common.datafilter.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 数据权限规则类型常量类。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class DataPermRuleType { + + /** + * 查看全部。 + */ + public static final int TYPE_ALL = 0; + + /** + * 仅查看当前用户 + */ + public static final int TYPE_USER_ONLY = 1; + + /** + * 仅查看当前部门 + */ + public static final int TYPE_DEPT_ONLY = 2; + + /** + * 所在部门及子部门 + */ + public static final int TYPE_DEPT_AND_CHILD_DEPT = 3; + + /** + * 多部门及子部门 + */ + public static final int TYPE_MULTI_DEPT_AND_CHILD_DEPT = 4; + + /** + * 自定义部门列表 + */ + public static final int TYPE_CUSTOM_DEPT_LIST = 5; + + private static final Map DICT_MAP = new HashMap<>(6); + static { + DICT_MAP.put(0, "查看全部"); + DICT_MAP.put(1, "仅查看当前用户"); + DICT_MAP.put(2, "仅查看所在部门"); + DICT_MAP.put(3, "所在部门及子部门"); + DICT_MAP.put(4, "多部门及子部门"); + DICT_MAP.put(5, "自定义部门列表"); + } + + /** + * 判断参数是否为当前常量字典的合法取值范围。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private DataPermRuleType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/interceptor/DataFilterInterceptor.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/interceptor/DataFilterInterceptor.java new file mode 100644 index 00000000..061e5d02 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/interceptor/DataFilterInterceptor.java @@ -0,0 +1,42 @@ +package com.orangeforms.common.datafilter.interceptor; + +import com.orangeforms.common.core.object.GlobalThreadLocal; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 主要用于初始化,通过Mybatis拦截器插件进行数据过滤的标记。 + * 在调用controller接口处理方法之前,必须强制将数据过滤标记设置为缺省值。 + * 这样可以避免使用当前线程在处理上一个请求时,未能正常清理的数据过滤标记值。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class DataFilterInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + // 每次进入Controller接口之前,均主动打开数据权限验证。 + // 可以避免该Servlet线程在处理之前的请求时异常退出,从而导致该状态数据没有被正常清除。 + GlobalThreadLocal.setDataFilter(true); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + // 这里需要加注释,否则sonar不happy。 + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + GlobalThreadLocal.clearDataFilter(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/interceptor/MybatisDataFilterInterceptor.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/interceptor/MybatisDataFilterInterceptor.java new file mode 100644 index 00000000..08130599 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/interceptor/MybatisDataFilterInterceptor.java @@ -0,0 +1,470 @@ +package com.orangeforms.common.datafilter.interceptor; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableName; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.annotation.*; +import com.orangeforms.common.core.exception.NoDataPermException; +import com.orangeforms.common.core.object.GlobalThreadLocal; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.util.ApplicationContextHolder; +import com.orangeforms.common.core.util.ContextUtil; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.core.util.RedisKeyUtil; +import com.orangeforms.common.datafilter.config.DataFilterProperties; +import com.orangeforms.common.datafilter.constant.DataPermRuleType; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.statement.Statement; +import net.sf.jsqlparser.statement.delete.Delete; +import net.sf.jsqlparser.statement.select.FromItem; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.Select; +import net.sf.jsqlparser.statement.select.SubSelect; +import net.sf.jsqlparser.statement.update.Update; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.executor.statement.RoutingStatementHandler; +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.plugin.*; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.sql.Connection; +import java.util.*; + +/** + * Mybatis拦截器。目前用于数据权限的统一拦截和注入处理。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) +@Slf4j +@Component +public class MybatisDataFilterInterceptor implements Interceptor { + + @Autowired + private RedissonClient redissonClient; + @Autowired + private DataFilterProperties properties; + + /** + * 对象缓存。由于Set是排序后的,因此在查找排除方法名称时效率更高。 + * 在应用服务启动的监听器中(LoadDataPermMapperListener),会调用当前对象的(loadMappersWithDataPerm)方法,加载缓存。 + */ + private final Map cachedDataPermMap = new HashMap<>(); + /** + * 租户租户对象缓存。 + */ + private final Map cachedTenantMap = new HashMap<>(); + + /** + * 预先加载与数据过滤相关的数据到缓存,该函数会在(LoadDataFilterInfoListener)监听器中调用。 + */ + public void loadInfoWithDataFilter() { + Map mapperMap = + ApplicationContextHolder.getApplicationContext().getBeansOfType(BaseDaoMapper.class); + for (BaseDaoMapper mapperProxy : mapperMap.values()) { + // 优先处理jdk的代理 + Object proxy = ReflectUtil.getFieldValue(mapperProxy, "h"); + // 如果不是jdk的代理,再看看cjlib的代理。 + if (proxy == null) { + proxy = ReflectUtil.getFieldValue(mapperProxy, "CGLIB$CALLBACK_0"); + } + Class mapperClass = (Class) ReflectUtil.getFieldValue(proxy, "mapperInterface"); + if (properties.getEnabledTenantFilter()) { + loadTenantFilterData(mapperClass); + } + if (properties.getEnabledDataPermFilter()) { + EnableDataPerm rule = mapperClass.getAnnotation(EnableDataPerm.class); + if (rule != null) { + loadDataPermFilterRules(mapperClass, rule); + } + } + } + } + + private void loadTenantFilterData(Class mapperClass) { + Class modelClass = (Class) ((ParameterizedType) + mapperClass.getGenericInterfaces()[0]).getActualTypeArguments()[0]; + Field[] fields = ReflectUtil.getFields(modelClass); + for (Field field : fields) { + if (field.getAnnotation(TenantFilterColumn.class) != null) { + ModelTenantInfo tenantInfo = new ModelTenantInfo(); + tenantInfo.setModelName(modelClass.getSimpleName()); + tenantInfo.setTableName(modelClass.getAnnotation(TableName.class).value()); + tenantInfo.setFieldName(field.getName()); + tenantInfo.setColumnName(MyModelUtil.mapToColumnName(field, modelClass)); + // 判断当前dao中是否包括不需要自动注入租户Id过滤的方法。 + DisableTenantFilter disableTenantFilter = mapperClass.getAnnotation(DisableTenantFilter.class); + if (disableTenantFilter != null) { + // 这里开始获取当前Mapper已经声明的的SqlId中,有哪些是需要排除在外的。 + // 排除在外的将不进行数据过滤。 + Set excludeMethodNameSet = new HashSet<>(); + for (String excludeName : disableTenantFilter.includeMethodName()) { + excludeMethodNameSet.add(excludeName); + // 这里是给pagehelper中,分页查询先获取数据总量的查询。 + excludeMethodNameSet.add(excludeName + "_COUNT"); + } + tenantInfo.setExcludeMethodNameSet(excludeMethodNameSet); + } + cachedTenantMap.put(mapperClass.getName(), tenantInfo); + break; + } + } + } + + private void loadDataPermFilterRules(Class mapperClass, EnableDataPerm rule) { + String sysDataPermMapperName = "SysDataPermMapper"; + // 由于给数据权限Mapper添加@EnableDataPerm,将会导致无限递归,因此这里检测到之后, + // 会在系统启动加载监听器的时候,及时抛出异常。 + if (StringUtils.equals(sysDataPermMapperName, mapperClass.getSimpleName())) { + throw new IllegalStateException("Add @EnableDataPerm annotation to SysDataPermMapper is ILLEGAL!"); + } + // 这里开始获取当前Mapper已经声明的的SqlId中,有哪些是需要排除在外的。 + // 排除在外的将不进行数据过滤。 + Set excludeMethodNameSet = null; + String[] excludes = rule.excluseMethodName(); + if (excludes.length > 0) { + excludeMethodNameSet = new HashSet<>(); + for (String excludeName : excludes) { + excludeMethodNameSet.add(excludeName); + // 这里是给pagehelper中,分页查询先获取数据总量的查询。 + excludeMethodNameSet.add(excludeName + "_COUNT"); + } + } + // 获取Mapper关联的主表信息,包括表名,user过滤字段名和dept过滤字段名。 + Class modelClazz = (Class) + ((ParameterizedType) mapperClass.getGenericInterfaces()[0]).getActualTypeArguments()[0]; + Field[] fields = ReflectUtil.getFields(modelClazz); + Field userFilterField = null; + Field deptFilterField = null; + for (Field field : fields) { + if (null != field.getAnnotation(UserFilterColumn.class)) { + userFilterField = field; + } + if (null != field.getAnnotation(DeptFilterColumn.class)) { + deptFilterField = field; + } + if (userFilterField != null && deptFilterField != null) { + break; + } + } + // 通过注解解析与Mapper关联的Model,并获取与数据权限关联的信息,并将结果缓存。 + ModelDataPermInfo info = new ModelDataPermInfo(); + info.setMainTableName(MyModelUtil.mapToTableName(modelClazz)); + info.setExcludeMethodNameSet(excludeMethodNameSet); + if (userFilterField != null) { + info.setUserFilterColumn(MyModelUtil.mapToColumnName(userFilterField, modelClazz)); + } + if (deptFilterField != null) { + info.setDeptFilterColumn(MyModelUtil.mapToColumnName(deptFilterField, modelClazz)); + } + cachedDataPermMap.put(mapperClass.getName(), info); + } + + @Override + public Object intercept(Invocation invocation) throws Throwable { + // 判断当前线程本地存储中,业务操作是否禁用了数据权限过滤,如果禁用,则不进行后续的数据过滤处理了。 + if (!GlobalThreadLocal.enabledDataFilter()) { + return invocation.proceed(); + } + // 只有在HttpServletRequest场景下,该拦截器才起作用,对于系统级别的预加载数据不会应用数据权限。 + if (!ContextUtil.hasRequestContext()) { + return invocation.proceed(); + } + // 没有登录的用户,不会参与租户过滤,如果需要过滤的,自己在代码中手动实现 + // 通常对于无需登录的白名单url,也无需过滤了。 + // 另外就是登录接口中,获取菜单列表的接口,由于尚未登录,没有TokenData,所以这个接口我们手动加入了该条件。 + if (TokenData.takeFromRequest() == null) { + return invocation.proceed(); + } + RoutingStatementHandler handler = (RoutingStatementHandler) invocation.getTarget(); + StatementHandler delegate = + (StatementHandler) ReflectUtil.getFieldValue(handler, "delegate"); + // 通过反射获取delegate父类BaseStatementHandler的mappedStatement属性 + MappedStatement mappedStatement = + (MappedStatement) ReflectUtil.getFieldValue(delegate, "mappedStatement"); + SqlCommandType commandType = mappedStatement.getSqlCommandType(); + // 对于INSERT语句,我们不进行任何数据过滤。 + if (commandType == SqlCommandType.INSERT) { + return invocation.proceed(); + } + String sqlId = mappedStatement.getId(); + int pos = StringUtils.lastIndexOf(sqlId, "."); + String className = StringUtils.substring(sqlId, 0, pos); + String methodName = StringUtils.substring(sqlId, pos + 1); + // 先进行租户过滤条件的处理,再将解析并处理后的SQL Statement交给下一步的数据权限过滤去处理。 + // 这样做的目的主要是为了减少一次SQL解析的过程,因为这是高频操作,所以要尽量去优化。 + Statement statement = null; + if (properties.getEnabledTenantFilter()) { + statement = this.processTenantFilter(className, methodName, delegate.getBoundSql(), commandType); + } + // 处理数据权限过滤。 + if (properties.getEnabledDataPermFilter()) { + this.processDataPermFilter(className, methodName, delegate.getBoundSql(), commandType, statement, sqlId); + } + return invocation.proceed(); + } + + private Statement processTenantFilter( + String className, String methodName, BoundSql boundSql, SqlCommandType commandType) throws JSQLParserException { + ModelTenantInfo info = cachedTenantMap.get(className); + if (info == null || CollUtil.contains(info.getExcludeMethodNameSet(), methodName)) { + return null; + } + String sql = boundSql.getSql(); + Statement statement = CCJSqlParserUtil.parse(sql); + StringBuilder filterBuilder = new StringBuilder(64); + filterBuilder.append(info.tableName).append(".") + .append(info.columnName) + .append("=") + .append(TokenData.takeFromRequest().getTenantId()); + String dataFilter = filterBuilder.toString(); + if (commandType == SqlCommandType.UPDATE) { + Update update = (Update) statement; + this.buildWhereClause(update, dataFilter); + } else if (commandType == SqlCommandType.DELETE) { + Delete delete = (Delete) statement; + this.buildWhereClause(delete, dataFilter); + } else { + Select select = (Select) statement; + PlainSelect selectBody = (PlainSelect) select.getSelectBody(); + FromItem fromItem = selectBody.getFromItem(); + if (fromItem != null) { + PlainSelect subSelect = null; + if (fromItem instanceof SubSelect) { + subSelect = (PlainSelect) ((SubSelect) fromItem).getSelectBody(); + } + if (subSelect != null) { + buildWhereClause(subSelect, dataFilter); + } else { + buildWhereClause(selectBody, dataFilter); + } + } + } + log.info("Tenant Filter Where Clause [{}]", dataFilter); + ReflectUtil.setFieldValue(boundSql, "sql", statement.toString()); + return statement; + } + + private void processDataPermFilter( + String className, String methodName, BoundSql boundSql, SqlCommandType commandType, Statement statement, String sqlId) + throws JSQLParserException { + // 判断当前线程本地存储中,业务操作是否禁用了数据权限过滤,如果禁用,则不进行后续的数据过滤处理了。 + // 数据过滤权限中,INSERT不过滤。如果是管理员则不参与数据权限的数据过滤,显示全部数据。 + TokenData tokenData = TokenData.takeFromRequest(); + if (Boolean.TRUE.equals(tokenData.getIsAdmin())) { + return; + } + ModelDataPermInfo info = cachedDataPermMap.get(className); + // 再次查找当前方法是否为排除方法,如果不是,就参与数据权限注入过滤。 + if (info == null || CollUtil.contains(info.getExcludeMethodNameSet(), methodName)) { + return; + } + String dataPermSessionKey = RedisKeyUtil.makeSessionDataPermIdKey(tokenData.getSessionId()); + String dataPermData = redissonClient.getBucket(dataPermSessionKey).get().toString(); + if (StringUtils.isBlank(dataPermData)) { + throw new NoDataPermException("No Related DataPerm found for SQL_ID [ " + sqlId + " ]."); + } + Map dataPermMap = new HashMap<>(8); + for (Map.Entry entry : JSON.parseObject(dataPermData).entrySet()) { + dataPermMap.put(Integer.valueOf(entry.getKey()), entry.getValue().toString()); + } + if (MapUtils.isEmpty(dataPermMap)) { + throw new NoDataPermException("No Related DataPerm found for SQL_ID [ " + sqlId + " ]."); + } + if (dataPermMap.containsKey(DataPermRuleType.TYPE_ALL)) { + return; + } + this.processDataPerm(info, dataPermMap, boundSql, commandType, statement); + } + + private void processDataPerm( + ModelDataPermInfo info, + Map dataPermMap, + BoundSql boundSql, + SqlCommandType commandType, + Statement statement) throws JSQLParserException { + List criteriaList = new LinkedList<>(); + for (Map.Entry entry : dataPermMap.entrySet()) { + String filterClause = processDataPermRule(info, entry.getKey(), entry.getValue()); + if (StringUtils.isNotBlank(filterClause)) { + criteriaList.add(filterClause); + } + } + if (CollectionUtils.isEmpty(criteriaList)) { + return; + } + StringBuilder filterBuilder = new StringBuilder(128); + filterBuilder.append("("); + filterBuilder.append(StringUtils.join(criteriaList, " OR ")); + filterBuilder.append(")"); + String dataFilter = filterBuilder.toString(); + if (statement == null) { + String sql = boundSql.getSql(); + statement = CCJSqlParserUtil.parse(sql); + } + if (commandType == SqlCommandType.UPDATE) { + Update update = (Update) statement; + this.buildWhereClause(update, dataFilter); + } else if (commandType == SqlCommandType.DELETE) { + Delete delete = (Delete) statement; + this.buildWhereClause(delete, dataFilter); + } else { + Select select = (Select) statement; + PlainSelect selectBody = (PlainSelect) select.getSelectBody(); + FromItem fromItem = selectBody.getFromItem(); + PlainSelect subSelect = null; + if (fromItem != null) { + if (fromItem instanceof SubSelect) { + subSelect = (PlainSelect) ((SubSelect) fromItem).getSelectBody(); + } + if (subSelect != null) { + buildWhereClause(subSelect, dataFilter); + } else { + buildWhereClause(selectBody, dataFilter); + } + } + } + log.info("DataPerm Filter Where Clause [{}]", dataFilter); + ReflectUtil.setFieldValue(boundSql, "sql", statement.toString()); + } + + private String processDataPermRule(ModelDataPermInfo info, Integer ruleType, String deptIds) { + TokenData tokenData = TokenData.takeFromRequest(); + StringBuilder filter = new StringBuilder(128); + if (ruleType == DataPermRuleType.TYPE_USER_ONLY) { + if (StringUtils.isNotBlank(info.getUserFilterColumn())) { + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getUserFilterColumn()) + .append(" = ") + .append(tokenData.getUserId()); + } + } else { + if (StringUtils.isNotBlank(info.getDeptFilterColumn())) { + if (ruleType == DataPermRuleType.TYPE_DEPT_ONLY) { + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" = ") + .append(tokenData.getDeptId()); + } else if (ruleType == DataPermRuleType.TYPE_DEPT_AND_CHILD_DEPT) { + filter.append(" EXISTS ") + .append("(SELECT 1 FROM ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation WHERE ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.parent_dept_id = ") + .append(tokenData.getDeptId()) + .append(" AND "); + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" = ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.dept_id) "); + } else if (ruleType == DataPermRuleType.TYPE_MULTI_DEPT_AND_CHILD_DEPT) { + filter.append(" EXISTS ") + .append("(SELECT 1 FROM ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation WHERE ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.parent_dept_id IN (") + .append(deptIds) + .append(") AND "); + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" = ") + .append(properties.getDeptRelationTablePrefix()) + .append("sys_dept_relation.dept_id) "); + } else if (ruleType == DataPermRuleType.TYPE_CUSTOM_DEPT_LIST) { + if (properties.getAddTableNamePrefix()) { + filter.append(info.getMainTableName()).append("."); + } + filter.append(info.getDeptFilterColumn()) + .append(" IN (") + .append(deptIds) + .append(") "); + } + } + } + return filter.toString(); + } + + private void buildWhereClause(Update update, String dataFilter) throws JSQLParserException { + if (update.getWhere() == null) { + update.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter)); + } else { + AndExpression and = new AndExpression( + CCJSqlParserUtil.parseCondExpression(dataFilter), update.getWhere()); + update.setWhere(and); + } + } + + private void buildWhereClause(Delete delete, String dataFilter) throws JSQLParserException { + if (delete.getWhere() == null) { + delete.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter)); + } else { + AndExpression and = new AndExpression( + CCJSqlParserUtil.parseCondExpression(dataFilter), delete.getWhere()); + delete.setWhere(and); + } + } + + private void buildWhereClause(PlainSelect select, String dataFilter) throws JSQLParserException { + if (select.getWhere() == null) { + select.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter)); + } else { + AndExpression and = new AndExpression( + CCJSqlParserUtil.parseCondExpression(dataFilter), select.getWhere()); + select.setWhere(and); + } + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + @Override + public void setProperties(Properties properties) { + // 这里需要空注解,否则sonar会不happy。 + } + + @Data + private static final class ModelDataPermInfo { + private Set excludeMethodNameSet; + private String userFilterColumn; + private String deptFilterColumn; + private String mainTableName; + } + + @Data + private static final class ModelTenantInfo { + private Set excludeMethodNameSet; + private String modelName; + private String tableName; + private String fieldName; + private String columnName; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/listener/LoadDataFilterInfoListener.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/listener/LoadDataFilterInfoListener.java new file mode 100644 index 00000000..e78bed3b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/java/com/orangeforms/common/datafilter/listener/LoadDataFilterInfoListener.java @@ -0,0 +1,25 @@ +package com.orangeforms.common.datafilter.listener; + +import com.orangeforms.common.datafilter.interceptor.MybatisDataFilterInterceptor; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +/** + * 应用服务启动监听器。 + * 目前主要功能是调用MybatisDataFilterInterceptor中的loadInfoWithDataFilter方法, + * 将标记有过滤注解的数据加载到缓存,以提升系统运行时效率。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Component +public class LoadDataFilterInfoListener implements ApplicationListener { + + @Override + public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { + MybatisDataFilterInterceptor interceptor = + applicationReadyEvent.getApplicationContext().getBean(MybatisDataFilterInterceptor.class); + interceptor.loadInfoWithDataFilter(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/resources/META-INF/spring.factories b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..e9628e63 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-datafilter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.orangeforms.common.datafilter.config.DataFilterAutoConfig \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/common-log.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/common-log.iml new file mode 100644 index 00000000..9219806a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/common-log.iml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/pom.xml new file mode 100644 index 00000000..4b097f7c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/pom.xml @@ -0,0 +1,47 @@ + + + + common + com.orangeforms + 1.0.0 + + 4.0.0 + + common-log + 1.0.0 + common-log + jar + + + + com.orangeforms + common-sequence + 1.0.0 + + + org.springframework.kafka + spring-kafka + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/annotation/OperationLog.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/annotation/OperationLog.java new file mode 100644 index 00000000..ba3c95b9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/annotation/OperationLog.java @@ -0,0 +1,33 @@ +package com.orangeforms.common.log.annotation; + +import com.orangeforms.common.log.model.constant.SysOperationLogType; + +import java.lang.annotation.*; + +/** + * 操作日志记录注解。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface OperationLog { + + /** + * 描述。 + */ + String description() default ""; + + /** + * 操作类型。 + */ + int type() default SysOperationLogType.OTHER; + + /** + * 是否保存应答结果。 + * 对于类似导出和文件下载之类的接口,该参与应该设置为false。 + */ + boolean saveResponse() default true; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/aop/OperationLogAspect.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/aop/OperationLogAspect.java new file mode 100644 index 00000000..e6e72374 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/aop/OperationLogAspect.java @@ -0,0 +1,256 @@ +package com.orangeforms.common.log.aop; + +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.util.ContextUtil; +import com.orangeforms.common.core.util.IpUtil; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.log.annotation.OperationLog; +import com.orangeforms.common.log.config.OperationLogProperties; +import com.orangeforms.common.log.model.SysOperationLog; +import com.orangeforms.common.log.model.constant.SysOperationLogType; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.*; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.annotation.Order; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.*; + +/** + * 操作日志记录处理AOP对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class OperationLogAspect { + + @Value("${spring.application.name}") + private String serviceName; + @Autowired + private KafkaTemplate kafkaTemplate; + @Autowired + private OperationLogProperties properties; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 错误信息、请求参数和应答结果字符串的最大长度。 + */ + private final static int MAX_LENGTH = 2000; + + /** + * 所有controller方法。 + */ + @Pointcut("execution(public * com.orangeforms..controller..*(..))") + public void operationLogPointCut() { + // 空注释,避免sonar警告 + } + + @Around("operationLogPointCut()") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + // 计时。 + long start = System.currentTimeMillis(); + HttpServletRequest request = ContextUtil.getHttpRequest(); + HttpServletResponse response = ContextUtil.getHttpResponse(); + String traceId = this.getTraceId(request); + request.setAttribute(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + // 将流水号通过应答头返回给前端,便于问题精确定位。 + response.setHeader(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + MDC.put(ApplicationConstant.HTTP_HEADER_TRACE_ID, traceId); + TokenData tokenData = TokenData.takeFromRequest(); + // 为日志框架设定变量,使日志可以输出更多有价值的信息。 + if (tokenData != null) { + MDC.put("sessionId", tokenData.getSessionId()); + MDC.put("userId", tokenData.getUserId().toString()); + } + String[] parameterNames = this.getParameterNames(joinPoint); + Object[] args = joinPoint.getArgs(); + JSONObject jsonArgs = new JSONObject(); + for (int i = 0; i < args.length; i++) { + Object arg = args[i]; + if (this.isNormalArgs(arg)) { + String parameterName = parameterNames[i]; + jsonArgs.put(parameterName, arg); + } + } + String params = jsonArgs.toJSONString(); + SysOperationLog operationLog = null; + OperationLog operationLogAnnotation = null; + boolean saveOperationLog = properties.isEnabled(); + if (saveOperationLog) { + operationLogAnnotation = getOperationLogAnnotation(joinPoint); + saveOperationLog = (operationLogAnnotation != null); + } + if (saveOperationLog) { + operationLog = this.buildSysOperationLog(operationLogAnnotation, joinPoint, params, traceId, tokenData); + } + Object result; + log.info("开始请求,url={}, reqData={}", request.getRequestURI(), params); + try { + // 调用原来的方法 + result = joinPoint.proceed(); + String respData = result == null ? "null" : JSON.toJSONString(result); + Long elapse = System.currentTimeMillis() - start; + if (saveOperationLog) { + this.operationLogPostProcess(operationLogAnnotation, respData, operationLog, result); + } + log.info("请求完成, url={},elapse={}ms, respData={}", request.getRequestURI(), elapse, respData); + } catch (Exception e) { + if (saveOperationLog) { + operationLog.setSuccess(false); + operationLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, MAX_LENGTH)); + } + log.error("请求报错,url={}, reqData={}, error={}", request.getRequestURI(), params, e.getMessage()); + throw e; + } finally { + if (saveOperationLog) { + operationLog.setElapse(System.currentTimeMillis() - start); + kafkaTemplate.send(properties.getKafkaTopic(), JSON.toJSONString(operationLog)); + } + MDC.remove(ApplicationConstant.HTTP_HEADER_TRACE_ID); + if (tokenData != null) { + MDC.remove("sessionId"); + MDC.remove("userId"); + } + } + return result; + } + + private SysOperationLog buildSysOperationLog( + OperationLog operationLogAnnotation, + ProceedingJoinPoint joinPoint, + String params, + String traceId, + TokenData tokenData) { + HttpServletRequest request = ContextUtil.getHttpRequest(); + SysOperationLog operationLog = new SysOperationLog(); + operationLog.setLogId(idGenerator.nextLongId()); + operationLog.setTraceId(traceId); + operationLog.setDescription(operationLogAnnotation.description()); + operationLog.setOperationType(operationLogAnnotation.type()); + operationLog.setServiceName(this.serviceName); + operationLog.setApiClass(joinPoint.getTarget().getClass().getName()); + operationLog.setApiMethod(operationLog.getApiClass() + "." + joinPoint.getSignature().getName()); + operationLog.setRequestMethod(request.getMethod()); + operationLog.setRequestUrl(request.getRequestURI()); + if (tokenData != null) { + operationLog.setRequestIp(tokenData.getLoginIp()); + } else { + operationLog.setRequestIp(IpUtil.getRemoteIpAddress(request)); + } + operationLog.setOperationTime(new Date()); + if (params != null) { + if (params.length() <= MAX_LENGTH) { + operationLog.setRequestArguments(params); + } else { + operationLog.setRequestArguments(StringUtils.substring(params, 0, MAX_LENGTH)); + } + } + if (tokenData != null) { + // 对于非多租户系统,该值为空可以忽略。 + operationLog.setTenantId(tokenData.getTenantId()); + operationLog.setSessionId(tokenData.getSessionId()); + operationLog.setOperatorId(tokenData.getUserId()); + operationLog.setOperatorName(tokenData.getLoginName()); + } + return operationLog; + } + + private void operationLogPostProcess( + OperationLog operationLogAnnotation, String respData, SysOperationLog operationLog, Object result) { + if (operationLogAnnotation.saveResponse()) { + if (respData.length() <= MAX_LENGTH) { + operationLog.setResponseResult(respData); + } else { + operationLog.setResponseResult(StringUtils.substring(respData, 0, MAX_LENGTH)); + } + } + // 处理大部分返回ResponseResult的接口。 + if (!(result instanceof ResponseResult)) { + if (ContextUtil.hasRequestContext()) { + operationLog.setSuccess(ContextUtil.getHttpResponse().getStatus() == HttpServletResponse.SC_OK); + } + return; + } + ResponseResult responseResult = (ResponseResult) result; + operationLog.setSuccess(responseResult.isSuccess()); + if (!responseResult.isSuccess()) { + operationLog.setErrorMsg(responseResult.getErrorMessage()); + } + if (operationLog.getOperationType().equals(SysOperationLogType.LOGIN)) { + // 对于登录操作,由于在调用登录方法之前,没有可用的TokenData。 + // 因此如果登录成功,可再次通过TokenData.takeFromRequest()获取TokenData。 + if (operationLog.getSuccess()) { + // 这里为了保证LoginController.doLogin方法,一定将TokenData存入Request.Attribute之中, + // 我们将不做空值判断,一旦出错,开发者可在调试时立刻发现异常,并根据这里的注释进行修复。 + TokenData tokenData = TokenData.takeFromRequest(); + // 对于非多租户系统,为了保证代码一致性,仍可保留对tenantId的赋值代码。 + operationLog.setTenantId(tokenData.getTenantId()); + operationLog.setSessionId(tokenData.getSessionId()); + operationLog.setOperatorId(tokenData.getUserId()); + operationLog.setOperatorName(tokenData.getLoginName()); + } else { + HttpServletRequest request = ContextUtil.getHttpRequest(); + // 登录操作需要特殊处理,无论是登录成功还是失败,都要记录operator_name字段。 + operationLog.setOperatorName(request.getParameter("loginName")); + } + } + } + + private String[] getParameterNames(ProceedingJoinPoint joinPoint) { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + return methodSignature.getParameterNames(); + } + + private OperationLog getOperationLogAnnotation(JoinPoint joinPoint) throws Exception { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + return method.getAnnotation(OperationLog.class); + } + + private String getTraceId(HttpServletRequest request) { + // 获取请求流水号。 + // 对于微服务系统,为了保证traceId在全调用链的唯一性,因此在网关的过滤器中创建了该值。 + String traceId = request.getHeader(ApplicationConstant.HTTP_HEADER_TRACE_ID); + if (StringUtils.isBlank(traceId)) { + traceId = MyCommonUtil.generateUuid(); + } + return traceId; + } + + private boolean isNormalArgs(Object o) { + if (o instanceof List) { + List list = (List) o; + if (CollUtil.isNotEmpty(list)) { + return !(list.get(0) instanceof MultipartFile); + } + } + return !(o instanceof HttpServletRequest) + && !(o instanceof HttpServletResponse) + && !(o instanceof MultipartFile); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/config/CommonLogAutoConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/config/CommonLogAutoConfig.java new file mode 100644 index 00000000..1fbd8cfe --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/config/CommonLogAutoConfig.java @@ -0,0 +1,13 @@ +package com.orangeforms.common.log.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-log模块的自动配置引导类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EnableConfigurationProperties({OperationLogProperties.class}) +public class CommonLogAutoConfig { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/config/OperationLogProperties.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/config/OperationLogProperties.java new file mode 100644 index 00000000..318375a3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/config/OperationLogProperties.java @@ -0,0 +1,24 @@ +package com.orangeforms.common.log.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 操作日志的配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@ConfigurationProperties(prefix = "common-log.operation-log") +public class OperationLogProperties { + + /** + * 是否采集操作日志。 + */ + private boolean enabled = true; + /** + * kafka topic + */ + private String kafkaTopic = "SysOperationLog"; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/dao/SysOperationLogMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/dao/SysOperationLogMapper.java new file mode 100644 index 00000000..40bef58d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/dao/SysOperationLogMapper.java @@ -0,0 +1,34 @@ +package com.orangeforms.common.log.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.log.model.SysOperationLog; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 系统操作日志对应的数据访问对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysOperationLogMapper extends BaseDaoMapper { + + /** + * 批量插入。 + * + * @param operationLogList 操作日志列表。 + */ + void insertList(List operationLogList); + + /** + * 根据过滤条件和排序规则,查询操作日志。 + * + * @param sysOperationLogFilter 操作日志的过滤对象。 + * @param orderBy 排序规则。 + * @return 查询列表。 + */ + List getSysOperationLogList( + @Param("sysOperationLogFilter") SysOperationLog sysOperationLogFilter, + @Param("orderBy") String orderBy); +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/dao/mapper/SysOperationLogMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/dao/mapper/SysOperationLogMapper.xml new file mode 100644 index 00000000..891a882d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/dao/mapper/SysOperationLogMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AND zz_sys_operation_log.operation_type = #{sysOperationLogFilter.operationType} + + + + AND zz_sys_operation_log.request_url LIKE #{safeRequestUrl} + + + AND zz_sys_operation_log.trace_id = #{sysOperationLogFilter.traceId} + + + AND zz_sys_operation_log.success = #{sysOperationLogFilter.success} + + + + AND zz_sys_operation_log.operator_name LIKE #{safeOperatorName} + + + AND zz_sys_operation_log.elapse >= #{sysOperationLogFilter.elapseMin} + + + AND zz_sys_operation_log.elapse <= #{sysOperationLogFilter.elapseMax} + + + AND zz_sys_operation_log.operation_time >= #{sysOperationLogFilter.operationTimeStart} + + + AND zz_sys_operation_log.operation_time <= #{sysOperationLogFilter.operationTimeEnd} + + + + + + INSERT INTO zz_sys_operation_log VALUES + + ( + #{item.logId}, + #{item.description}, + #{item.operationType}, + #{item.serviceName}, + #{item.apiClass}, + #{item.apiMethod}, + #{item.sessionId}, + #{item.traceId}, + #{item.elapse}, + #{item.requestMethod}, + #{item.requestUrl}, + #{item.requestArguments}, + #{item.responseResult}, + #{item.requestIp}, + #{item.success}, + #{item.errorMsg}, + #{item.tenantId}, + #{item.operatorId}, + #{item.operatorName}, + #{item.operationTime} + ) + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/model/SysOperationLog.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/model/SysOperationLog.java new file mode 100644 index 00000000..f4a94778 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/model/SysOperationLog.java @@ -0,0 +1,170 @@ +package com.orangeforms.common.log.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.annotation.TenantFilterColumn; +import lombok.Data; + +import java.util.Date; + +/** + * 操作日志记录表 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@TableName("zz_sys_operation_log") +public class SysOperationLog { + + /** + * 主键Id。 + */ + @TableId(value = "log_id") + private Long logId; + + /** + * 日志描述。 + */ + @TableField(value = "description") + private String description; + + /** + * 操作类型。 + * 常量值定义可参考SysOperationLogType对象。 + */ + @TableField(value = "operation_type") + private Integer operationType; + + /** + * 接口所在服务名称。 + * 通常为spring.application.name配置项的值。 + */ + @TableField(value = "service_name") + private String serviceName; + + /** + * 调用的controller全类名。 + * 之所以为独立字段,是为了便于查询和统计接口的调用频度。 + */ + @TableField(value = "api_class") + private String apiClass; + + /** + * 调用的controller中的方法。 + * 格式为:接口类名 + "." + 方法名。 + */ + @TableField(value = "api_method") + private String apiMethod; + + /** + * 用户会话sessionId。 + * 主要是为了便于统计,以及跟踪查询定位问题。 + */ + @TableField(value = "session_id") + private String sessionId; + + /** + * 每次请求的Id。 + * 对于微服务之间的调用,在同一个请求的调用链中,该值是相同的。 + */ + @TableField(value = "trace_id") + private String traceId; + + /** + * 调用时长。 + */ + @TableField(value = "elapse") + private Long elapse; + + /** + * HTTP 请求方法,如GET。 + */ + @TableField(value = "request_method") + private String requestMethod; + + /** + * HTTP 请求地址。 + */ + @TableField(value = "request_url") + private String requestUrl; + + /** + * controller接口参数。 + */ + @TableField(value = "request_arguments") + private String requestArguments; + + /** + * controller应答结果。 + */ + @TableField(value = "response_result") + private String responseResult; + + /** + * 请求IP。 + */ + @TableField(value = "request_ip") + private String requestIp; + + /** + * 应答状态。 + */ + @TableField(value = "success") + private Boolean success; + + /** + * 错误信息。 + */ + @TableField(value = "error_msg") + private String errorMsg; + + /** + * 租户Id。 + * 仅用于多租户系统,是便于进行对租户的操作查询和统计分析。 + */ + @TenantFilterColumn + @TableField(value = "tenant_id") + private Long tenantId; + + /** + * 操作员Id。 + */ + @TableField(value = "operator_id") + private Long operatorId; + + /** + * 操作员名称。 + */ + @TableField(value = "operator_name") + private String operatorName; + + /** + * 操作时间。 + */ + @TableField(value = "operation_time") + private Date operationTime; + + /** + * 调用时长最小值。 + */ + @TableField(exist = false) + private Long elapseMin; + + /** + * 调用时长最大值。 + */ + @TableField(exist = false) + private Long elapseMax; + + /** + * 操作开始时间。 + */ + @TableField(exist = false) + private String operationTimeStart; + + /** + * 操作结束时间。 + */ + @TableField(exist = false) + private String operationTimeEnd; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/model/constant/SysOperationLogType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/model/constant/SysOperationLogType.java new file mode 100644 index 00000000..c0cd36bf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/model/constant/SysOperationLogType.java @@ -0,0 +1,154 @@ +package com.orangeforms.common.log.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 操作日志类型常量字典对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class SysOperationLogType { + + /** + * 其他。 + */ + public static final int OTHER = -1; + /** + * 登录。 + */ + public static final int LOGIN = 0; + /** + * 登出。 + */ + public static final int LOGOUT = 5; + /** + * 新增。 + */ + public static final int ADD = 10; + /** + * 修改。 + */ + public static final int UPDATE = 15; + /** + * 删除。 + */ + public static final int DELETE = 20; + /** + * 新增多对多关联。 + */ + public static final int ADD_M2M = 25; + /** + * 移除多对多关联。 + */ + public static final int DELETE_M2M = 30; + /** + * 查询。 + */ + public static final int LIST = 35; + /** + * 分组查询。 + */ + public static final int LIST_WITH_GROUP = 40; + /** + * 导出。 + */ + public static final int EXPORT = 45; + /** + * 上传。 + */ + public static final int UPLOAD = 50; + /** + * 下载。 + */ + public static final int DOWNLOAD = 55; + /** + * 重置缓存。 + */ + public static final int RELOAD_CACHE = 60; + /** + * 发布。 + */ + public static final int PUBLISH = 65; + /** + * 取消发布。 + */ + public static final int UNPUBLISH = 70; + /** + * 暂停。 + */ + public static final int SUSPEND = 75; + /** + * 恢复。 + */ + public static final int RESUME = 80; + /** + * 启动流程。 + */ + public static final int START_FLOW = 100; + /** + * 停止流程。 + */ + public static final int STOP_FLOW = 105; + /** + * 删除流程。 + */ + public static final int DELETE_FLOW = 110; + /** + * 取消流程。 + */ + public static final int CANCEL_FLOW = 115; + /** + * 提交任务。 + */ + public static final int SUBMIT_TASK = 120; + /** + * 催办任务。 + */ + public static final int REMIND_TASK = 125; + + private static final Map DICT_MAP = new HashMap<>(15); + static { + DICT_MAP.put(OTHER, "其他"); + DICT_MAP.put(LOGIN, "登录"); + DICT_MAP.put(LOGOUT, "登出"); + DICT_MAP.put(ADD, "新增"); + DICT_MAP.put(UPDATE, "修改"); + DICT_MAP.put(DELETE, "删除"); + DICT_MAP.put(ADD_M2M, "新增多对多关联"); + DICT_MAP.put(DELETE_M2M, "移除多对多关联"); + DICT_MAP.put(LIST, "查询"); + DICT_MAP.put(LIST_WITH_GROUP, "分组查询"); + DICT_MAP.put(EXPORT, "导出"); + DICT_MAP.put(UPLOAD, "上传"); + DICT_MAP.put(DOWNLOAD, "下载"); + DICT_MAP.put(RELOAD_CACHE, "重置缓存"); + DICT_MAP.put(PUBLISH, "发布"); + DICT_MAP.put(UNPUBLISH, "取消发布"); + DICT_MAP.put(SUSPEND, "暂停"); + DICT_MAP.put(RESUME, "恢复"); + DICT_MAP.put(START_FLOW, "启动流程"); + DICT_MAP.put(STOP_FLOW, "停止流程"); + DICT_MAP.put(DELETE_FLOW, "删除流程"); + DICT_MAP.put(CANCEL_FLOW, "取消流程"); + DICT_MAP.put(SUBMIT_TASK, "提交任务"); + DICT_MAP.put(REMIND_TASK, "催办任务"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private SysOperationLogType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/service/SysOperationLogService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/service/SysOperationLogService.java new file mode 100644 index 00000000..b073a261 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/service/SysOperationLogService.java @@ -0,0 +1,45 @@ +package com.orangeforms.common.log.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.common.log.model.SysOperationLog; + +import java.util.List; + +/** + * 操作日志服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysOperationLogService extends IBaseService { + + /** + * 异步的插入一条新操作日志。 + * + * @param operationLog 操作日志对象。 + */ + void saveNewAsync(SysOperationLog operationLog); + + /** + * 插入一条新操作日志。 + * + * @param operationLog 操作日志对象。 + */ + void saveNew(SysOperationLog operationLog); + + /** + * 批量插入。 + * + * @param sysOperationLogList 操作日志列表。 + */ + void batchSave(List sysOperationLogList); + + /** + * 根据过滤条件和排序规则,查询操作日志。 + * + * @param filter 操作日志的过滤对象。 + * @param orderBy 排序规则。 + * @return 查询列表。 + */ + List getSysOperationLogList(SysOperationLog filter, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/service/impl/SysOperationLogServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/service/impl/SysOperationLogServiceImpl.java new file mode 100644 index 00000000..f989d7c7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/java/com/orangeforms/common/log/service/impl/SysOperationLogServiceImpl.java @@ -0,0 +1,84 @@ +package com.orangeforms.common.log.service.impl; + +import com.orangeforms.common.core.annotation.MyDataSource; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.log.dao.SysOperationLogMapper; +import com.orangeforms.common.log.model.SysOperationLog; +import com.orangeforms.common.log.service.SysOperationLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 操作日志服务实现类。 + * 这里需要重点解释下MyDataSource注解。在单数据源服务中,由于没有DataSourceAspect的切面类,所以该注解不会 + * 有任何作用和影响。然而在多数据源情况下,由于每个服务都有自己的DataSourceType常量对象,表示不同的数据源。 + * 而common-log在公用模块中,不能去依赖业务服务,因此这里给出了一个固定值。我们在业务的DataSourceType中,也要 + * 使用该值ApplicationConstant.OPERATION_LOG_DATASOURCE_TYPE,去关联操作日志所需的数据源配置。 + * + * @author Jerry + * @date 2020-08-08 + */ +@MyDataSource(ApplicationConstant.OPERATION_LOG_DATASOURCE_TYPE) +@Service +public class SysOperationLogServiceImpl extends BaseService implements SysOperationLogService { + + @Autowired + private SysOperationLogMapper sysOperationLogMapper; + + @Override + protected BaseDaoMapper mapper() { + return sysOperationLogMapper; + } + + /** + * 异步插入一条新操作日志。通常用于在橙单中创建的单体工程服务。 + * + * @param operationLog 操作日志对象。 + */ + @Async + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNewAsync(SysOperationLog operationLog) { + sysOperationLogMapper.insert(operationLog); + } + + /** + * 插入一条新操作日志。 + * + * @param operationLog 操作日志对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNew(SysOperationLog operationLog) { + sysOperationLogMapper.insert(operationLog); + } + + /** + * 批量插入。通常用于在橙单中创建的微服务工程服务。 + * + * @param sysOperationLogList 操作日志列表。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void batchSave(List sysOperationLogList) { + sysOperationLogMapper.insertList(sysOperationLogList); + } + + /** + * 根据过滤条件和排序规则,查询操作日志。 + * + * @param filter 操作日志的过滤对象。 + * @param orderBy 排序规则。 + * @return 查询列表。 + */ + @Override + public List getSysOperationLogList(SysOperationLog filter, String orderBy) { + return sysOperationLogMapper.getSysOperationLogList(filter, orderBy); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/resources/META-INF/spring.factories b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..c1551ebc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-log/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.orangeforms.common.log.config.CommonLogAutoConfig \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/common-redis.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/common-redis.iml new file mode 100644 index 00000000..f6020b20 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/common-redis.iml @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/pom.xml new file mode 100644 index 00000000..c0fe169d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/pom.xml @@ -0,0 +1,29 @@ + + + + common + com.orangeforms + 1.0.0 + + 4.0.0 + + common-redis + 1.0.0 + common-redis + jar + + + + com.orangeforms + common-core + 1.0.0 + + + org.redisson + redisson + ${redisson.version} + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisDictionaryCache.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisDictionaryCache.java new file mode 100644 index 00000000..0e12c018 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisDictionaryCache.java @@ -0,0 +1,412 @@ +package com.orangeforms.common.redis.cache; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.cache.DictionaryCache; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.exception.RedisCacheAccessException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RMap; +import org.redisson.api.RedissonClient; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 字典数据Redis缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class RedisDictionaryCache implements DictionaryCache { + + /** + * redisson客户端。 + */ + protected final RedissonClient redissonClient; + /** + * 数据存储对象。 + */ + protected final RMap dataMap; + /** + * 字典值对象类型。 + */ + protected final Class valueClazz; + /** + * 由于大部分场景是读取操作,所以使用读写锁提高并发的伸缩性。 + */ + protected final ReadWriteLock lock; + /** + * 获取字典主键数据的函数对象。 + */ + protected final Function idGetter; + /** + * 超时时长。单位毫秒。 + */ + protected static final long TIMEOUT = 2000L; + + /** + * 当前对象的构造器函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的字典内存缓存对象。 + */ + public static RedisDictionaryCache create( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + return new RedisDictionaryCache<>(redissonClient, dictionaryName, valueClazz, idGetter); + } + + /** + * 构造函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。确保全局唯一。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + */ + public RedisDictionaryCache( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter) { + this.redissonClient = redissonClient; + this.dataMap = redissonClient.getMap(dictionaryName + ApplicationConstant.DICT_CACHE_NAME_SUFFIX); + this.lock = new ReentrantReadWriteLock(); + this.valueClazz = valueClazz; + this.idGetter = idGetter; + } + + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ + @Override + public List getAll() { + Collection dataList; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = dataMap.readAllValues(); + } finally { + // 如果上面的操作时间超过redisson.lockWatchdogTimeout的时长, + // redis会将与该锁关联的键删除,此后调用unlock的时候,就会抛出运行时异常。 + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::getAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + return dataList.stream() + .map(data -> JSON.parseObject(data, valueClazz)) + .collect(Collectors.toCollection(LinkedList::new)); + } + + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ + @Override + public List getInList(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return new LinkedList<>(); + } + Collection dataList; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = dataMap.getAll(keys).values(); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (dataList == null) { + return new LinkedList<>(); + } + return dataList.stream() + .map(data -> JSON.parseObject(data, valueClazz)) + .collect(Collectors.toCollection(LinkedList::new)); + } + + /** + * 从缓存中获取指定的数据。 + * + * @param id 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ + @Override + public V get(K id) { + if (id == null) { + return null; + } + String data; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.get(id); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::get] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (data == null) { + return null; + } + return JSON.parseObject(data, valueClazz); + } + + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ + @Override + public int getCount() { + return dataMap.size(); + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + Map map = dataList.stream() + .collect(Collectors.toMap(idGetter, JSON::toJSONString)); + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.putAll(map, 1000); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::putAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + if (id == null || data == null) { + return; + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.fastPut(id, JSON.toJSONString(data)); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::put] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + Map map = null; + if (CollectionUtils.isNotEmpty(dataList)) { + map = dataList.stream().collect(Collectors.toMap(idGetter, JSON::toJSONString)); + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + // 如果不强制刷新,需要先判断缓存中是否存在数据。 + if (!force && this.getCount() > 0) { + return; + } + dataMap.clear(); + if (map != null) { + dataMap.putAll(map, 1000); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::reload] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + String data; + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = dataMap.remove(id); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidate] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (data == null) { + return null; + } + return JSON.parseObject(data, valueClazz); + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @SuppressWarnings("unchecked") + @Override + public void invalidateSet(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return; + } + Object[] keyArray = keys.toArray(new Object[]{}); + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.fastRemove((K[]) keyArray); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidateSet] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidateAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTenantDictionaryCache.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTenantDictionaryCache.java new file mode 100644 index 00000000..e4f778ab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTenantDictionaryCache.java @@ -0,0 +1,428 @@ +package com.orangeforms.common.redis.cache; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.cache.DictionaryCache; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.exception.RedisCacheAccessException; +import com.orangeforms.common.core.object.TokenData; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RMap; +import org.redisson.api.RedissonClient; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 租户字典数据Redis缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class RedisTenantDictionaryCache implements DictionaryCache { + + /** + * redisson客户端。 + */ + protected final RedissonClient redissonClient; + /** + * 字典名称。 + */ + protected final String dictionaryName; + /** + * 字典值对象类型。 + */ + protected final Class valueClazz; + /** + * 由于大部分场景是读取操作,所以使用读写锁提高并发的伸缩性。 + */ + protected final ReadWriteLock lock; + /** + * 获取字典主键数据的函数对象。 + */ + protected final Function idGetter; + /** + * 超时时长。单位毫秒。 + */ + protected static final long TIMEOUT = 2000L; + + /** + * 当前对象的构造器函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的字典内存缓存对象。 + */ + public static RedisTenantDictionaryCache create( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + return new RedisTenantDictionaryCache<>(redissonClient, dictionaryName, valueClazz, idGetter); + } + + /** + * 构造函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + */ + public RedisTenantDictionaryCache( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter) { + this.redissonClient = redissonClient; + this.lock = new ReentrantReadWriteLock(); + this.dictionaryName = dictionaryName; + this.valueClazz = valueClazz; + this.idGetter = idGetter; + } + + /** + * 获取租户的字典数据Map。 + * + * @return 当前租户的字典数据Map。 + */ + protected RMap getTenantDataMap() { + Long tenantId = TokenData.takeFromRequest().getTenantId(); + StringBuilder s = new StringBuilder(64); + s.append(dictionaryName).append("-") + .append(tenantId).append(ApplicationConstant.TREE_DICT_CACHE_NAME_SUFFIX); + return redissonClient.getMap(s.toString()); + } + + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ + @Override + public List getAll() { + Collection dataList; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = this.getTenantDataMap().readAllValues(); + } finally { + // 如果上面的操作时间超过redisson.lockWatchdogTimeout的时长, + // redis会将与该锁关联的键删除,此后调用unlock的时候,就会抛出运行时异常。 + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::getAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + return dataList.stream() + .map(data -> JSON.parseObject(data, valueClazz)) + .collect(Collectors.toCollection(LinkedList::new)); + } + + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ + @Override + public List getInList(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return new LinkedList<>(); + } + Collection dataList = null; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + Map m = this.getTenantDataMap().getAll(keys); + if (m != null) { + dataList = m.values(); + } + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::getInList] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (dataList == null) { + return new LinkedList<>(); + } + return dataList.stream() + .map(data -> JSON.parseObject(data, valueClazz)) + .collect(Collectors.toCollection(LinkedList::new)); + } + + /** + * 从缓存中获取指定的数据。 + * + * @param id 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ + @Override + public V get(K id) { + if (id == null) { + return null; + } + String data; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + data = this.getTenantDataMap().get(id); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::get] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (data == null) { + return null; + } + return JSON.parseObject(data, valueClazz); + } + + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ + @Override + public int getCount() { + return this.getTenantDataMap().size(); + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + Map map = dataList.stream() + .collect(Collectors.toMap(idGetter, JSON::toJSONString)); + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + this.getTenantDataMap().putAll(map, 1000); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::putAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + if (id == null || data == null) { + return; + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + this.getTenantDataMap().fastPut(id, JSON.toJSONString(data)); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::put] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + Map map = null; + if (CollectionUtils.isNotEmpty(dataList)) { + map = dataList.stream().collect(Collectors.toMap(idGetter, JSON::toJSONString)); + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + // 如果不强制刷新,需要先判断缓存中是否存在数据。 + if (!force && this.getCount() > 0) { + return; + } + RMap tenantDataMap = this.getTenantDataMap(); + tenantDataMap.clear(); + if (map != null) { + tenantDataMap.putAll(map, 1000); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::reload] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + String data = null; + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + this.getTenantDataMap().remove(id); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidate] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (data == null) { + return null; + } + return JSON.parseObject(data, valueClazz); + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @SuppressWarnings("unchecked") + @Override + public void invalidateSet(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return; + } + Object[] keyArray = keys.toArray(new Object[]{}); + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + this.getTenantDataMap().fastRemove((K[]) keyArray); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidateSet] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + this.getTenantDataMap().clear(); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::invalidateAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTenantTreeDictionaryCache.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTenantTreeDictionaryCache.java new file mode 100644 index 00000000..abb08b8e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTenantTreeDictionaryCache.java @@ -0,0 +1,369 @@ +package com.orangeforms.common.redis.cache; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.exception.RedisCacheAccessException; +import com.orangeforms.common.core.object.TokenData; +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Multimap; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RListMultimap; +import org.redisson.api.RMap; +import org.redisson.api.RedissonClient; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 租户树形字典数据Redis缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class RedisTenantTreeDictionaryCache extends RedisTenantDictionaryCache { + + /** + * 获取字典父主键数据的函数对象。 + */ + protected final Function parentIdGetter; + + /** + * 当前对象的构造器函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的树形字典内存缓存对象。 + */ + public static RedisTenantTreeDictionaryCache create( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter, + Function parentIdGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + if (parentIdGetter == null) { + throw new IllegalArgumentException("ParentIdGetter can't be NULL."); + } + return new RedisTenantTreeDictionaryCache<>( + redissonClient, dictionaryName, valueClazz, idGetter, parentIdGetter); + } + + /** + * 构造函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + */ + public RedisTenantTreeDictionaryCache( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter, + Function parentIdGetter) { + super(redissonClient, dictionaryName, valueClazz, idGetter); + this.parentIdGetter = parentIdGetter; + } + + protected RListMultimap getTenantTreeDataMap() { + Long tenantId = TokenData.takeFromRequest().getTenantId(); + StringBuilder s = new StringBuilder(64); + s.append(dictionaryName).append("-") + .append(tenantId).append(ApplicationConstant.TREE_DICT_CACHE_NAME_SUFFIX); + return redissonClient.getListMultimap(s.toString()); + } + + /** + * 获取该父主键的子数据列表。 + * + * @param parentId 父主键Id。如果parentId为null,则返回所有一级节点数据。 + * @return 子数据列表。 + */ + public List getListByParentId(K parentId) { + List dataList; + String exceptionMessage; + Long tenantId = TokenData.takeFromRequest().getTenantId(); + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = this.getTenantTreeDataMap().get(parentId); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::getListByParentId] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + List resultList = new LinkedList<>(); + dataList.forEach(data -> resultList.add(JSON.parseObject(data, valueClazz))); + return resultList; + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + // 锁外执行数据结构组装,降低锁的粒度,提高并发性。 + Map map = dataList.stream() + .collect(Collectors.toMap(idGetter, JSON::toJSONString)); + Multimap treeMap = LinkedListMultimap.create(); + for (V data : dataList) { + treeMap.put(parentIdGetter.apply(data), JSON.toJSONString(data)); + } + Set>> entries = treeMap.asMap().entrySet(); + String exceptionMessage; + Long tenantId = TokenData.takeFromRequest().getTenantId(); + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + this.getTenantDataMap().putAll(map, 1000); + RListMultimap allTenantTreeMap = this.getTenantTreeDataMap(); + for (Map.Entry> entry : entries) { + allTenantTreeMap.removeAll(entry.getKey()); + allTenantTreeMap.putAll(entry.getKey(), entry.getValue()); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::putAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + if (id == null || data == null) { + return; + } + String stringData = JSON.toJSONString(data); + K parentId = parentIdGetter.apply(data); + String exceptionMessage; + Long tenantId = TokenData.takeFromRequest().getTenantId(); + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + RMap tenantDataMap = this.getTenantDataMap(); + String oldData = tenantDataMap.put(id, stringData); + if (oldData != null) { + tenantDataMap.remove(parentId, oldData); + } + getTenantDataMap().put(parentId, stringData); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::put] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 行为等同于接口中的描述。这里之所以重写,是因为不确定redisson的读写锁, + * 是否为可重入锁。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + // 锁外执行数据结构组装,降低锁的粒度,提高并发性。 + Map map = null; + Set>> entries = null; + if (CollectionUtils.isNotEmpty(dataList)) { + map = dataList.stream().collect(Collectors.toMap(idGetter, JSON::toJSONString)); + Multimap treeMap = LinkedListMultimap.create(); + for (V data : dataList) { + treeMap.put(parentIdGetter.apply(data), JSON.toJSONString(data)); + } + entries = treeMap.asMap().entrySet(); + } + String exceptionMessage; + Long tenantId = TokenData.takeFromRequest().getTenantId(); + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + // 如果不强制刷新,需要先判断缓存中是否存在数据。 + if (!force && this.getCount() > 0) { + return; + } + RMap tenantDataMap = this.getTenantDataMap(); + tenantDataMap.clear(); + RListMultimap allTenantTreeMap = this.getTenantTreeDataMap(); + allTenantTreeMap.clear(); + if (map != null) { + tenantDataMap.putAll(map, 1000); + for (Map.Entry> entry : entries) { + allTenantTreeMap.removeAll(entry.getKey()); + allTenantTreeMap.putAll(entry.getKey(), entry.getValue()); + } + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::reload] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + V data = null; + String exceptionMessage; + Long tenantId = TokenData.takeFromRequest().getTenantId(); + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + String stringData = this.getTenantDataMap().remove(id); + if (stringData != null) { + data = JSON.parseObject(stringData, valueClazz); + K parentId = parentIdGetter.apply(data); + this.getTenantTreeDataMap().remove(parentId, stringData); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidate] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + return data; + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @Override + public void invalidateSet(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return; + } + String exceptionMessage; + Long tenantId = TokenData.takeFromRequest().getTenantId(); + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(id -> { + if (id != null) { + String stringData = this.getTenantDataMap().remove(id); + if (stringData != null) { + K parentId = parentIdGetter.apply(JSON.parseObject(stringData, valueClazz)); + this.getTenantTreeDataMap().remove(parentId, stringData); + } + } + }); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidateSet] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + Long tenantId = TokenData.takeFromRequest().getTenantId(); + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + this.getTenantDataMap().clear(); + this.getTenantTreeDataMap().clear(); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidateAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTreeDictionaryCache.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTreeDictionaryCache.java new file mode 100644 index 00000000..d46294cd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedisTreeDictionaryCache.java @@ -0,0 +1,354 @@ +package com.orangeforms.common.redis.cache; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.exception.RedisCacheAccessException; +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Multimap; +import org.apache.commons.collections4.CollectionUtils; +import org.redisson.api.RListMultimap; +import org.redisson.api.RedissonClient; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 树形字典数据Redis缓存对象。 + * + * @param 字典表主键类型。 + * @param 字典表对象类型。 + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class RedisTreeDictionaryCache extends RedisDictionaryCache { + + /** + * 树形数据存储对象。 + */ + private final RListMultimap allTreeMap; + /** + * 获取字典父主键数据的函数对象。 + */ + protected final Function parentIdGetter; + + /** + * 当前对象的构造器函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + * @param 字典主键类型。 + * @param 字典对象类型 + * @return 实例化后的树形字典内存缓存对象。 + */ + public static RedisTreeDictionaryCache create( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter, + Function parentIdGetter) { + if (idGetter == null) { + throw new IllegalArgumentException("IdGetter can't be NULL."); + } + if (parentIdGetter == null) { + throw new IllegalArgumentException("ParentIdGetter can't be NULL."); + } + return new RedisTreeDictionaryCache<>( + redissonClient, dictionaryName, valueClazz, idGetter, parentIdGetter); + } + + /** + * 构造函数。 + * + * @param redissonClient Redisson的客户端对象。 + * @param dictionaryName 字典表的名称。等同于redis hash对象的key。 + * @param valueClazz 值对象的Class对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + */ + public RedisTreeDictionaryCache( + RedissonClient redissonClient, + String dictionaryName, + Class valueClazz, + Function idGetter, + Function parentIdGetter) { + super(redissonClient, dictionaryName, valueClazz, idGetter); + this.allTreeMap = redissonClient.getListMultimap( + dictionaryName + ApplicationConstant.TREE_DICT_CACHE_NAME_SUFFIX); + this.parentIdGetter = parentIdGetter; + } + + /** + * 获取该父主键的子数据列表。 + * + * @param parentId 父主键Id。如果parentId为null,则返回所有一级节点数据。 + * @return 子数据列表。 + */ + public List getListByParentId(K parentId) { + List dataList; + String exceptionMessage; + try { + if (lock.readLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataList = allTreeMap.get(parentId); + } finally { + lock.readLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::getListByParentId] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + List resultList = new LinkedList<>(); + dataList.forEach(data -> resultList.add(JSON.parseObject(data, valueClazz))); + return resultList; + } + + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ + @Override + public void putAll(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + // 锁外执行数据结构组装,降低锁的粒度,提高并发性。 + Map map = dataList.stream() + .collect(Collectors.toMap(idGetter, JSON::toJSONString)); + Multimap treeMap = LinkedListMultimap.create(); + for (V data : dataList) { + treeMap.put(parentIdGetter.apply(data), JSON.toJSONString(data)); + } + Set>> entries = treeMap.asMap().entrySet(); + String exceptionMessage; + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.putAll(map, 1000); + for (Map.Entry> entry : entries) { + allTreeMap.removeAll(entry.getKey()); + allTreeMap.putAll(entry.getKey(), entry.getValue()); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::putAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ + @Override + public void put(K id, V data) { + if (id == null || data == null) { + return; + } + String stringData = JSON.toJSONString(data); + K parentId = parentIdGetter.apply(data); + String exceptionMessage; + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + String oldData = dataMap.put(id, stringData); + if (oldData != null) { + allTreeMap.remove(parentId, oldData); + } + allTreeMap.put(parentId, stringData); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::put] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 行为等同于接口中的描述。这里之所以重写,是因为不确定redisson的读写锁, + * 是否为可重入锁。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ + @Override + public void reload(List dataList, boolean force) { + // 锁外执行数据结构组装,降低锁的粒度,提高并发性。 + Map map = null; + Set>> entries = null; + if (CollectionUtils.isNotEmpty(dataList)) { + map = dataList.stream().collect(Collectors.toMap(idGetter, JSON::toJSONString)); + Multimap treeMap = LinkedListMultimap.create(); + for (V data : dataList) { + treeMap.put(parentIdGetter.apply(data), JSON.toJSONString(data)); + } + entries = treeMap.asMap().entrySet(); + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + // 如果不强制刷新,需要先判断缓存中是否存在数据。 + if (!force && this.getCount() > 0) { + return; + } + dataMap.clear(); + allTreeMap.clear(); + if (map != null) { + dataMap.putAll(map, 1000); + for (Map.Entry> entry : entries) { + allTreeMap.removeAll(entry.getKey()); + allTreeMap.putAll(entry.getKey(), entry.getValue()); + } + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisDictionaryCache::reload] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ + @Override + public V invalidate(K id) { + if (id == null) { + return null; + } + V data = null; + String exceptionMessage; + try { + if (this.lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + String stringData = dataMap.remove(id); + if (stringData != null) { + data = JSON.parseObject(stringData, valueClazz); + K parentId = parentIdGetter.apply(data); + allTreeMap.remove(parentId, stringData); + } + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidate] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + return data; + } + + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ + @Override + public void invalidateSet(Set keys) { + if (CollectionUtils.isEmpty(keys)) { + return; + } + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + keys.forEach(id -> { + if (id != null) { + String stringData = dataMap.remove(id); + if (stringData != null) { + K parentId = parentIdGetter.apply(JSON.parseObject(stringData, valueClazz)); + allTreeMap.remove(parentId, stringData); + } + } + }); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidateSet] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } + + /** + * 清空缓存。 + */ + @Override + public void invalidateAll() { + String exceptionMessage; + try { + if (lock.writeLock().tryLock(TIMEOUT, TimeUnit.MILLISECONDS)) { + try { + dataMap.clear(); + allTreeMap.clear(); + } finally { + lock.writeLock().unlock(); + } + } else { + throw new TimeoutException(); + } + } catch (Exception e) { + exceptionMessage = String.format( + "LOCK Operation of [RedisTreeDictionaryCache::invalidateAll] encountered EXCEPTION [%s] for DICT [%s].", + e.getClass().getSimpleName(), valueClazz.getSimpleName()); + log.warn(exceptionMessage); + throw new RedisCacheAccessException(exceptionMessage, e); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedissonCacheConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedissonCacheConfig.java new file mode 100644 index 00000000..84c3828c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/RedissonCacheConfig.java @@ -0,0 +1,67 @@ +package com.orangeforms.common.redis.cache; + +import com.google.common.collect.Maps; +import org.redisson.api.RedissonClient; +import org.redisson.spring.cache.CacheConfig; +import org.redisson.spring.cache.RedissonSpringCacheManager; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + +/** + * 使用Redisson作为Redis的分布式缓存库。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +@EnableCaching +public class RedissonCacheConfig { + + private static final int DEFAULT_TTL = 3600000; + + /** + * 定义cache名称、超时时长(毫秒)。 + */ + public enum CacheEnum { + /** + * session下上传文件名的缓存(时间是24小时)。 + */ + UPLOAD_FILENAME_CACHE(86400000), + /** + * 缺省全局缓存(时间是24小时)。 + */ + GLOBAL_CACHE(86400000); + + /** + * 缓存的时长(单位:毫秒) + */ + private int ttl = DEFAULT_TTL; + + CacheEnum() { + } + + CacheEnum(int ttl) { + this.ttl = ttl; + } + + public int getTtl() { + return ttl; + } + } + + /** + * 初始化缓存配置。 + */ + @Bean + CacheManager cacheManager(RedissonClient redissonClient) { + Map config = Maps.newHashMap(); + for (CacheEnum c : CacheEnum.values()) { + config.put(c.name(), new CacheConfig(c.getTtl(), 0)); + } + return new RedissonSpringCacheManager(redissonClient, config); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/SessionCacheHelper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/SessionCacheHelper.java new file mode 100644 index 00000000..b2198ecf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/cache/SessionCacheHelper.java @@ -0,0 +1,74 @@ +package com.orangeforms.common.redis.cache; + +import com.orangeforms.common.core.object.TokenData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.stereotype.Component; + +import java.util.HashSet; +import java.util.Set; + +/** + * Session数据缓存辅助类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@SuppressWarnings("unchecked") +@Component +public class SessionCacheHelper { + + @Autowired + private CacheManager cacheManager; + + /** + * 缓存当前session内,上传过的文件名。 + * + * @param filename 通常是本地存储的文件名,而不是上传时的原始文件名。 + */ + public void putSessionUploadFile(String filename) { + if (filename != null) { + Set sessionUploadFileSet = null; + Cache cache = cacheManager.getCache(RedissonCacheConfig.CacheEnum.UPLOAD_FILENAME_CACHE.name()); + Cache.ValueWrapper valueWrapper = cache.get(TokenData.takeFromRequest().getSessionId()); + if (valueWrapper != null) { + sessionUploadFileSet = (Set) valueWrapper.get(); + } + if (sessionUploadFileSet == null) { + sessionUploadFileSet = new HashSet<>(); + } + sessionUploadFileSet.add(filename); + cache.put(TokenData.takeFromRequest().getSessionId(), sessionUploadFileSet); + } + } + + /** + * 判断参数中的文件名,是否有当前session上传。 + * + * @param filename 通常是本地存储的文件名,而不是上传时的原始文件名。 + * @return true表示该文件是由当前session上传并存储在本地的,否则false。 + */ + public boolean existSessionUploadFile(String filename) { + if (filename == null) { + return false; + } + Cache cache = cacheManager.getCache(RedissonCacheConfig.CacheEnum.UPLOAD_FILENAME_CACHE.name()); + Cache.ValueWrapper valueWrapper = cache.get(TokenData.takeFromRequest().getSessionId()); + if (valueWrapper == null) { + return false; + } + return ((Set) valueWrapper.get()).contains(filename); + } + + /** + * 清除当前session的所有缓存数据。 + * + * @param sessionId 当前会话的SessionId。 + */ + public void removeAllSessionCache(String sessionId) { + for (RedissonCacheConfig.CacheEnum c : RedissonCacheConfig.CacheEnum.values()) { + cacheManager.getCache(c.name()).evict(sessionId); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/config/RedissonConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/config/RedissonConfig.java new file mode 100644 index 00000000..98151868 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/java/com/orangeforms/common/redis/config/RedissonConfig.java @@ -0,0 +1,105 @@ +package com.orangeforms.common.redis.config; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import com.orangeforms.common.core.exception.InvalidRedisModeException; +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Redisson配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +@ConditionalOnProperty(name = "redis.redisson.enabled", havingValue = "true") +public class RedissonConfig { + + @Value("${redis.redisson.lockWatchdogTimeout}") + private Integer lockWatchdogTimeout; + + @Value("${redis.redisson.mode}") + private String mode; + + /** + * 仅仅用于sentinel模式。 + */ + @Value("${redis.redisson.masterName:}") + private String masterName; + + @Value("${redis.redisson.address}") + private String address; + + @Value("${redis.redisson.timeout}") + private Integer timeout; + + @Value("${redis.redisson.password:}") + private String password; + + @Value("${redis.redisson.pool.poolSize}") + private Integer poolSize; + + @Value("${redis.redisson.pool.minIdle}") + private Integer minIdle; + + @Bean + public RedissonClient redissonClient() { + if (StrUtil.isBlank(password)) { + password = null; + } + Config config = new Config(); + if ("single".equals(mode)) { + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useSingleServer() + .setPassword(password) + .setAddress(address) + .setConnectionPoolSize(poolSize) + .setConnectionMinimumIdleSize(minIdle) + .setConnectTimeout(timeout); + } else if ("cluster".equals(mode)) { + String[] clusterAddresses = StrUtil.splitToArray(address, ','); + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useClusterServers() + .setPassword(password) + .addNodeAddress(clusterAddresses) + .setConnectTimeout(timeout) + .setMasterConnectionPoolSize(poolSize) + .setMasterConnectionMinimumIdleSize(minIdle); + } else if ("sentinel".equals(mode)) { + String[] sentinelAddresses = StrUtil.splitToArray(address, ','); + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useSentinelServers() + .setPassword(password) + .setMasterName(masterName) + .addSentinelAddress(sentinelAddresses) + .setConnectTimeout(timeout) + .setMasterConnectionPoolSize(poolSize) + .setMasterConnectionMinimumIdleSize(minIdle); + } else if ("master-slave".equals(mode)) { + String[] masterSlaveAddresses = StrUtil.splitToArray(address, ','); + if (masterSlaveAddresses.length == 1) { + throw new IllegalArgumentException( + "redis.redisson.address MUST have multiple redis addresses for master-slave mode."); + } + String[] slaveAddresses = new String[masterSlaveAddresses.length - 1]; + ArrayUtil.copy(masterSlaveAddresses, 1, slaveAddresses, 0, slaveAddresses.length); + config.setLockWatchdogTimeout(lockWatchdogTimeout) + .useMasterSlaveServers() + .setPassword(password) + .setMasterAddress(masterSlaveAddresses[0]) + .addSlaveAddress(slaveAddresses) + .setConnectTimeout(timeout) + .setMasterConnectionPoolSize(poolSize) + .setMasterConnectionMinimumIdleSize(minIdle); + } else { + throw new InvalidRedisModeException(mode); + } + return Redisson.create(config); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/resources/META-INF/spring.factories b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..f24e3d92 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-redis/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.orangeforms.common.redis.config.RedissonConfig \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/common-sequence.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/common-sequence.iml new file mode 100644 index 00000000..e4f46f8f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/common-sequence.iml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/pom.xml new file mode 100644 index 00000000..36502af3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/pom.xml @@ -0,0 +1,24 @@ + + + + common + com.orangeforms + 1.0.0 + + 4.0.0 + + common-sequence + 1.0.0 + common-sequence + jar + + + + com.orangeforms + common-core + 1.0.0 + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/config/IdGeneratorAutoConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/config/IdGeneratorAutoConfig.java new file mode 100644 index 00000000..fa853f8d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/config/IdGeneratorAutoConfig.java @@ -0,0 +1,14 @@ +package com.orangeforms.common.sequence.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * common-sequence模块的自动配置引导类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EnableConfigurationProperties({IdGeneratorProperties.class}) +public class IdGeneratorAutoConfig { + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/config/IdGeneratorProperties.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/config/IdGeneratorProperties.java new file mode 100644 index 00000000..3d55b85b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/config/IdGeneratorProperties.java @@ -0,0 +1,39 @@ +package com.orangeforms.common.sequence.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * common-sequence模块的配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@ConfigurationProperties(prefix = "sequence") +public class IdGeneratorProperties { + + /** + * 是否使用基于美团Leaf的分布式Id生成器。 + */ + private Boolean advanceIdGenerator = false; + /** + * 基础版生成器所需的WorkNode参数值。仅当advanceIdGenerator为false时生效。 + */ + private Integer snowflakeWorkNode = 1; + /** + * zk的地址。多个ip和端口之间逗号分隔。仅当advanceIdGenerator为true时生效。 + * 如:10.1.1.2:2181;10.1.1.3:2181。 + */ + private String zkAddress; + /** + * 用于识别同一主机(ip相同)不同服务的端口号。与本机的ip一起构成zk中标识不同服务实例的key值。 + * 仅当advanceIdGenerator为true时生效。 + */ + private Integer idPort; + /** + * zk中生成WorkNode的路径。不同的业务可以使用不同的路径,以免冲突。 + * 仅当advanceIdGenerator为true时生效。 + */ + private String zkPath; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/BasicIdGenerator.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/BasicIdGenerator.java new file mode 100644 index 00000000..cf5cd96f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/BasicIdGenerator.java @@ -0,0 +1,48 @@ +package com.orangeforms.common.sequence.generator; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +/** + * 基础版snowflake计算工具类。 + * 和SnowflakeIdGenerator相比,相同点是均为基于Snowflake算法的生成器。不同点在于当前类的 + * WorkNodeId是通过配置文件静态指定的。而SnowflakeIdGenerator的WorkNodeId是由zk生成的。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class BasicIdGenerator implements MyIdGenerator { + + private final Snowflake snowflake; + + /** + * 构造函数。 + * + * @param workNode 工作节点。 + */ + public BasicIdGenerator(Integer workNode) { + snowflake = IdUtil.createSnowflake(workNode, 0); + } + + /** + * 获取基于Snowflake算法的数值型Id。 + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + @Override + public long nextLongId() { + return this.snowflake.nextId(); + } + + /** + * 获取基于Snowflake算法的字符串Id。 + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + @Override + public String nextStringId() { + return this.snowflake.nextIdStr(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/MyIdGenerator.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/MyIdGenerator.java new file mode 100644 index 00000000..89b4562a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/MyIdGenerator.java @@ -0,0 +1,24 @@ +package com.orangeforms.common.sequence.generator; + +/** + * 分布式Id生成器的统一接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface MyIdGenerator { + + /** + * 获取数值型分布式Id。 + * + * @return 生成后的Id。 + */ + long nextLongId(); + + /** + * 获取字符型分布式Id。 + * + * @return 生成后的Id。 + */ + String nextStringId(); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/SnowflakeIdGenerator.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/SnowflakeIdGenerator.java new file mode 100644 index 00000000..17e72ed9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/SnowflakeIdGenerator.java @@ -0,0 +1,126 @@ +package com.orangeforms.common.sequence.generator; + +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.RandomUtil; +import com.orangeforms.common.core.util.IpUtil; +import com.google.common.base.Preconditions; +import lombok.extern.slf4j.Slf4j; + +import java.util.Random; + +/** + * Snowflake Id生成器。该实现完全copy美团的leaf。 + * + * @author MeiTuan.Team + * @date 2020-08-08 + */ +@Slf4j +public class SnowflakeIdGenerator implements MyIdGenerator { + private static final long TWEPOCH = 1288834974657L; + private static final long WORKER_ID_BITS = 10L; + /** + * 最大能够分配的workerid =1023 + */ + private static final long MAX_WORKER_ID = ~(-1L << WORKER_ID_BITS); + private static final long SEQUENCE_BITS = 12L; + private static final long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS; + private static final long SEQUENCE_MASK = ~(-1L << SEQUENCE_BITS); + private final long workerId; + private long sequence = 0L; + private long lastTimestamp = -1L; + private static final Random RANDOM = RandomUtil.getRandom(); + + /** + * @param zkAddress zk地址 + * @param idPort 用于识别相同ip内不同服务的端口号。仅作为标识用,不会对该端口进行监听。 + */ + public SnowflakeIdGenerator(String zkAddress, int idPort, String zkPath) { + Preconditions.checkArgument( + timeGen() > TWEPOCH, "Snowflake not support twepoch greater than currentTime"); + final String ip = IpUtil.getFirstLocalIpAddress(); + SnowflakeZookeeperHolder holder = + new SnowflakeZookeeperHolder(ip, String.valueOf(idPort), zkAddress, zkPath); + log.info("twepoch:{} ,ip:{} ,zkAddress:{} port:{}", TWEPOCH, ip, zkAddress, idPort); + boolean initFlag = holder.init(); + Preconditions.checkArgument(initFlag, "Snowflake Id Gen is not init ok"); + workerId = holder.getWorkerId(); + log.info("START SUCCESS USE ZK WORKERID-{}", workerId); + Preconditions.checkArgument( + workerId >= 0 && workerId <= MAX_WORKER_ID, "WorkerId must (>= 0 and <=> 1023"); + } + + /** + * 获取字符型分布式Id。 + * + * @return 生成后的Id。 + */ + @Override + public synchronized String nextStringId() { + return String.valueOf(this.nextLongId()); + } + + /** + * 获取数值型分布式Id。 + * + * @return 生成后的Id。 + */ + @Override + public synchronized long nextLongId() { + long timestamp = timeGen(); + int maxGap = 10; + if (timestamp < lastTimestamp) { + long offset = lastTimestamp - timestamp; + if (offset <= maxGap) { + if (!ThreadUtil.sleep(offset << 1)) { + log.error("Thread is interrupted while synchronizing to LastTimeStamp."); + throw new SnowflakeGenerateException( + "Thread is interrupted while synchronizing to LastTimeStamp.."); + } + timestamp = timeGen(); + if (timestamp < lastTimestamp) { + log.error("CurrentTime is less than LastTimeStamp too much (> 10ms) after synchronized."); + throw new SnowflakeGenerateException( + "CurrentTime is less than LastTimeStamp too much (> 10ms) after synchronized."); + } + } else { + log.error("CurrentTime is less than LastTimeStamp too much (> 10ms)."); + throw new SnowflakeGenerateException( + "CurrentTime is less than LastTimeStamp too much (> 10ms)."); + } + } + if (lastTimestamp == timestamp) { + sequence = (sequence + 1) & SEQUENCE_MASK; + if (sequence == 0) { + // seq 为0的时候表示是下一毫秒时间开始对seq做随机 + sequence = RANDOM.nextInt(100); + timestamp = tilNextMillis(lastTimestamp); + } + } else { + // 如果是新的ms开始 + sequence = RANDOM.nextInt(100); + } + lastTimestamp = timestamp; + return ((timestamp - TWEPOCH) << TIMESTAMP_LEFT_SHIFT) | (workerId << SEQUENCE_BITS) | sequence; + } + + protected long tilNextMillis(long lastTimestamp) { + long timestamp = timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = timeGen(); + } + return timestamp; + } + + protected long timeGen() { + return System.currentTimeMillis(); + } + + public static class SnowflakeGenerateException extends RuntimeException { + public SnowflakeGenerateException(String msg, Throwable e) { + super(msg, e); + } + public SnowflakeGenerateException(String msg) { + super(msg); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/SnowflakeZookeeperHolder.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/SnowflakeZookeeperHolder.java new file mode 100644 index 00000000..e3934057 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/generator/SnowflakeZookeeperHolder.java @@ -0,0 +1,231 @@ +package com.orangeforms.common.sequence.generator; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.apache.curator.RetryPolicy; +import org.apache.curator.framework.CuratorFramework; +import org.apache.curator.framework.CuratorFrameworkFactory; +import org.apache.curator.retry.RetryUntilElapsed; +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.data.Stat; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Snowflake Id生成器所依赖的zk工具类。该实现完全copy美团的leaf。 + * + * @author MeiTuan.Team + * @date 2020-08-08 + */ +@Slf4j +@Data +public class SnowflakeZookeeperHolder { + private static final int CONNECTION_TIMEOUT_MS = 10000; + private static final int SESSION_TIMEOUT_MS = 6000; + private String zkAddressNode = null; + private String listenAddress; + private int workerId; + private String ip; + private String port; + private String connectionString; + private String pathForever; + private final String cachePath; + private long lastUpdateTime; + + public SnowflakeZookeeperHolder(String ip, String port, String connectionString, String zkPath) { + this.ip = ip; + this.port = port; + this.listenAddress = ip + ":" + port; + this.connectionString = connectionString; + this.pathForever = "/snowflake/" + zkPath + "/forever"; + this.cachePath = System.getProperty("java.io.tmpdir") + + File.separator + zkPath + "/leafconf/{port}/workerID.properties"; + } + + /** + * 初始化zk中的持久化SEQUENTIAL节点数据。如果不存在就创建新的,存在则引用原有的。 + * + * @return true初始化成功,否则失败。 + */ + public boolean init() { + try { + CuratorFramework curator = createWithOptions(connectionString, + new RetryUntilElapsed(1000, 4)); + curator.start(); + Stat stat = curator.checkExists().forPath(pathForever); + if (stat == null) { + // 不存在根节点,机器第一次启动,创建/snowflake/ip:port-000000000,并上传数据 + zkAddressNode = createNode(curator); + // worker id 默认是0 + updateLocalWorkerId(workerId); + // 定时上报本机时间给forever节点 + scheduledUploadData(curator, zkAddressNode); + return true; + } else { + // ip:port->00001 + Map nodeMap = Maps.newHashMap(); + // ip:port->(ipport-000001) + Map realNode = Maps.newHashMap(); + // 存在根节点,先检查是否有属于自己的根节点 + List keys = curator.getChildren().forPath(pathForever); + for (String key : keys) { + String[] nodeKey = key.split("-"); + realNode.put(nodeKey[0], key); + nodeMap.put(nodeKey[0], Integer.parseInt(nodeKey[1])); + } + Integer workerid = nodeMap.get(listenAddress); + if (workerid != null) { + // 有自己的节点,zk_AddressNode=ip:port + zkAddressNode = pathForever + "/" + realNode.get(listenAddress); + // 启动worder时使用会使用 + workerId = workerid; + if (!checkInitTimeStamp(curator, zkAddressNode)) { + throw new CheckLastTimeException( + "Init timestamp check error,forever node timestamp greater than this node time"); + } + } else { + // 表示新启动的节点,创建持久节点 ,不用check时间 + String newNode = createNode(curator); + zkAddressNode = newNode; + String[] nodeKey = newNode.split("-"); + workerId = Integer.parseInt(nodeKey[1]); + } + doService(curator); + updateLocalWorkerId(workerId); + } + } catch (Exception e) { + log.error("Start node ERROR", e); + try { + Properties properties = new Properties(); + properties.load(new FileInputStream(new File(cachePath.replace("{port}", port + "")))); + workerId = Integer.parseInt(properties.getProperty("workerId")); + log.warn("START FAILED ,use local node file properties workerID-{}", workerId); + } catch (Exception e1) { + log.error("Read file error ", e1); + return false; + } + } + return true; + } + + private void doService(CuratorFramework curator) { + scheduledUploadData(curator, zkAddressNode); + } + + private void scheduledUploadData(final CuratorFramework curator, final String zkAddressNode) { + ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, + new BasicThreadFactory.Builder().namingPattern("schedule-upload-time-%d").daemon(true).build()); + executorService.scheduleWithFixedDelay(() -> + updateNewData(curator, zkAddressNode), 1, 3, TimeUnit.SECONDS); + } + + private boolean checkInitTimeStamp(CuratorFramework curator, String zkAddressNode) throws Exception { + byte[] bytes = curator.getData().forPath(zkAddressNode); + ObjectMapper mapper = new ObjectMapper(); + Endpoint endPoint = mapper.readValue(new String(bytes), Endpoint.class); + // 该节点的时间不能小于最后一次上报的时间 + return endPoint.getTimestamp() <= System.currentTimeMillis(); + } + + private String createNode(CuratorFramework curator) throws Exception { + try { + return curator.create() + .creatingParentsIfNeeded() + .withMode(CreateMode.PERSISTENT_SEQUENTIAL) + .forPath(pathForever + "/" + listenAddress + "-", buildData().getBytes()); + } catch (Exception e) { + log.error("create node error msg {} ", e.getMessage()); + throw e; + } + } + + private void updateNewData(CuratorFramework curator, String path) { + try { + if (System.currentTimeMillis() < lastUpdateTime) { + return; + } + curator.setData().forPath(path, buildData().getBytes()); + lastUpdateTime = System.currentTimeMillis(); + } catch (Exception e) { + log.info("update init data error path is {} error is {}", path, e); + } + } + + private String buildData() throws JsonProcessingException { + Endpoint endpoint = new Endpoint(ip, port, System.currentTimeMillis()); + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(endpoint); + } + + private void updateLocalWorkerId(int workId) { + File leafConfFile = new File(cachePath.replace("{port}", port)); + boolean exists = leafConfFile.exists(); + log.info("file exists status is {}", exists); + if (exists) { + try { + FileUtils.writeStringToFile( + leafConfFile, "workId=" + workId, StandardCharsets.UTF_8, false); + log.info("update file cache workId is {}", workId); + } catch (IOException e) { + log.error("update file cache error ", e); + } + } else { + // 不存在文件,父目录页肯定不存在 + try { + boolean mkdirs = leafConfFile.getParentFile().mkdirs(); + log.info("init local file cache create parent dis status is {}, worker id is {}", mkdirs, workId); + if (mkdirs) { + if (leafConfFile.createNewFile()) { + FileUtils.writeStringToFile( + leafConfFile, "workId=" + workId, StandardCharsets.UTF_8, false); + log.info("local file cache workId is {}", workId); + } + } else { + log.warn("create parent dir error==="); + } + } catch (IOException e) { + log.warn("craete workId conf file error", e); + } + } + } + + private CuratorFramework createWithOptions(String connectionString, RetryPolicy retryPolicy) { + return CuratorFrameworkFactory.builder().connectString(connectionString) + .retryPolicy(retryPolicy) + .connectionTimeoutMs(CONNECTION_TIMEOUT_MS) + .sessionTimeoutMs(SESSION_TIMEOUT_MS) + .build(); + } + + /** + * 上报数据结构 + */ + @Data + @AllArgsConstructor + @NoArgsConstructor + static class Endpoint { + private String ip; + private String port; + private long timestamp; + } + + public static class CheckLastTimeException extends RuntimeException { + public CheckLastTimeException(String msg) { + super(msg); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/wrapper/IdGeneratorWrapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/wrapper/IdGeneratorWrapper.java new file mode 100644 index 00000000..872f7d9b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/java/com/orangeforms/common/sequence/wrapper/IdGeneratorWrapper.java @@ -0,0 +1,57 @@ +package com.orangeforms.common.sequence.wrapper; + +import com.orangeforms.common.sequence.config.IdGeneratorProperties; +import com.orangeforms.common.sequence.generator.BasicIdGenerator; +import com.orangeforms.common.sequence.generator.MyIdGenerator; +import com.orangeforms.common.sequence.generator.SnowflakeIdGenerator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 分布式Id生成器的封装类。该对象可根据配置选择不同的生成器实现类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Component +public class IdGeneratorWrapper { + + @Autowired + private IdGeneratorProperties properties; + /** + * Id生成器接口对象。 + */ + private MyIdGenerator idGenerator; + + @PostConstruct + public void init() { + if (properties.getAdvanceIdGenerator()) { + idGenerator = new SnowflakeIdGenerator( + properties.getZkAddress(), properties.getIdPort(), properties.getZkPath()); + } else { + idGenerator = new BasicIdGenerator(properties.getSnowflakeWorkNode()); + } + } + + /** + * 获取基于Snowflake算法的数值型Id。 + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + public long nextLongId() { + return idGenerator.nextLongId(); + } + + /** + * 获取基于Snowflake算法的字符串Id。 + * 由于底层实现为synchronized方法,因此计算过程串行化,且线程安全。 + * + * @return 计算后的全局唯一Id。 + */ + public String nextStringId() { + return idGenerator.nextStringId(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/resources/META-INF/spring.factories b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..dd267e85 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-sequence/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.orangeforms.common.sequence.config.IdGeneratorAutoConfig \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/common-swagger.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/common-swagger.iml new file mode 100644 index 00000000..e0a12397 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/common-swagger.iml @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/pom.xml new file mode 100644 index 00000000..8229ebbc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/pom.xml @@ -0,0 +1,39 @@ + + + + common + com.orangeforms + 1.0.0 + + 4.0.0 + + common-swagger + 1.0.0 + common-swagger + jar + + + + com.github.xiaoymin + knife4j-micro-spring-boot-starter + ${knife4j.version} + + + org.springframework.plugin + spring-plugin-core + + + org.springframework.plugin + spring-plugin-metadata + + + + + com.orangeforms + common-core + 1.0.0 + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/config/SwaggerAutoConfiguration.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/config/SwaggerAutoConfiguration.java new file mode 100644 index 00000000..9029e4b2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/config/SwaggerAutoConfiguration.java @@ -0,0 +1,44 @@ +package com.orangeforms.common.swagger.config; + +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; + +/** + * 自动加载bean的配置对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@EnableSwagger2WebMvc +@EnableKnife4j +@EnableConfigurationProperties(SwaggerProperties.class) +@ConditionalOnProperty(prefix = "swagger", name = "enabled") +public class SwaggerAutoConfiguration { + + @Bean + public Docket rotbotDocket(SwaggerProperties properties) { + return new Docket(DocumentationType.SWAGGER_2) + .ignoredParameterTypes(MyRequestBody.class) + .apiInfo(apiInfo(properties)) + .select() + .apis(RequestHandlerSelectors.basePackage(properties.getBasePackage())) + .paths(PathSelectors.any()).build(); + } + + private ApiInfo apiInfo(SwaggerProperties properties) { + return new ApiInfoBuilder() + .title(properties.getTitle()) + .description(properties.getDescription()) + .version(properties.getVersion()).build(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/config/SwaggerProperties.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/config/SwaggerProperties.java new file mode 100644 index 00000000..d15b3792 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/config/SwaggerProperties.java @@ -0,0 +1,45 @@ +package com.orangeforms.common.swagger.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 配置参数对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@ConfigurationProperties("swagger") +public class SwaggerProperties { + + /** + * 是否开启Swagger。 + */ + private Boolean enabled; + + /** + * Swagger解析的基础包路径。 + **/ + private String basePackage = ""; + + /** + * Swagger解析的服务包路径。 + **/ + private String serviceBasePackage = ""; + + /** + * ApiInfo中的标题。 + **/ + private String title = ""; + + /** + * ApiInfo中的描述信息。 + **/ + private String description = ""; + + /** + * ApiInfo中的版本信息。 + **/ + private String version = ""; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/ByteBuddyUtil.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/ByteBuddyUtil.java new file mode 100644 index 00000000..f1bf3522 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/ByteBuddyUtil.java @@ -0,0 +1,85 @@ +package com.orangeforms.common.swagger.plugin; + +import cn.hutool.core.lang.Assert; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.github.xiaoymin.knife4j.core.conf.Consts; +import javassist.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import springfox.documentation.service.ResolvedMethodParameter; + +import java.util.List; + +/** + * 通过字节码方式动态创建接口参数封装对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +class ByteBuddyUtil { + private static final ClassPool CLASS_POOL = ClassPool.getDefault(); + + static Class createDynamicModelClass(String name, List parameters) { + String clazzName = Consts.BASE_PACKAGE_PREFIX + name; + try { + CtClass tmp = CLASS_POOL.getCtClass(clazzName); + if (tmp != null) { + tmp.detach(); + } + } catch (NotFoundException e) { + // 需要吃掉这个异常。 + } + CtClass ctClass = CLASS_POOL.makeClass(clazzName); + try { + int fieldCount = 0; + for (ResolvedMethodParameter dynamicParameter : parameters) { + // 因为在调用这个方法之前,这些参数都包含MyRequestBody注解。 + MyRequestBody myRequestBody = + dynamicParameter.findAnnotation(MyRequestBody.class).orElse(null); + Assert.notNull(myRequestBody); + String fieldName = dynamicParameter.defaultName().isPresent() + ? dynamicParameter.defaultName().get() : "parameter"; + if (StringUtils.isNotBlank(myRequestBody.value())) { + fieldName = myRequestBody.value(); + } + ctClass.addField(createField(dynamicParameter, fieldName, ctClass)); + fieldCount++; + } + if (fieldCount > 0) { + return ctClass.toClass(); + } + } catch (Throwable e) { + log.error(e.getMessage()); + } + return null; + } + + private static CtField createField(ResolvedMethodParameter parameter, String parameterName, CtClass ctClass) + throws NotFoundException, CannotCompileException { + CtField field = new CtField(getFieldType(parameter.getParameterType().getErasedType()), parameterName, ctClass); + field.setModifiers(Modifier.PUBLIC); + return field; + } + + private static CtClass getFieldType(Class propetyType) { + CtClass fieldType = null; + try { + if (!propetyType.isAssignableFrom(Void.class)) { + fieldType = CLASS_POOL.get(propetyType.getName()); + } else { + fieldType = CLASS_POOL.get(String.class.getName()); + } + } catch (NotFoundException e) { + // 抛异常 + ClassClassPath path = new ClassClassPath(propetyType); + CLASS_POOL.insertClassPath(path); + try { + fieldType = CLASS_POOL.get(propetyType.getName()); + } catch (NotFoundException e1) { + log.error(e1.getMessage(), e1); + } + } + return fieldType; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/DynamicBodyModelPlugin.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/DynamicBodyModelPlugin.java new file mode 100644 index 00000000..d9b98caf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/DynamicBodyModelPlugin.java @@ -0,0 +1,61 @@ +package com.orangeforms.common.swagger.plugin; + +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.fasterxml.classmate.TypeResolver; +import com.google.common.base.CaseFormat; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import springfox.documentation.service.ResolvedMethodParameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.OperationModelsProviderPlugin; +import springfox.documentation.spi.service.contexts.RequestMappingContext; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 生成参数包装类的插件。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Component +@Order(Ordered.HIGHEST_PRECEDENCE + 200) +@ConditionalOnProperty(prefix = "swagger", name = "enabled") +public class DynamicBodyModelPlugin implements OperationModelsProviderPlugin { + + private final TypeResolver typeResolver; + + public DynamicBodyModelPlugin(TypeResolver typeResolver) { + this.typeResolver = typeResolver; + } + + @Override + public void apply(RequestMappingContext context) { + List parameterTypes = context.getParameters(); + if (CollectionUtils.isEmpty(parameterTypes)) { + return; + } + List bodyParameter = parameterTypes.stream() + .filter(p -> p.hasParameterAnnotation(MyRequestBody.class)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(bodyParameter)) { + return; + } + String groupName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, context.getGroupName()); + String clazzName = groupName + StringUtils.capitalize(context.getName()); + Class clazz = ByteBuddyUtil.createDynamicModelClass(clazzName, bodyParameter); + if (clazz != null) { + context.operationModelsBuilder().addInputParam(typeResolver.resolve(clazz)); + } + } + + @Override + public boolean supports(DocumentationType delimiter) { + // 支持2.0版本 + return delimiter == DocumentationType.SWAGGER_2; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/DynamicBodyParameterBuilder.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/DynamicBodyParameterBuilder.java new file mode 100644 index 00000000..97bfac41 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/java/com/orangeforms/common/swagger/plugin/DynamicBodyParameterBuilder.java @@ -0,0 +1,64 @@ +package com.orangeforms.common.swagger.plugin; + +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.google.common.base.CaseFormat; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.Parameter; +import springfox.documentation.service.ResolvedMethodParameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.OperationBuilderPlugin; +import springfox.documentation.spi.service.contexts.OperationContext; +import springfox.documentation.spi.service.contexts.ParameterContext; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 构建操作接口参数对象的插件。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Component +@Order(Ordered.HIGHEST_PRECEDENCE + 102) +@ConditionalOnProperty(prefix = "swagger", name = "enabled") +public class DynamicBodyParameterBuilder implements OperationBuilderPlugin { + + @Override + public void apply(OperationContext context) { + List methodParameters = context.getParameters(); + List parameters = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(methodParameters)) { + List bodyParameter = methodParameters.stream() + .filter(p -> p.hasParameterAnnotation(MyRequestBody.class)).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(bodyParameter)) { + // 构造model + String groupName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, context.getGroupName()); + String clazzName = groupName + StringUtils.capitalize(context.getName()); + ResolvedMethodParameter methodParameter = bodyParameter.get(0); + ParameterContext parameterContext = new ParameterContext(methodParameter, + new ParameterBuilder(), + context.getDocumentationContext(), + context.getGenericsNamingStrategy(), + context); + Parameter parameter = parameterContext.parameterBuilder() + .parameterType("body").modelRef(new ModelRef(clazzName)).name(clazzName).build(); + parameters.add(parameter); + } + } + context.operationBuilder().parameters(parameters); + } + + @Override + public boolean supports(DocumentationType delimiter) { + return delimiter == DocumentationType.SWAGGER_2; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/resources/META-INF/spring.factories b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..cc7814c5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-swagger/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.orangeforms.common.swagger.config.SwaggerAutoConfiguration \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/common-xxljob.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/common-xxljob.iml new file mode 100644 index 00000000..b8d5f21e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/common-xxljob.iml @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/pom.xml new file mode 100644 index 00000000..e8f179da --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/pom.xml @@ -0,0 +1,33 @@ + + + + common + com.orangeforms + 1.0.0 + + 4.0.0 + + common-xxljob + 1.0.0 + common-xxljob + jar + + + 2.2.0 + + + + + com.orangeforms + common-core + 1.0.0 + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/src/main/java/com/orangeforms/common/xxljob/aop/JobHandlerAspect.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/src/main/java/com/orangeforms/common/xxljob/aop/JobHandlerAspect.java new file mode 100644 index 00000000..891ac880 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/src/main/java/com/orangeforms/common/xxljob/aop/JobHandlerAspect.java @@ -0,0 +1,38 @@ +package com.orangeforms.common.xxljob.aop; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * Job处理器的AOP,目前仅仅实现了将拦截后的异常记录到本地日志服务系统,记录后重新抛给xxl-job。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Aspect +@Component +@Order(1) +@Slf4j +public class JobHandlerAspect { + + @Pointcut("execution(public * com.orangeforms.*.handler..*(..))") + public void handlerPointCut() { + // 空注释,sonar要求的。 + } + + @Around("handlerPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + Class clazz = point.getTarget().getClass(); + try { + return point.proceed(); + } catch (Exception e) { + log.error("JobHandler [" + clazz.getSimpleName() + "] throws exception.", e); + throw e; + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/src/main/java/com/orangeforms/common/xxljob/config/XxlJobConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/src/main/java/com/orangeforms/common/xxljob/config/XxlJobConfig.java new file mode 100644 index 00000000..311babeb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common-xxljob/src/main/java/com/orangeforms/common/xxljob/config/XxlJobConfig.java @@ -0,0 +1,45 @@ +package com.orangeforms.common.xxljob.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * xxl-job config + * + * @author xuxueli 2017-04-28 + */ +@Configuration +public class XxlJobConfig { + private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.executor.appname}") + private String appName; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appName); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/common.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common.iml new file mode 100644 index 00000000..f48406e4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/common.iml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/common/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/common/pom.xml new file mode 100644 index 00000000..561784ab --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/common/pom.xml @@ -0,0 +1,23 @@ + + + + com.orangeforms + OrangeMultiDemo + 1.0.0 + + 4.0.0 + + common + pom + + + common-core + common-log + common-datafilter + common-xxljob + common-redis + common-sequence + common-swagger + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/admin-monitor.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/admin-monitor.iml new file mode 100644 index 00000000..b56d665d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/admin-monitor.iml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/pom.xml new file mode 100644 index 00000000..60d22065 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/pom.xml @@ -0,0 +1,52 @@ + + + + com.orangeforms + framework + 1.0.0 + + 4.0.0 + + admin-monitor + 1.0.0 + admin-monitor + jar + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.boot + spring-boot-starter-web + + + de.codecentric + spring-boot-admin-starter-server + + + + + + + de.codecentric + spring-boot-admin-dependencies + ${spring-boot-admin.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/src/main/java/com/orangeforms/adminmonitor/AdminMonitorApplication.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/src/main/java/com/orangeforms/adminmonitor/AdminMonitorApplication.java new file mode 100644 index 00000000..4652d8ea --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/src/main/java/com/orangeforms/adminmonitor/AdminMonitorApplication.java @@ -0,0 +1,22 @@ +package com.orangeforms.adminmonitor; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * 服务指标监控启动类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@SpringBootApplication +@EnableAdminServer +@EnableDiscoveryClient +public class AdminMonitorApplication { + + public static void main(String[] args) { + SpringApplication.run(AdminMonitorApplication.class, args); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/src/main/resources/bootstrap.yml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..67040f87 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/admin-monitor/src/main/resources/bootstrap.yml @@ -0,0 +1,14 @@ +server: + port: 8769 + +spring: + application: + name: admin-monitor + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: localhost:8848 + config: + server-addr: localhost:8848 diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/apidoc-tools.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/apidoc-tools.iml new file mode 100644 index 00000000..f925576e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/apidoc-tools.iml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/pom.xml new file mode 100644 index 00000000..384b3743 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/pom.xml @@ -0,0 +1,29 @@ + + + + framework + com.orangeforms + 1.0.0 + + 4.0.0 + + apidoc-tools + 1.0.0 + apidoc-tools + jar + + + + com.orangeforms + common-core + 1.0.0 + + + com.thoughtworks.qdox + qdox + ${qdox.version} + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/ExportApiApp.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/ExportApiApp.java new file mode 100644 index 00000000..16236cd5 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/ExportApiApp.java @@ -0,0 +1,28 @@ +package com.orangeforms.apidoc.tools; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.apidoc.tools.codeparser.ApiCodeConfig; +import com.orangeforms.apidoc.tools.codeparser.ApiCodeParser; +import com.orangeforms.apidoc.tools.export.ApiPostmanExporter; +import freemarker.template.TemplateException; +import org.springframework.util.StreamUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +public class ExportApiApp { + + public static void main(String[] args) throws IOException, TemplateException { + // 在第一次导出时,需要打开export-api-config.json配置文件, + // 修改其中的工程根目录配置项(projectRootPath),其他配置保持不变即可。 + InputStream in = ExportApiApp.class.getResourceAsStream("/export-api-config.json"); + String jsonData = StreamUtils.copyToString(in, StandardCharsets.UTF_8); + ApiCodeConfig apiCodeConfig = JSON.parseObject(jsonData, ApiCodeConfig.class); + ApiCodeParser apiCodeParser = new ApiCodeParser(apiCodeConfig); + ApiCodeParser.ApiProject project = apiCodeParser.doParse(); + ApiPostmanExporter exporter = new ApiPostmanExporter(); + // 将下面的目录改为实际输出目录。 + exporter.doGenerate(project, "/xxx/Desktop/1.json"); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/ExportDocApp.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/ExportDocApp.java new file mode 100644 index 00000000..06c9613a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/ExportDocApp.java @@ -0,0 +1,28 @@ +package com.orangeforms.apidoc.tools; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.apidoc.tools.codeparser.ApiCodeConfig; +import com.orangeforms.apidoc.tools.codeparser.ApiCodeParser; +import com.orangeforms.apidoc.tools.export.ApiDocExporter; +import freemarker.template.TemplateException; +import org.springframework.util.StreamUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +public class ExportDocApp { + + public static void main(String[] args) throws IOException, TemplateException { + // 在第一次导出时,需要打开export-api-config.json配置文件, + // 修改其中的工程根目录配置项(projectRootPath),其他配置保持不变即可。 + InputStream in = ExportDocApp.class.getResourceAsStream("/export-api-config.json"); + String jsonData = StreamUtils.copyToString(in, StandardCharsets.UTF_8); + ApiCodeConfig apiCodeConfig = JSON.parseObject(jsonData, ApiCodeConfig.class); + ApiCodeParser apiCodeParser = new ApiCodeParser(apiCodeConfig); + ApiCodeParser.ApiProject project = apiCodeParser.doParse(); + ApiDocExporter exporter = new ApiDocExporter(); + // 将下面的目录改为实际输出目录。 + exporter.doGenerate(project, "/xxx/Desktop/2.md"); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/codeparser/ApiCodeConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/codeparser/ApiCodeConfig.java new file mode 100644 index 00000000..073b0d2f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/codeparser/ApiCodeConfig.java @@ -0,0 +1,83 @@ +package com.orangeforms.apidoc.tools.codeparser; + +import lombok.Data; + +import java.util.List; +import java.util.Set; + +/** + * 解析项目中接口信息的配置对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +public class ApiCodeConfig { + + /** + * 项目名称。 + */ + private String projectName; + /** + * 项目的基础包名,如(com.demo.multi)。 + */ + private String basePackage; + /** + * 项目在本地文件系统中的根目录。这里需要注意的是,Windows用户请务必使用反斜杠作为目录分隔符。 + * 如:"e:/mypath/OrangeSingleDemo","/Users/xxx/OrangeSingleDemo"。 + */ + private String projectRootPath; + /** + * 是否为微服务项目。 + */ + private Boolean microService; + /** + * 服务配置列表。对于单体服务,至少也会有一个ServiceConfig对象。 + */ + private List serviceList; + + @Data + public static class ServiceConfig { + /** + * 服务名称。 + */ + private String serviceName; + /** + * 服务中文显示名称。 + */ + private String showName; + /** + * 服务所在目录,相对于工程目录的子目录。 + */ + private String servicePath; + /** + * 仅用于微服务工程。通常为服务路由路径,如:/admin/coursepaper。服务内的接口,都会加上该路径前缀。 + */ + private String serviceRequestPath; + /** + * 服务的端口号。 + */ + private String port; + /** + * Api Controller信息列表。 + */ + private List controllerInfoList; + } + + @Data + public static class ControllerInfo { + /** + * Controller.java等接口文件的所在目录。该目录仅为相对于服务代码目录的子目录。 + * 目录分隔符请务必使用反斜杠。如:"/com/orange/demo/app/controller"。 + */ + private String path; + /** + * 如果一个服务内,存在多个Controller目录,将再次生成二级子目录,目录名为groupName。(可使用中文) + */ + private String groupName; + /** + * 在当前Controller目录下,需要忽略的Controller列表 (只写类名即可)。如:LoginController。 + */ + private Set skipControllers; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/codeparser/ApiCodeParser.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/codeparser/ApiCodeParser.java new file mode 100644 index 00000000..2fc108f6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/codeparser/ApiCodeParser.java @@ -0,0 +1,672 @@ +package com.orangeforms.apidoc.tools.codeparser; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.orangeforms.common.core.object.Tuple2; +import com.orangeforms.apidoc.tools.exception.ApiCodeConfigParseException; +import com.thoughtworks.qdox.JavaProjectBuilder; +import com.thoughtworks.qdox.model.*; +import com.thoughtworks.qdox.model.impl.DefaultJavaParameterizedType; +import lombok.Data; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * 解析项目中的接口信息,以及关联的Model、Dto和Mapper,主要用于生成接口文档。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class ApiCodeParser { + + private static final String PATH_SEPERATOR = "/"; + private static final String REQUEST_MAPPING = "RequestMapping"; + private static final String FULL_REQUEST_MAPPING = "org.springframework.web.bind.annotation.RequestMapping"; + private static final String GET_MAPPING = "GetMapping"; + private static final String FULL_GET_MAPPING = "org.springframework.web.bind.annotation.GetMapping"; + private static final String POST_MAPPING = "PostMapping"; + private static final String FULL_POST_MAPPING = "org.springframework.web.bind.annotation.PostMapping"; + private static final String VALUE_PROP = "value"; + private static final String REQUIRED_PROP = "required"; + private static final String DELETED_COLUMN = "DeletedFlagColumn"; + + /** + * 忽略微服务间标准调用接口的导出。 + */ + private static final Set IGNORED_API_METHOD_SET = new HashSet<>(8); + + static { + IGNORED_API_METHOD_SET.add("listByIds"); + IGNORED_API_METHOD_SET.add("getById"); + IGNORED_API_METHOD_SET.add("existIds"); + IGNORED_API_METHOD_SET.add("existId"); + IGNORED_API_METHOD_SET.add("deleteById"); + IGNORED_API_METHOD_SET.add("deleteBy"); + IGNORED_API_METHOD_SET.add("listBy"); + IGNORED_API_METHOD_SET.add("listMapBy"); + IGNORED_API_METHOD_SET.add("listByNotInList"); + IGNORED_API_METHOD_SET.add("getBy"); + IGNORED_API_METHOD_SET.add("countBy"); + IGNORED_API_METHOD_SET.add("aggregateBy"); + } + + /** + * 基础配置。 + */ + private ApiCodeConfig config; + /** + * 工程对象。 + */ + private ApiProject apiProject; + /** + * 项目中所有的解析后Java文件,key是Java对象的全名,如:com.orangeforms.xxxx.Student。 + */ + private final Map projectJavaClassMap = new HashMap<>(128); + /** + * 存储服务数据。key为配置的serviceName。 + */ + private final Map serviceDataMap = new HashMap<>(8); + + /** + * 构造函数。 + * + * @param config 配置对象。 + */ + public ApiCodeParser(ApiCodeConfig config) { + this.config = config; + // 验证配置中的数据是否正确,出现错误直接抛出运行时异常。 + this.verifyConfigData(); + // 将配置文件中所有目录相关的参数,全部规格化处理,后续的使用中不用再做处理了。 + this.normalizeConfigPath(); + for (ApiCodeConfig.ServiceConfig serviceConfig : config.getServiceList()) { + InternalServiceData serviceData = new InternalServiceData(); + // 仅有微服务项目,需要添加服务路由路径。 + if (StrUtil.isNotBlank(serviceConfig.getServiceRequestPath())) { + String serviceRequestPath = ""; + if (!serviceRequestPath.equals(PATH_SEPERATOR)) { + serviceRequestPath = normalizePath(serviceConfig.getServiceRequestPath()); + } + serviceData.setServiceRequestPath(serviceRequestPath); + } + serviceDataMap.put(serviceConfig.getServiceName(), serviceData); + } + } + + /** + * 执行解析操作。 + * + * @return 解析后的工程对象。 + */ + public ApiProject doParse() throws IOException { + // 先把工程完整编译一遍,以便工程内的Java对象的引用信息更加完整。 + this.parseProject(); + // 开始逐级推演。 + apiProject = new ApiProject(); + apiProject.setProjectName(config.getProjectName()); + apiProject.setMicroService(config.getMicroService()); + apiProject.setServiceList(new LinkedList<>()); + for (ApiCodeConfig.ServiceConfig serviceConfig : config.getServiceList()) { + ApiService apiService = this.parseService(serviceConfig); + apiProject.getServiceList().add(apiService); + } + return apiProject; + } + + private void parseProject() throws IOException { + JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder(); + javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name()); + javaProjectBuilder.addSourceTree(new File(config.getProjectRootPath())); + // 全部导入,便于后续解析中使用和检索。 + for (JavaClass javaClass : javaProjectBuilder.getClasses()) { + projectJavaClassMap.put(javaClass.getFullyQualifiedName(), javaClass); + } + } + + private ApiService parseService(ApiCodeConfig.ServiceConfig serviceConfig) { + InternalServiceData serviceData = serviceDataMap.get(serviceConfig.getServiceName()); + ApiService apiService = new ApiService(); + apiService.setServiceName(serviceConfig.getServiceName()); + apiService.setShowName(serviceConfig.getShowName()); + apiService.setPort(serviceConfig.getPort()); + List controllerInfoList = serviceConfig.getControllerInfoList(); + // 准备解析接口文件 + for (ApiCodeConfig.ControllerInfo controllerInfo : controllerInfoList) { + JavaProjectBuilder javaControllerBuilder = new JavaProjectBuilder(); + javaControllerBuilder.addSourceTree(new File(controllerInfo.getPath())); + for (JavaClass javaClass : javaControllerBuilder.getClasses()) { + if (controllerInfo.getSkipControllers() != null + && controllerInfo.getSkipControllers().contains(javaClass.getName())) { + continue; + } + ApiClass apiClass = this.parseApiClass(controllerInfo, javaClass.getFullyQualifiedName(), serviceData); + if (apiClass != null) { + // 如果配置中,为当前ControllerInfo添加了groupName属性, + // 所有的生成后接口都会位于serviceName/groupName子目录,否则,都直接位于当前服务的子目录。 + if (StrUtil.isBlank(apiClass.getGroupName())) { + apiService.getDefaultGroupClassSet().add(apiClass); + } else { + Set groupedClassList = apiService.getGroupedClassMap() + .computeIfAbsent(apiClass.getGroupName(), k -> new TreeSet<>()); + groupedClassList.add(apiClass); + } + } + } + } + return apiService; + } + + private ApiClass parseApiClass( + ApiCodeConfig.ControllerInfo controllerInfo, + String classFullname, + InternalServiceData serviceData) { + // 去包含工程全部Class的Map中,找到当前ControllerClass。 + // 之所以这样做,主要是因为全工程分析controller文件,会包含更多更精确的对象关联信息。 + JavaClass controllerClass = this.projectJavaClassMap.get(classFullname); + List classAnnotations = controllerClass.getAnnotations(); + boolean hasControllerAnnotation = false; + String requestPath = ""; + for (JavaAnnotation annotation : classAnnotations) { + String annotationName = annotation.getType().getValue(); + if (this.isRequestMapping(annotationName) && annotation.getNamedParameter(VALUE_PROP) != null) { + requestPath = StrUtil.removeAll( + annotation.getNamedParameter(VALUE_PROP).toString(), "\""); + if (requestPath.equals(PATH_SEPERATOR) || StrUtil.isBlank(requestPath)) { + requestPath = ""; + } else { + requestPath = normalizePath(requestPath); + } + } + if (isController(annotationName)) { + hasControllerAnnotation = true; + } + } + if (!hasControllerAnnotation) { + return null; + } + requestPath = serviceData.getServiceRequestPath() + requestPath; + ApiClass apiClass = new ApiClass(); + apiClass.setName(controllerClass.getName()); + apiClass.setFullName(controllerClass.getFullyQualifiedName()); + apiClass.setComment(controllerClass.getComment()); + apiClass.setGroupName(controllerInfo.getGroupName()); + apiClass.setRequestPath(requestPath); + List methodList = this.parseApiMethodList(apiClass, controllerClass); + apiClass.setMethodList(methodList); + return apiClass; + } + + private boolean needToIgnore(JavaMethod method) { + return !method.isPublic() || method.isStatic() || IGNORED_API_METHOD_SET.contains(method.getName()); + } + + private List parseApiMethodList(ApiClass apiClass, JavaClass javaClass) { + List apiMethodList = new LinkedList<>(); + List methodList = javaClass.getMethods(); + for (JavaMethod method : methodList) { + if (this.needToIgnore(method)) { + continue; + } + List methodAnnotations = method.getAnnotations(); + Tuple2 result = this.parseRequestPathAndHttpMethod(methodAnnotations); + String methodRequestPath = result.getFirst(); + String httpMethod = result.getSecond(); + if (StrUtil.isNotBlank(methodRequestPath)) { + ApiMethod apiMethod = new ApiMethod(); + apiMethod.setName(method.getName()); + apiMethod.setComment(method.getComment()); + apiMethod.setHttpMethod(httpMethod); + methodRequestPath = StrUtil.removeAll(methodRequestPath, "\""); + methodRequestPath = apiClass.getRequestPath() + normalizePath(methodRequestPath); + apiMethod.setRequestPath(methodRequestPath); + apiMethod.setPathList(StrUtil.splitTrim(apiMethod.getRequestPath(), PATH_SEPERATOR)); + if (apiMethod.getRequestPath().contains("/listDict")) { + apiMethod.setListDictUrl(true); + } else if (apiMethod.getRequestPath().endsWith("/list") + || apiMethod.getRequestPath().endsWith("/listWithGroup") + || apiMethod.getRequestPath().contains("/listNotIn") + || apiMethod.getRequestPath().contains("/list")) { + apiMethod.setListUrl(true); + } else if (apiMethod.getRequestPath().contains("/doLogin")) { + apiMethod.setLoginUrl(true); + } + JavaClass returnClass = method.getReturns(); + if (returnClass.isVoid()) { + apiMethod.setReturnString("void"); + } else { + apiMethod.setReturnString(returnClass.getGenericValue()); + } + apiMethodList.add(apiMethod); + List apiArgumentList = this.parseApiMethodArgumentList(method); + apiMethod.setArgumentList(apiArgumentList); + this.classifyArgumentList(apiMethod, apiArgumentList); + } + } + return apiMethodList; + } + + private void classifyArgumentList(ApiMethod apiMethod, List apiArgumentList) { + for (ApiArgument arg : apiArgumentList) { + if (arg.getAnnotationType() == ApiArgumentAnnotationType.REQUEST_PARAM) { + if (arg.uploadFileParam) { + apiMethod.getUploadParamArgumentList().add(arg); + } else { + apiMethod.getQueryParamArgumentList().add(arg); + } + } + if (arg.getAnnotationType() != ApiArgumentAnnotationType.REQUEST_PARAM) { + apiMethod.getJsonParamArgumentList().add(arg); + } + } + } + + private Tuple2 parseRequestPathAndHttpMethod(List methodAnnotations) { + for (JavaAnnotation annotation : methodAnnotations) { + String annotationName = annotation.getType().getValue(); + if (GET_MAPPING.equals(annotationName) || FULL_GET_MAPPING.equals(annotationName)) { + String methodRequestPath = annotation.getNamedParameter(VALUE_PROP).toString(); + String httpMethod = "GET"; + return new Tuple2<>(methodRequestPath, httpMethod); + } + if (POST_MAPPING.equals(annotationName) || FULL_POST_MAPPING.equals(annotationName)) { + String methodRequestPath = annotation.getNamedParameter(VALUE_PROP).toString(); + String httpMethod = "POST"; + return new Tuple2<>(methodRequestPath, httpMethod); + } + } + return new Tuple2<>(null, null); + } + + private List parseApiMethodArgumentList(JavaMethod javaMethod) { + List apiArgumentList = new LinkedList<>(); + List parameterList = javaMethod.getParameters(); + if (CollUtil.isEmpty(parameterList)) { + return apiArgumentList; + } + for (JavaParameter parameter : parameterList) { + String typeName = parameter.getType().getValue(); + // 该类型的参数为Validator的验证结果对象,因此忽略。 + if ("BindingResult".equals(typeName) || this.isServletArgument(typeName)) { + continue; + } + ApiArgument apiArgument = this.parseApiMethodArgument(parameter); + apiArgumentList.add(apiArgument); + } + return apiArgumentList; + } + + private String parseMethodArgmentComment(JavaParameter parameter) { + String comment = null; + JavaExecutable executable = parameter.getExecutable(); + List tags = executable.getTagsByName("param"); + if (CollUtil.isNotEmpty(tags)) { + for (DocletTag tag : tags) { + if (tag.getValue().startsWith(parameter.getName())) { + comment = StrUtil.removePrefix(tag.getValue(), parameter.getName()).trim(); + break; + } + } + } + return comment; + } + + private ApiArgument parseApiMethodArgument(JavaParameter parameter) { + String typeName = parameter.getType().getValue(); + ApiArgument apiArgument = new ApiArgument(); + ApiArgumentAnnotation argumentAnnotation = + this.parseArgumentAnnotationTypeAndName(parameter.getAnnotations(), parameter.getName()); + apiArgument.setAnnotationType(argumentAnnotation.getType()); + apiArgument.setName(argumentAnnotation.getName()); + apiArgument.setTypeName(typeName); + apiArgument.setFullTypeName(parameter.getFullyQualifiedName()); + if (argumentAnnotation.getType() == ApiArgumentAnnotationType.REQUEST_PARAM) { + apiArgument.setRequired(argumentAnnotation.isRequired()); + } + String comment = parseMethodArgmentComment(parameter); + apiArgument.setComment(comment); + // 文件上传字段,是必填参数。 + if ("MultipartFile".equals(typeName)) { + apiArgument.setUploadFileParam(true); + apiArgument.setRequired(true); + return apiArgument; + } + // 对于内置类型,则无需继续处理了。所有和内置类型参数相关的处理,应该在之前完成。 + if (this.verifyAndSetBuiltinParam(apiArgument, typeName)) { + return apiArgument; + } + // 判断是否为集合类型的参数。 + if (this.isCollectionType(typeName)) { + apiArgument.setCollectionParam(true); + if (parameter.getType() instanceof DefaultJavaParameterizedType) { + DefaultJavaParameterizedType javaType = (DefaultJavaParameterizedType) parameter.getType(); + JavaType genericType = javaType.getActualTypeArguments().get(0); + ApiModel apiModel = this.buildApiModelForArgument(genericType.getFullyQualifiedName()); + apiArgument.setModelData(apiModel); + apiArgument.setFullTypeName(parameter.getGenericFullyQualifiedName()); + apiArgument.setTypeName(parameter.getGenericValue()); + } + } else { + ApiModel apiModel = this.buildApiModelForArgument(parameter.getFullyQualifiedName()); + apiArgument.setModelData(apiModel); + } + return apiArgument; + } + + private boolean verifyAndSetBuiltinParam(ApiArgument apiArgument, String typeName) { + if ("MyOrderParam".equals(typeName)) { + apiArgument.setOrderParam(true); + } else if ("MyPageParam".equals(typeName)) { + apiArgument.setPageParam(true); + } else if ("MyGroupParam".equals(typeName)) { + apiArgument.setGroupParam(true); + } else if ("MyQueryParam".equals(typeName)) { + apiArgument.setQueryParam(true); + } else if ("MyAggregationParam".equals(typeName)) { + apiArgument.setAggregationParam(true); + } + return apiArgument.isOrderParam() + || apiArgument.isPageParam() + || apiArgument.isGroupParam() + || apiArgument.isQueryParam() + || apiArgument.isAggregationParam(); + } + + private ApiArgumentAnnotation parseArgumentAnnotationTypeAndName( + List annotationList, String defaultName) { + ApiArgumentAnnotation argumentAnnotation = new ApiArgumentAnnotation(); + argumentAnnotation.setType(ApiArgumentAnnotationType.REQUEST_PARAM); + argumentAnnotation.setName(defaultName); + for (JavaAnnotation annotation : annotationList) { + String annotationName = annotation.getType().getValue(); + if ("RequestBody".equals(annotationName)) { + argumentAnnotation.setType(ApiArgumentAnnotationType.REQUEST_BODY); + return argumentAnnotation; + } else if ("MyRequestBody".equals(annotationName)) { + String annotationValue = this.getArgumentNameFromAnnotationValue(annotation, VALUE_PROP); + argumentAnnotation.setType(ApiArgumentAnnotationType.MY_REQUEST_BODY); + argumentAnnotation.setName(annotationValue != null ? annotationValue : defaultName); + return argumentAnnotation; + } else if ("RequestParam".equals(annotationName)) { + String annotationValue = this.getArgumentNameFromAnnotationValue(annotation, VALUE_PROP); + argumentAnnotation.setType(ApiArgumentAnnotationType.REQUEST_PARAM); + argumentAnnotation.setName(annotationValue != null ? annotationValue : defaultName); + String requiredValue = this.getArgumentNameFromAnnotationValue(annotation, REQUIRED_PROP); + if (StrUtil.isNotBlank(requiredValue)) { + argumentAnnotation.setRequired(Boolean.parseBoolean(requiredValue)); + } + return argumentAnnotation; + } + } + // 缺省为@RequestParam + return argumentAnnotation; + } + + private String getArgumentNameFromAnnotationValue(JavaAnnotation annotation, String attribute) { + Object value = annotation.getNamedParameter(attribute); + if (value == null) { + return null; + } + String paramAlias = value.toString(); + if (StrUtil.isNotBlank(paramAlias)) { + paramAlias = StrUtil.removeAll(paramAlias, "\""); + } + return paramAlias; + } + + private ApiModel buildApiModelForArgument(String fullJavaClassName) { + // 先从当前服务内的Model中找,如果参数是Model类型的对象,微服务和单体行为一致。 + ApiModel apiModel = apiProject.getFullNameModelMap().get(fullJavaClassName); + if (apiModel != null) { + return apiModel; + } + // 判断工程全局对象映射中是否包括该对象类型,如果不包含,就直接返回了。 + JavaClass modelClass = projectJavaClassMap.get(fullJavaClassName); + if (modelClass == null) { + return apiModel; + } + // 先行解析对象中的字段。 + apiModel = parseModel(modelClass); + apiProject.getFullNameModelMap().put(fullJavaClassName, apiModel); + return apiModel; + } + + private ApiModel parseModel(JavaClass javaClass) { + ApiModel apiModel = new ApiModel(); + apiModel.setName(javaClass.getName()); + apiModel.setFullName(javaClass.getFullyQualifiedName()); + apiModel.setComment(javaClass.getComment()); + apiModel.setFieldList(new LinkedList<>()); + List fieldList = javaClass.getFields(); + for (JavaField field : fieldList) { + if (field.isStatic()) { + continue; + } + ApiField apiField = new ApiField(); + apiField.setName(field.getName()); + apiField.setComment(field.getComment()); + apiField.setTypeName(field.getType().getSimpleName()); + apiModel.getFieldList().add(apiField); + } + return apiModel; + } + + private void verifyConfigData() { + if (StrUtil.isBlank(config.getProjectName())) { + throw new ApiCodeConfigParseException("ProjectName field can't be EMPTY."); + } + if (StrUtil.isBlank(config.getBasePackage())) { + throw new ApiCodeConfigParseException("BasePackage field can't be EMPTY."); + } + if (StrUtil.isBlank(config.getProjectRootPath())) { + throw new ApiCodeConfigParseException("ProjectRootPath field can't be EMPTY."); + } + if (!FileUtil.exist(config.getProjectRootPath())) { + throw new ApiCodeConfigParseException( + "ProjectRootPath doesn't exist, please check ./resources/export-api-config.json as DEFAULT."); + } + if (config.getMicroService() == null) { + throw new ApiCodeConfigParseException("MicroService field can't be NULL."); + } + if (CollUtil.isEmpty(config.getServiceList())) { + throw new ApiCodeConfigParseException("ServiceList field can't be EMPTY."); + } + this.verifyServiceConfig(config.getServiceList()); + } + + private void verifyServiceConfig(List serviceConfigList) { + Set serviceNameSet = new HashSet<>(8); + Set servicePathSet = new HashSet<>(8); + for (ApiCodeConfig.ServiceConfig serviceConfig : serviceConfigList) { + if (StrUtil.isBlank(serviceConfig.getServiceName())) { + throw new ApiCodeConfigParseException("One of the ServiceName Field in Services List is NULL."); + } + String serviceName = serviceConfig.getServiceName(); + if (StrUtil.isBlank(serviceConfig.getServicePath())) { + throw new ApiCodeConfigParseException( + "The ServicePath Field in Service [" + serviceName + "] is NULL."); + } + if (serviceNameSet.contains(serviceName)) { + throw new ApiCodeConfigParseException("The ServiceName [" + serviceName + "] is duplicated."); + } + serviceNameSet.add(serviceName); + if (servicePathSet.contains(serviceConfig.getServicePath())) { + throw new ApiCodeConfigParseException( + "The ServicePath [" + serviceConfig.getServicePath() + "] is duplicated."); + } + servicePathSet.add(serviceConfig.getServicePath()); + if (StrUtil.isBlank(serviceConfig.getPort())) { + throw new ApiCodeConfigParseException( + "The Port Field in Service [" + serviceName + "] is NULL."); + } + this.verifyServiceControllerConfig(serviceConfig.getControllerInfoList(), serviceName); + } + } + + private void verifyServiceControllerConfig( + List controllerInfoList, String serviceName) { + if (CollUtil.isEmpty(controllerInfoList)) { + throw new ApiCodeConfigParseException( + "The ControllerInfoList Field of Service [" + serviceName + "] is EMPTY"); + } + for (ApiCodeConfig.ControllerInfo controllerInfo : controllerInfoList) { + if (StrUtil.isBlank(controllerInfo.getPath())) { + throw new ApiCodeConfigParseException( + "One of the ControllerInfo.Path Field of Service [" + serviceName + "] is EMPTY"); + } + } + } + + private void normalizeConfigPath() { + config.setProjectRootPath(normalizePath(config.getProjectRootPath())); + for (ApiCodeConfig.ServiceConfig serviceConfig : config.getServiceList()) { + serviceConfig.setServicePath(config.getProjectRootPath() + normalizePath(serviceConfig.getServicePath())); + for (ApiCodeConfig.ControllerInfo controllerInfo : serviceConfig.getControllerInfoList()) { + controllerInfo.setPath(serviceConfig.getServicePath() + normalizePath(controllerInfo.getPath())); + } + } + } + + private String normalizePath(String path) { + if (!path.startsWith(PATH_SEPERATOR)) { + path = PATH_SEPERATOR + path; + } + return StrUtil.removeSuffix(path, PATH_SEPERATOR); + } + + private boolean isCollectionType(String typeName) { + return "List".equals(typeName) || "Set".equals(typeName) || "Collection".equals(typeName); + } + + private boolean isServletArgument(String typeName) { + return "HttpServletResponse".equals(typeName) || "HttpServletRequest".equals(typeName); + } + + private boolean isController(String annotationName) { + return "Controller".equals(annotationName) + || "org.springframework.stereotype.Controller".equals(annotationName) + || "RestController".equals(annotationName) + || "org.springframework.web.bind.annotation.RestController".equals(annotationName); + } + + private boolean isRequiredColumn(String annotationName) { + return "NotNull".equals(annotationName) + || "javax.validation.constraints.NotNull".equals(annotationName) + || "NotBlank".equals(annotationName) + || "javax.validation.constraints.NotBlank".equals(annotationName) + || "NotEmpty".equals(annotationName) + || "javax.validation.constraints.NotEmpty".equals(annotationName); + } + + private boolean isRequestMapping(String name) { + return REQUEST_MAPPING.equals(name) || FULL_REQUEST_MAPPING.equals(name); + } + + @Data + public static class ApiProject { + private String projectName; + private Boolean microService; + private List serviceList; + private Map fullNameModelMap = new HashMap<>(32); + private Map simpleNameModelMap = new HashMap<>(32); + } + + @Data + public static class ApiService { + private String serviceName; + private String showName; + private String port; + private Set defaultGroupClassSet = new TreeSet<>(); + private Map> groupedClassMap = new LinkedHashMap<>(); + } + + @Data + public static class ApiClass implements Comparable { + private String name; + private String fullName; + private String groupName; + private String comment; + private String requestPath; + private List methodList; + + @Override + public int compareTo(ApiClass o) { + return this.name.compareTo(o.name); + } + } + + @Data + public static class ApiMethod { + private String name; + private String comment; + private String returnString; + private String requestPath; + private String httpMethod; + private boolean listDictUrl = false; + private boolean listUrl = false; + private boolean loginUrl = false; + private List pathList = new LinkedList<>(); + private List argumentList; + private List queryParamArgumentList = new LinkedList<>(); + private List jsonParamArgumentList = new LinkedList<>(); + private List uploadParamArgumentList = new LinkedList<>(); + } + + @Data + public static class ApiArgument { + private String name; + private String typeName; + private String fullTypeName; + private String comment; + private Integer annotationType; + private boolean required = true; + private boolean uploadFileParam = false; + private boolean collectionParam = false; + private boolean orderParam = false; + private boolean pageParam = false; + private boolean groupParam = false; + private boolean queryParam = false; + private boolean aggregationParam = false; + private boolean jsonData = false; + private ApiModel modelData; + } + + @Data + public static class ApiArgumentAnnotation { + private String name; + private Integer type; + private boolean required = true; + } + + @Data + public static class ApiModel { + private String name; + private String fullName; + private String comment; + private List fieldList; + } + + @Data + public static class ApiField { + private String name; + private String comment; + private String typeName; + private boolean requiredColumn = false; + } + + public static final class ApiArgumentAnnotationType { + public static final int REQUEST_PARAM = 0; + public static final int REQUEST_BODY = 1; + public static final int MY_REQUEST_BODY = 2; + + private ApiArgumentAnnotationType() { + } + } + + @Data + private static class InternalServiceData { + private String serviceRequestPath = ""; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/exception/ApiCodeConfigParseException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/exception/ApiCodeConfigParseException.java new file mode 100644 index 00000000..14e86fdd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/exception/ApiCodeConfigParseException.java @@ -0,0 +1,27 @@ +package com.orangeforms.apidoc.tools.exception; + +/** + * 解析接口信息配置对象中的异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class ApiCodeConfigParseException extends RuntimeException { + + /** + * 构造函数。 + */ + public ApiCodeConfigParseException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public ApiCodeConfigParseException(String msg) { + super(msg); + } + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/exception/MapperParseException.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/exception/MapperParseException.java new file mode 100644 index 00000000..6541ce67 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/exception/MapperParseException.java @@ -0,0 +1,27 @@ +package com.orangeforms.apidoc.tools.exception; + +/** + * 解析Mybatis XML Mapper中的异常。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class MapperParseException extends RuntimeException { + + /** + * 构造函数。 + */ + public MapperParseException() { + + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public MapperParseException(String msg) { + super(msg); + } + +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/export/ApiDocExporter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/export/ApiDocExporter.java new file mode 100644 index 00000000..aa7250f9 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/export/ApiDocExporter.java @@ -0,0 +1,84 @@ +package com.orangeforms.apidoc.tools.export; + +import com.orangeforms.apidoc.tools.codeparser.ApiCodeParser; +import com.orangeforms.apidoc.tools.util.FreeMarkerUtils; +import freemarker.template.Configuration; +import freemarker.template.TemplateException; +import freemarker.template.TemplateExceptionHandler; +import freemarker.template.TemplateModelException; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * 根据代码解析后的工程对象数据,导出到Markdown格式的接口文档文件。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class ApiDocExporter { + + private final Configuration config; + + public ApiDocExporter() throws TemplateModelException { + config = new Configuration(Configuration.VERSION_2_3_28); + config.setNumberFormat("0.####"); + config.setClassicCompatible(true); + config.setAPIBuiltinEnabled(true); + config.setClassForTemplateLoading(ApiPostmanExporter.class, "/templates/"); + config.setDefaultEncoding("UTF-8"); + config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + config.setSharedVariable("freemarkerUtils", new FreeMarkerUtils()); + config.unsetCacheStorage(); + config.clearTemplateCache(); + } + + /** + * 生成Markdown格式的API接口文档。 + * + * @param apiProject 解析后的工程对象。 + * @param outputFile 生成后的、包含全路径的输出文件名。 + * @throws IOException 文件操作异常。 + * @throws TemplateException 模板实例化异常。 + */ + public void doGenerate(ApiCodeParser.ApiProject apiProject, String outputFile) throws IOException, TemplateException { + Map paramMap = new HashMap<>(1); + paramMap.put("project", apiProject); + List newServiceList = new LinkedList<>(); + if (apiProject.getMicroService()) { + // 在微服务场景中,我们需要把upms服务放到最前面显示。 + for (ApiCodeParser.ApiService apiService : apiProject.getServiceList()) { + if ("upms".equals(apiService.getServiceName())) { + newServiceList.add(apiService); + break; + } + } + for (ApiCodeParser.ApiService apiService : apiProject.getServiceList()) { + if (!"upms".equals(apiService.getServiceName())) { + newServiceList.add(apiService); + } + } + } else { + ApiCodeParser.ApiService appService = apiProject.getServiceList().get(0); + ApiCodeParser.ApiService newUpmsService = new ApiCodeParser.ApiService(); + newUpmsService.setDefaultGroupClassSet(appService.getGroupedClassMap().get("upms")); + newUpmsService.setServiceName("upms"); + newUpmsService.setShowName("用户权限模块"); + newServiceList.add(newUpmsService); + ApiCodeParser.ApiService newAppService = new ApiCodeParser.ApiService(); + newAppService.setDefaultGroupClassSet(appService.getGroupedClassMap().get("app")); + newAppService.setServiceName("app"); + newAppService.setShowName("业务应用模块"); + newServiceList.add(newAppService); + } + apiProject.setServiceList(newServiceList); + FileUtils.forceMkdirParent(new File(outputFile)); + config.getTemplate("./api-doc.md.ftl").process(paramMap, new FileWriter(outputFile)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/export/ApiPostmanExporter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/export/ApiPostmanExporter.java new file mode 100644 index 00000000..f24b7c26 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/export/ApiPostmanExporter.java @@ -0,0 +1,53 @@ +package com.orangeforms.apidoc.tools.export; + +import com.orangeforms.apidoc.tools.codeparser.ApiCodeParser; +import com.orangeforms.apidoc.tools.util.FreeMarkerUtils; +import freemarker.template.Configuration; +import freemarker.template.TemplateException; +import freemarker.template.TemplateExceptionHandler; +import freemarker.template.TemplateModelException; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * 根据代码解析后的工程对象数据,导出到Postman支持的JSON格式的文件。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class ApiPostmanExporter { + + private final Configuration config; + + public ApiPostmanExporter() throws TemplateModelException { + config = new Configuration(Configuration.VERSION_2_3_28); + config.setNumberFormat("0.####"); + config.setClassicCompatible(true); + config.setAPIBuiltinEnabled(true); + config.setClassForTemplateLoading(ApiPostmanExporter.class, "/templates/"); + config.setDefaultEncoding("UTF-8"); + config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + config.setSharedVariable("freemarkerUtils", new FreeMarkerUtils()); + config.unsetCacheStorage(); + config.clearTemplateCache(); + } + + /** + * 生成Postman支持的JSON文档。 + * @param apiProject 解析后的工程对象。 + * @param outputFile 生成后的、包含全路径的输出文件名。 + * @throws IOException 文件操作异常。 + * @throws TemplateException 模板实例化异常。 + */ + public void doGenerate(ApiCodeParser.ApiProject apiProject, String outputFile) throws IOException, TemplateException { + Map paramMap = new HashMap<>(1); + paramMap.put("project", apiProject); + FileUtils.forceMkdirParent(new File(outputFile)); + config.getTemplate("./postman_collection.json.ftl").process(paramMap, new FileWriter(outputFile)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/util/FreeMarkerUtils.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/util/FreeMarkerUtils.java new file mode 100644 index 00000000..3244ea8a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/java/com/orangeforms/apidoc/tools/util/FreeMarkerUtils.java @@ -0,0 +1,28 @@ +package com.orangeforms.apidoc.tools.util; + +import java.util.UUID; + +/** + * 仅供Freemarker模板内部使用的Java工具函数。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class FreeMarkerUtils { + + /** + * 生成GUID。 + * + * @return 生成后的GUID。 + */ + public static String generateGuid() { + return UUID.randomUUID().toString(); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + public FreeMarkerUtils() { + // FreeMarker的工具对象,Sonarqube建议给出空构造的注释。 + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/export-api-config.json b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/export-api-config.json new file mode 100644 index 00000000..0b8d0f59 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/export-api-config.json @@ -0,0 +1,44 @@ +{ + "projectName": "橙单微服务开源版", + "basePackage": "com.orangeforms", + "projectRootPath": "这里请使用当前工程的根目录,如:e:/xxx/OrangeDemo 或者 /Users/xxx/OrangeDemo", + "microService": "true", + "serviceList": [ + { + "serviceName": "course-class", + "showName": "班级服务", + "servicePath": "/application/course-class", + "serviceRequestPath": "/admin/CourseClass", + "port": "8082", + "controllerInfoList": [ + { + "path": "/course-class-service/src/main/java/com/orangeforms/courseclassservice/controller" + } + ] + }, + { + "serviceName": "stats", + "showName": "统计服务", + "servicePath": "/application/stats", + "serviceRequestPath": "/admin/stats", + "port": "8082", + "controllerInfoList": [ + { + "path": "/stats-service/src/main/java/com/orangeforms/statsservice/controller" + } + ] + }, + { + "serviceName": "upms", + "showName": "用户权限服务", + "servicePath": "/application/upms", + "serviceRequestPath": "/admin/upms", + "port": "8082", + "controllerInfoList": [ + { + "path": "/upms-service/src/main/java/com/orangeforms/upmsservice/controller" + } + ] + } + ] +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/api-doc.md.ftl b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/api-doc.md.ftl new file mode 100644 index 00000000..dcf7d8dc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/api-doc.md.ftl @@ -0,0 +1,144 @@ +## 用户登录 +### 登录接口 +#### 登录 +- **URI:** /admin/upms/login/doLogin +- **Type:** GET +- **Content-Type:** multipart/form-data +- **Request-Headers:** +Name|Type|Description +--|--|-- +Authorization|String|身份验证的Token +- **Request-Parameters:** +Parameter|Type|Required|Description +--|--|--|-- +loginName|string|true|用户名 +password|string|true|加密后的用户密码 + +#### 退出 +- **URI:** /admin/upms/login/logout +- **Type:** POST +- **Content-Type:** application/json; chartset=utf-8 +- **Request-Headers:** +Name|Type|Description +--|--|-- +Authorization|String|身份验证的Token + +#### 修改密码 +- **URI:** /admin/upms/login/changePassword +- **Type:** POST +- **Content-Type:** application/json; chartset=utf-8 +- **Request-Headers:** +Name|Type|Description +--|--|-- +Authorization|String|身份验证的Token +- **Request-Parameters:** +Parameter|Type|Required|Description +--|--|--|-- +oldPass|string|true|加密后的原用户密码 +newPass|string|true|加密后的新用户密码 +<#list project.serviceList as service> + +## ${service.showName} +<#list service.defaultGroupClassSet as apiClass> +### ${apiClass.name} +<#list apiClass.methodList as apiMethod> +#### ${apiMethod.name} +- **URI:** ${apiMethod.requestPath} +- **Type:** ${apiMethod.httpMethod} +- **Content-Type:** <#if apiMethod.httpMethod == "GET" || apiMethod.queryParamArgumentList?size gt 0 || apiMethod.uploadParamArgumentList?size gt 0>multipart/form-data<#else>application/json; chartset=utf-8 +- **Request-Headers:** +Name|Type|Description +--|--|-- +Authorization|String|身份验证的Token +<#if apiMethod.queryParamArgumentList?size gt 0 || apiMethod.uploadParamArgumentList?size gt 0> +- **Request-Parameters:** +Parameter|Type|Required|Description +--|--|--|-- +<#list apiMethod.queryParamArgumentList as apiArgument> +<#if apiArgument.modelData??> +<#list apiArgument.modelData.tableFieldList as apiField> +${apiField.name}|${apiField.typeName}|<#if apiMethod.listDictUrl>false<#else><#if apiField.requiredColumn>true<#else>false|${apiField.comment} + +<#else> +${apiArgument.name}|${apiArgument.typeName}|<#if apiMethod.listDictUrl>false<#else><#if apiArgument.required>true<#else>false|${apiArgument.comment} +<#-- apiArgument.modelData?? --> + + +<#list apiMethod.uploadParamArgumentList as apiArgument> +${apiArgument.name}|File|true|${apiArgument.comment} + +<#if apiMethod.jsonParamArgumentList?size gt 0> +- **Request-Body:** +``` json +{ +<#list apiMethod.jsonParamArgumentList as apiArgument> +<#if apiArgument.modelData??> + <#if apiArgument.collectionParam> + "${apiArgument.name}" : [ + { + <#if apiMethod.listUrl> + <#list apiArgument.modelData.filteredFieldList as apiField> + "${apiField.name}" : "${apiField.typeName} | false | <#if apiField.name == "searchString">模糊搜索字符串。<#else>${apiField.comment}"<#if apiField_has_next>, + + <#else><#-- apiMethod.listUrl --> + <#list apiArgument.modelData.tableFieldList as apiField> + <#if !apiMethod.addUrl || !apiField.primaryKey> + "${apiField.name}" : "${apiField.typeName} | <#if apiField.requiredColumn>true<#else>false | ${apiField.comment}"<#if apiField_has_next>, + + + <#-- apiMethod.listUrl --> + } + ]<#if apiArgument_has_next>, + <#else><#-- apiArgument.collectionParam --> + "${apiArgument.name}" : { + <#if apiMethod.listUrl> + <#list apiArgument.modelData.filteredFieldList as apiField> + "${apiField.name}" : "${apiField.typeName} | false | <#if apiField.name == "searchString">模糊搜索字符串。<#else>${apiField.comment}"<#if apiField_has_next>, + + <#else><#-- apiMethod.listUrl --> + <#list apiArgument.modelData.tableFieldList as apiField> + <#if !apiMethod.addUrl || !apiField.primaryKey> + "${apiField.name}" : "${apiField.typeName} | <#if apiField.requiredColumn>true<#else>false | ${apiField.comment}"<#if apiField_has_next>, + + + <#-- apiMethod.listUrl --> + }<#if apiArgument_has_next>, + <#-- apiArgument.collectionParam --> +<#elseif apiArgument.orderParam> + "${apiArgument.name}" : [ + { + "fieldName" : "String | false | 排序字段名", + "asc" : "Boolean | false | 是否升序" + } + ]<#if apiArgument_has_next>, +<#elseif apiArgument.groupParam> + "${apiArgument.name}" : [ + { + "fieldName" : "String | false | 分组字段名", + "aliasName" : "String | false | 分组字段别名", + "dateAggregateBy" : "String | false | 是否按照日期聚合,可选项(day|month|year)" + } + ]<#if apiArgument_has_next>, +<#elseif apiArgument.pageParam> + "${apiArgument.name}" : { + "pageNum": "Integer | false | 分页页号", + "pageSize": "Integer | false | 每页数据量" + }<#if apiArgument_has_next>, +<#elseif apiArgument.queryParam || apiArgument.aggregationParam> + ${apiArgument.name}" : { + + }<#if apiArgument_has_next>, +<#else><#-- apiArgument.modelData?? --> + <#if apiArgument.collectionParam> + "${apiArgument.name}" : [ "${apiArgument.typeName} | ${apiArgument.required}<#if apiArgument.comment??> | ${apiArgument.comment}" ]<#if apiArgument_has_next>, + <#else> + "${apiArgument.name}" : "${apiArgument.typeName} | ${apiArgument.required}<#if apiArgument.comment??> | ${apiArgument.comment}"<#if apiArgument_has_next>, + +<#-- apiArgument.modelData?? --> + +} +``` + +<#-- apiClass.methodList as apiMethod --> +<#-- upmsClassList as apiClass --> + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/postman_collection.json.ftl b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/postman_collection.json.ftl new file mode 100644 index 00000000..2db6c184 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/postman_collection.json.ftl @@ -0,0 +1,42 @@ +<#import "postman_common.ftl" as Common> +{ + "info": { + "_postman_id": "92b51dc5-3611-49ac-8d94-a0718dba5bf1", + "name": "${project.projectName}", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + <#list project.serviceList as service> + { + "name": "${service.serviceName}", + "item": [ + <#if service.groupedClassMap?size gt 0> + <#list service.groupedClassMap?keys as groupName> + <#assign groupedClassList=service.groupedClassMap[groupName] /> + { + "name": "${groupName}", + "item": [ + <#list groupedClassList as apiClass> + { + <@Common.generateControllerRequest service apiClass 7/> + }<#if apiClass_has_next>, + + ], + "protocolProfileBehavior": {}, + "_postman_isSubFolder": true + }<#if groupName_has_next>, + + + <#list service.defaultGroupClassSet as apiClass> + { + <@Common.generateControllerRequest service apiClass 5/> + }<#if apiClass_has_next>, + + ], + "protocolProfileBehavior": {}, + "_postman_isSubFolder": true + }<#if service_has_next>, + <#-- project.serviceList as service --> + ], + "protocolProfileBehavior": {} +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/postman_common.ftl b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/postman_common.ftl new file mode 100644 index 00000000..9bf2a47e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/apidoc-tools/src/main/resources/templates/postman_common.ftl @@ -0,0 +1,120 @@ +<#macro doIndent level><#if level != 0><#list 0..(level-1) as i> + +<#macro generateControllerRequest service apiClass indentLevel> +<@doIndent indentLevel/>"name": "${apiClass.name}", +<@doIndent indentLevel/>"item": [ + <#list apiClass.methodList as apiMethod> +<@doIndent indentLevel/> { +<@doIndent indentLevel/> "name": "${apiMethod.name}", + <#if apiMethod.loginUrl> +<@doIndent indentLevel/> "event": [ +<@doIndent indentLevel/> { +<@doIndent indentLevel/> "listen": "test", +<@doIndent indentLevel/> "script": { +<@doIndent indentLevel/> "id": "${freemarkerUtils.generateGuid()}", +<@doIndent indentLevel/> "type": "text/javascript", +<@doIndent indentLevel/> "exec": [ +<@doIndent indentLevel/> "pm.test(\"登录操作\", function () {", +<@doIndent indentLevel/> " var jsonData = pm.response.json();", +<@doIndent indentLevel/> " var token = jsonData.data.tokenData;", +<@doIndent indentLevel/> " pm.environment.set(\"token\", token);", +<@doIndent indentLevel/> " console.log(\"login token \" + token);", +<@doIndent indentLevel/> "});", +<@doIndent indentLevel/> "" +<@doIndent indentLevel/> ] +<@doIndent indentLevel/> } +<@doIndent indentLevel/> }, +<@doIndent indentLevel/> { +<@doIndent indentLevel/> "listen": "prerequest", +<@doIndent indentLevel/> "script": { +<@doIndent indentLevel/> "id": "${freemarkerUtils.generateGuid()}", +<@doIndent indentLevel/> "type": "text/javascript", +<@doIndent indentLevel/> "exec": [ +<@doIndent indentLevel/> "" +<@doIndent indentLevel/> ] +<@doIndent indentLevel/> } +<@doIndent indentLevel/> } +<@doIndent indentLevel/> ], + +<@doIndent indentLevel/> "request": { +<@doIndent indentLevel/> "method": "${apiMethod.httpMethod}", + <#if apiMethod.loginUrl> +<@doIndent indentLevel/> "header": [], + <#else> +<@doIndent indentLevel/> "header": [ +<@doIndent indentLevel/> { +<@doIndent indentLevel/> "key": "Authorization", +<@doIndent indentLevel/> "value": "{{token}}", +<@doIndent indentLevel/> "type": "text" +<@doIndent indentLevel/> } +<@doIndent indentLevel/> ], + +<@doIndent indentLevel/> "url": { +<@doIndent indentLevel/> "raw": "http://{{host}}:${service.port}/${apiMethod.requestPath}", +<@doIndent indentLevel/> "protocol": "http", +<@doIndent indentLevel/> "host": [ +<@doIndent indentLevel/> "{{host}}" +<@doIndent indentLevel/> ], +<@doIndent indentLevel/> "port": "${service.port}", +<@doIndent indentLevel/> "path": [ + <#list apiMethod.pathList as path> +<@doIndent indentLevel/> "${path}"<#if path_has_next>, + +<@doIndent indentLevel/> ]<#if apiMethod.queryParamArgumentList?size gt 0>, + <#if apiMethod.queryParamArgumentList?size gt 0> +<@doIndent indentLevel/> "query": [ + <#list apiMethod.queryParamArgumentList as apiArgument> + <#if apiArgument.modelData??> + <#list apiArgument.modelData.tableFieldList as apiField> +<@doIndent indentLevel/> { +<@doIndent indentLevel/> "key": "${apiField.name}", +<@doIndent indentLevel/> "value": "" +<@doIndent indentLevel/> }<#if apiArgument_has_next || apiField_has_next>, + + <#else> +<@doIndent indentLevel/> { +<@doIndent indentLevel/> "key": "${apiArgument.name}", +<@doIndent indentLevel/> "value": "" +<@doIndent indentLevel/> }<#if apiArgument_has_next>, + + +<@doIndent indentLevel/> ] + +<@doIndent indentLevel/> }<#if (apiMethod.httpMethod == "POST" && apiMethod.jsonParamArgumentList?size gt 0) || apiMethod.uploadParamArgumentList?size gt 0>, + <#if apiMethod.uploadParamArgumentList?size gt 0> +<@doIndent indentLevel/> "body": { +<@doIndent indentLevel/> "mode": "formdata", +<@doIndent indentLevel/> "formdata": [ + <#list apiMethod.uploadParamArgumentList as apiArgument> +<@doIndent indentLevel/> { +<@doIndent indentLevel/> "key": "${apiArgument.name}", +<@doIndent indentLevel/> "type": "file", +<@doIndent indentLevel/> "src": [] +<@doIndent indentLevel/> }<#if apiArgument_has_next>, + +<@doIndent indentLevel/> ] +<@doIndent indentLevel/> }<#if apiMethod.httpMethod == "POST" && apiMethod.jsonParamArgumentList?size gt 0>, + <#-- apiMethod.uploadParamArgumentList?size gt 0 --> + <#if apiMethod.httpMethod == "POST" && apiMethod.jsonParamArgumentList?size gt 0> +<@doIndent indentLevel/> "body": { +<@doIndent indentLevel/> "mode": "raw", + <#if !apiMethod.loginUrl> +<@doIndent indentLevel/> "raw": "{\n<#list apiMethod.jsonParamArgumentList as apiArgument><#if apiArgument.modelData??><#if apiArgument.collectionParam>\t\"${apiArgument.name}\" : [\n\t\t{\n<#list apiArgument.modelData.fieldList as apiField><#if apiMethod.listUrl>\t\t\t\"${apiField.name}\" : \"\"<#if apiField_has_next>,\n<#else>\t\t\t\"${apiField.name}\" : \"<#if apiField.typeName == "Integer" || apiField.typeName == "Long">0\"<#if apiField_has_next>,\n<#-- apiMethod.listUrl -->\t\t}\n\t]<#if apiArgument_has_next>,\n<#else><#-- apiArgument.collectionParam -->\t\"${apiArgument.name}\" : {\n<#list apiArgument.modelData.fieldList as apiField><#if apiMethod.listUrl>\t\t\"${apiField.name}\" : \"\"<#if apiField_has_next>,\n<#else>\t\t\"${apiField.name}\" : \"<#if apiField.typeName == "Integer" || apiField.typeName == "Long">0\"<#if apiField_has_next>,\n<#-- apiMethod.listUrl -->\t}<#if apiArgument_has_next>,\n<#-- apiArgument.collectionParam --><#elseif apiArgument.orderParam>\t\"${apiArgument.name}\" : [\n\t\t{\n\t\t\t\"fieldName\" : \"\",\n\t\t\t\"asc\" : \"true\"\n\t\t}\n\t]<#if apiArgument_has_next>,\n<#elseif apiArgument.groupParam>\t\"${apiArgument.name}\" : [\n\t\t{\n\t\t\t\"fieldName\" : \"\",\n\t\t\t\"aliasName\" : \"\",\n\t\t\t\"dateAggregateBy\" : \"\"\n\t\t}\n\t]<#if apiArgument_has_next>,\n<#elseif apiArgument.pageParam>\t\"${apiArgument.name}\" : {\n\t\t\"pageNum\": \"1\",\n\t\t\"pageSize\": \"10\"\n\t}<#if apiArgument_has_next>,\n<#elseif apiArgument.queryParam || apiArgument.aggregationParam>\t\"${apiArgument.name}\" : {\n\t}<#if apiArgument_has_next>,\n<#else><#if apiArgument.collectionParam>\t\"${apiArgument.name}\" : [ ]<#if apiArgument_has_next>,\n<#else>\t\"${apiArgument.name}\" : \"\"<#if apiArgument_has_next>,\n<#-- apiArgument.modelData?? --><#-- apiMethod.jsonParamArgumentList?size gt 0 -->}\n", + <#else> +<@doIndent indentLevel/> "raw": "{\n \"loginName\":\"admin\",\n \"password\":\"IP3ccke3GhH45iGHB5qP9p7iZw6xUyj28Ju10rnBiPKOI35sc%2BjI7%2FdsjOkHWMfUwGYGfz8ik31HC2Ruk%2Fhkd9f6RPULTHj7VpFdNdde2P9M4mQQnFBAiPM7VT9iW3RyCtPlJexQ3nAiA09OqG%2F0sIf1kcyveSrulxembARDbDo%3D\"\n}", + +<@doIndent indentLevel/> "options": { +<@doIndent indentLevel/> "raw": { +<@doIndent indentLevel/> "language": "json" +<@doIndent indentLevel/> } +<@doIndent indentLevel/> } +<@doIndent indentLevel/> } + +<@doIndent indentLevel/> }, +<@doIndent indentLevel/> "response": [] +<@doIndent indentLevel/> }<#if apiMethod_has_next>, + <#-- apiClass.methodList as apiMethod --> +<@doIndent indentLevel/>], +<@doIndent indentLevel/>"protocolProfileBehavior": {}, +<@doIndent indentLevel/>"_postman_isSubFolder": true + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/framework.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/framework.iml new file mode 100644 index 00000000..f48406e4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/framework.iml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/pom.xml new file mode 100644 index 00000000..87153501 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/pom.xml @@ -0,0 +1,19 @@ + + + + com.orangeforms + OrangeMultiDemo + 1.0.0 + + 4.0.0 + + framework + pom + + + admin-monitor + apidoc-tools + uaa + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/pom.xml new file mode 100644 index 00000000..49080e54 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/pom.xml @@ -0,0 +1,18 @@ + + + + com.orangeforms + framework + 1.0.0 + + 4.0.0 + + uaa + pom + + + uaa-admin + uaa-auth + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/pom.xml new file mode 100644 index 00000000..91b37384 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/pom.xml @@ -0,0 +1,59 @@ + + + + com.orangeforms + uaa + 1.0.0 + + 4.0.0 + + uaa-admin + 1.0.0 + uaa-admin + jar + + + + com.orangeforms + common-core + 1.0.0 + + + com.orangeforms + common-redis + 1.0.0 + + + com.orangeforms + common-sequence + 1.0.0 + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/UaaAdminApplication.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/UaaAdminApplication.java new file mode 100644 index 00000000..b8f67f50 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/UaaAdminApplication.java @@ -0,0 +1,20 @@ +package com.orangeforms.uaaadmin; + +import org.springframework.boot.SpringApplication; +import org.springframework.cloud.client.SpringCloudApplication; +import org.springframework.context.annotation.ComponentScan; + +/** + * UAA管理服务启动类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@SpringCloudApplication +@ComponentScan("com.orangeforms") +public class UaaAdminApplication { + + public static void main(String[] args) { + SpringApplication.run(UaaAdminApplication.class, args); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/ApplicationConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/ApplicationConfig.java new file mode 100644 index 00000000..46721b52 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/ApplicationConfig.java @@ -0,0 +1,53 @@ +package com.orangeforms.uaaadmin.config; + +import lombok.Data; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * 应用程序自定义的程序属性配置文件。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@RefreshScope +@Configuration +@ConfigurationProperties(prefix = "application") +public class ApplicationConfig { + + /** + * token 加密用的密钥。该值的长度最少10个字符(过短会报错)。 + */ + private String tokenSigningKey; + /** + * token的Http Request Header的key。 + */ + private String tokenHeaderKey; + /** + * token在过期之前,但是已经需要被刷新时,response返回的header信息的key。 + */ + private String refreshedTokenHeaderKey; + /** + * 令牌的过期时间,单位毫秒 + */ + private Long expiration; + /** + * 授信ip列表,没有填写表示全部信任。多个ip之间逗号分隔,如: http://10.10.10.1:8080,http://10.10.10.2:8080 + */ + private String credentialIpList; + /** + * Session在Redis中的过期时间(秒)。 + * 缺省值是 one day + 60s + */ + private int sessionExpiredSeconds = 86460; + /** + * 用户密码被重置之后的缺省密码。 + */ + private String defaultUserPassword; + /** + * 上传文件的基础目录。 + */ + private String uploadFileBaseDir; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/CorsConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/CorsConfig.java new file mode 100644 index 00000000..6a90f9d6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/CorsConfig.java @@ -0,0 +1,41 @@ +package com.orangeforms.uaaadmin.config; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 这里主要配置Web的各种过滤器和监听器等Servlet容器组件。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class CorsConfig { + + /** + * 配置Ajax跨域过滤器。 + */ + @Bean + public CorsFilter corsFilterRegistration(ApplicationConfig applicationConfig) { + UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); + CorsConfiguration corsConfiguration = new CorsConfiguration(); + if (StringUtils.isNotBlank(applicationConfig.getCredentialIpList())) { + String[] credentialIpList = StringUtils.split(applicationConfig.getCredentialIpList(), ","); + if (credentialIpList.length > 0) { + for (String ip : credentialIpList) { + corsConfiguration.addAllowedOrigin(ip); + } + } + corsConfiguration.addAllowedHeader("*"); + corsConfiguration.addAllowedMethod("*"); + corsConfiguration.addExposedHeader(applicationConfig.getRefreshedTokenHeaderKey()); + corsConfiguration.setAllowCredentials(true); + configSource.registerCorsConfiguration("/**", corsConfiguration); + } + return new CorsFilter(configSource); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/DataSourceConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/DataSourceConfig.java new file mode 100644 index 00000000..56cd2eb2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/DataSourceConfig.java @@ -0,0 +1,30 @@ +package com.orangeforms.uaaadmin.config; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.mybatis.spring.annotation.MapperScan; + +import javax.sql.DataSource; + +/** + * 数据源配置Bean对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +@EnableTransactionManagement +@MapperScan(value = {"com.orangeforms.*.dao", "com.orangeforms.common.*.dao"}) +public class DataSourceConfig { + + @Bean(initMethod = "init", destroyMethod = "close") + @Primary + @ConfigurationProperties(prefix = "spring.datasource.druid") + public DataSource druidDataSource() { + return DruidDataSourceBuilder.create().build(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/InterceptorConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/InterceptorConfig.java new file mode 100644 index 00000000..14509875 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/config/InterceptorConfig.java @@ -0,0 +1,21 @@ +package com.orangeforms.uaaadmin.config; + +import com.orangeforms.uaaadmin.interceptor.AuthenticationInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 所有的项目拦截器都在这里集中配置 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class InterceptorConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new AuthenticationInterceptor()).addPathPatterns("/admin/**"); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/AuthClientDetailsController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/AuthClientDetailsController.java new file mode 100644 index 00000000..2ef1f42f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/AuthClientDetailsController.java @@ -0,0 +1,141 @@ +package com.orangeforms.uaaadmin.controller; + +import com.orangeforms.uaaadmin.model.AuthClientDetails; +import com.orangeforms.uaaadmin.service.AuthClientDetailsService; +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.validator.AddGroup; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import javax.validation.groups.Default; + +/** + * 应用客户端操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@RestController +@RequestMapping("/admin/uaaadmin/authClientDetails") +public class AuthClientDetailsController { + + @Autowired + private AuthClientDetailsService authClientDetailsService; + + /** + * 新增应用客户端数据。 + * + * @param authClientDetails 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody AuthClientDetails authClientDetails) { + String errorMessage = MyCommonUtil.getModelValidationError(authClientDetails, Default.class, AddGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + authClientDetails = authClientDetailsService.saveNew(authClientDetails); + return ResponseResult.success(authClientDetails.getClientId()); + } + + /** + * 更新应用客户端数据。 + * + * @param authClientDetails 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody AuthClientDetails authClientDetails) { + String errorMessage = MyCommonUtil.getModelValidationError(authClientDetails); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 判断数据合法性。 + AuthClientDetails originalAuthClientDetails = authClientDetailsService.getById(authClientDetails.getClientId()); + if (originalAuthClientDetails == null) { + errorMessage = "数据验证失败,当前应用客户端并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!originalAuthClientDetails.getClientSecretPlain().equals(authClientDetails.getClientSecretPlain())) { + errorMessage = "数据验证失败,client_secret不能被修改!"; + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + if (!authClientDetailsService.update(authClientDetails, originalAuthClientDetails)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除应用客户端数据。 + * + * @param clientId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody String clientId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(clientId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + AuthClientDetails originalAuthClientDetails = authClientDetailsService.getById(clientId); + if (originalAuthClientDetails == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!authClientDetailsService.remove(clientId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的应用客户端列表。 + * + * @param authClientDetailsFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody AuthClientDetails authClientDetailsFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + String orderBy = MyOrderParam.buildOrderBy(orderParam, AuthClientDetails.class); + List resultList = + authClientDetailsService.getAuthClientDetailsListWithRelation(authClientDetailsFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(resultList)); + } + + /** + * 查看指定应用客户端对象详情。 + * + * @param clientId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam String clientId) { + if (MyCommonUtil.existBlankArgument(clientId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + AuthClientDetails authClientDetails = authClientDetailsService.getByIdWithRelation(clientId, MyRelationParam.full()); + if (authClientDetails == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(authClientDetails); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/LoginController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/LoginController.java new file mode 100644 index 00000000..b92d7d28 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/LoginController.java @@ -0,0 +1,137 @@ +package com.orangeforms.uaaadmin.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.orangeforms.uaaadmin.config.ApplicationConfig; +import com.orangeforms.uaaadmin.model.SysUaaOperator; +import com.orangeforms.uaaadmin.model.constant.OperatorType; +import com.orangeforms.uaaadmin.service.SysUaaOperatorService; +import lombok.extern.slf4j.Slf4j; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.annotation.NoAuthInterface; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.TokenData; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.*; + +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * 登录接口控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@RestController +@RequestMapping("/admin/upms/login") +public class LoginController { + + @Autowired + private SysUaaOperatorService sysOperatorService; + @Autowired + private ApplicationConfig appConfig; + @Autowired + private RedissonClient redissonClient; + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 登录接口。 + * + * @param loginName 登录名。 + * @param password 密码。 + * @return 应答结果对象,其中包括JWT的Token数据,以及菜单列表。 + */ + @NoAuthInterface + @PostMapping("/doLogin") + public ResponseResult doLogin( + @MyRequestBody String loginName, @MyRequestBody String password) throws Exception { + if (MyCommonUtil.existBlankArgument(loginName, password)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysUaaOperator operator = sysOperatorService.getUaaOperatorByLoginName(loginName); + password = URLDecoder.decode(password, StandardCharsets.UTF_8.name()); + // NOTE: 第一次使用时,请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。 + // 执行RsaUtil工具类中的main函数,可以生成新的公钥和私钥。 + password = RsaUtil.decrypt(password, ApplicationConstant.PRIVATE_KEY); + if (operator == null || !passwordEncoder.matches(password, operator.getPassword())) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + String errorMessage; + boolean isAdmin = operator.getOperatorType() == OperatorType.ADMIN; + Map claims = new HashMap<>(3); + String sessionId = operator.getLoginName() + "_" + MyCommonUtil.generateUuid(); + claims.put("sessionId", sessionId); + String token = JwtUtil.generateToken(claims, appConfig.getExpiration(), appConfig.getTokenSigningKey()); + TokenData tokenData = new TokenData(); + tokenData.setSessionId(sessionId); + tokenData.setUserId(operator.getOperatorId()); + tokenData.setLoginName(operator.getLoginName()); + tokenData.setShowName(operator.getShowName()); + tokenData.setIsAdmin(isAdmin); + tokenData.setLoginIp(IpUtil.getRemoteIpAddress(ContextUtil.getHttpRequest())); + tokenData.setLoginTime(new Date()); + RBucket bucket = redissonClient.getBucket(RedisKeyUtil.makeSessionIdKey(sessionId)); + bucket.set(JSON.toJSONString(tokenData), 4, TimeUnit.HOURS); + JSONObject jsonData = new JSONObject(); + jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token); + jsonData.put("showName", operator.getShowName()); + jsonData.put("isAdmin", isAdmin); + // 这里手动将TokenData存入request,便于OperationLogAspect统一处理操作日志。 + TokenData.addToRequest(tokenData); + return ResponseResult.success(jsonData); + } + + /** + * 登出操作。同时将Session相关的信息从缓存中删除。 + * + * @return 应答结果对象。 + */ + @PostMapping("/doLogout") + public ResponseResult doLogout() { + TokenData tokenData = TokenData.takeFromRequest(); + String sessionIdKey = RedisKeyUtil.makeSessionIdKey(tokenData.getSessionId()); + redissonClient.getBucket(sessionIdKey).delete(); + return ResponseResult.success(); + } + + /** + * 用户修改自己的密码。 + * + * @param oldPass 原有密码。 + * @param newPass 新密码。 + * @return 应答结果对象。 + */ + @PostMapping("/changePassword") + public ResponseResult changePassword( + @MyRequestBody String oldPass, @MyRequestBody String newPass) throws Exception { + if (MyCommonUtil.existBlankArgument(newPass, oldPass)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + TokenData tokenData = TokenData.takeFromRequest(); + SysUaaOperator operator = sysOperatorService.getById(tokenData.getUserId()); + oldPass = URLDecoder.decode(oldPass, StandardCharsets.UTF_8.name()); + // NOTE: 第一次使用时,请务必阅读ApplicationConstant.PRIVATE_KEY的代码注释。 + // 执行RsaUtil工具类中的main函数,可以生成新的公钥和私钥。 + oldPass = RsaUtil.decrypt(oldPass, ApplicationConstant.PRIVATE_KEY); + if (operator == null || !passwordEncoder.matches(oldPass, operator.getPassword())) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + newPass = URLDecoder.decode(newPass, StandardCharsets.UTF_8.name()); + newPass = RsaUtil.decrypt(newPass, ApplicationConstant.PRIVATE_KEY); + if (!sysOperatorService.changePassword(tokenData.getUserId(), newPass)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/SysUaaOperatorController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/SysUaaOperatorController.java new file mode 100644 index 00000000..dbc0d70f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/SysUaaOperatorController.java @@ -0,0 +1,255 @@ +package com.orangeforms.uaaadmin.controller; + +import cn.hutool.core.util.ReflectUtil; +import com.orangeforms.common.core.upload.BaseUpDownloader; +import com.orangeforms.common.core.upload.UpDownloaderFactory; +import com.orangeforms.common.core.upload.UploadResponseInfo; +import com.orangeforms.common.core.upload.UploadStoreInfo; +import com.orangeforms.common.redis.cache.SessionCacheHelper; +import com.orangeforms.uaaadmin.config.ApplicationConfig; +import com.orangeforms.uaaadmin.model.SysUaaOperator; +import com.orangeforms.uaaadmin.service.SysUaaOperatorService; +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.validator.AddGroup; +import com.orangeforms.common.core.validator.UpdateGroup; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.*; +import javax.validation.groups.Default; + +/** + * 操作员操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@RestController +@RequestMapping("/admin/uaaadmin/sysUaaOperator") +public class SysUaaOperatorController { + + @Autowired + private SysUaaOperatorService sysUaaOperatorService; + @Autowired + private ApplicationConfig appConfig; + @Autowired + private SessionCacheHelper cacheHelper; + @Autowired + private UpDownloaderFactory upDownloaderFactory; + + /** + * 新增操作员数据。 + * + * @param sysUaaOperator 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysUaaOperator sysUaaOperator) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUaaOperator, Default.class, AddGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + sysUaaOperator = sysUaaOperatorService.saveNew(sysUaaOperator); + return ResponseResult.success(sysUaaOperator.getOperatorId()); + } + + /** + * 更新操作员数据。 + * + * @param sysUaaOperator 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysUaaOperator sysUaaOperator) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUaaOperator, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 验证关联Id的数据合法性 + SysUaaOperator originalSysUaaOperator = sysUaaOperatorService.getById(sysUaaOperator.getOperatorId()); + if (originalSysUaaOperator == null) { + errorMessage = "数据验证失败,当前UAA操作员并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysUaaOperatorService.update(sysUaaOperator, originalSysUaaOperator)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 重置UAA操作员密码到初始化密码。 + * + * @param uaaOperatorId 操作员Id。 + * @return 应答结果对象。 + */ + @PostMapping("/resetPassword") + public ResponseResult resetPassword(@MyRequestBody Long uaaOperatorId) { + if (MyCommonUtil.existBlankArgument(uaaOperatorId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysUaaOperatorService.changePassword(uaaOperatorId, appConfig.getDefaultUserPassword())) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除操作员数据。 + * + * @param operatorId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long operatorId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(operatorId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysUaaOperator originalSysUaaOperator = sysUaaOperatorService.getById(operatorId); + if (originalSysUaaOperator == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysUaaOperatorService.remove(operatorId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的操作员列表。 + * + * @param sysUaaOperatorFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysUaaOperator sysUaaOperatorFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUaaOperator.class); + List resultList = + sysUaaOperatorService.getSysUaaOperatorListWithRelation(sysUaaOperatorFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(resultList)); + } + + /** + * 查看指定操作员对象详情。 + * + * @param operatorId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long operatorId) { + if (MyCommonUtil.existBlankArgument(operatorId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysUaaOperator sysUaaOperator = sysUaaOperatorService.getByIdWithRelation(operatorId, MyRelationParam.full()); + if (sysUaaOperator == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(sysUaaOperator); + } + + /** + * 附件文件下载。 + * 这里将图片和其他类型的附件文件放到不同的父目录下,主要为了便于今后图片文件的迁移。 + * + * @param operatorId 附件所在记录的主键Id。 + * @param fieldName 附件所属的字段名。 + * @param filename 文件名。如果没有提供该参数,就从当前记录的指定字段中读取。 + * @param asImage 下载文件是否为图片。 + * @param response Http 应答对象。 + */ + @GetMapping("/download") + public void download( + @RequestParam Long operatorId, + @RequestParam String fieldName, + @RequestParam String filename, + @RequestParam Boolean asImage, + HttpServletResponse response) { + if (MyCommonUtil.existBlankArgument(operatorId, fieldName, filename, asImage)) { + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + return; + } + // 使用try来捕获异常,是为了保证一旦出现异常可以返回500的错误状态,便于调试。 + // 否则有可能给前端返回的是200的错误码。 + try { + SysUaaOperator sysUaaOperator = sysUaaOperatorService.getById(operatorId); + if (sysUaaOperator == null) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + String fieldJsonData = (String) ReflectUtil.getFieldValue(sysUaaOperator, fieldName); + if (fieldJsonData == null) { + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + return; + } + if (!BaseUpDownloader.containFile(fieldJsonData, filename)) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + return; + } + UploadStoreInfo storeInfo = MyModelUtil.getUploadStoreInfo(SysUaaOperator.class, fieldName); + if (!storeInfo.isSupportUpload()) { + ResponseResult.output(HttpServletResponse.SC_NOT_IMPLEMENTED, + ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FIELD)); + return; + } + BaseUpDownloader upDownloader = upDownloaderFactory.get(storeInfo.getStoreType()); + upDownloader.doDownload(appConfig.getUploadFileBaseDir(), + SysUaaOperator.class.getSimpleName(), fieldName, filename, asImage, response); + } catch (Exception e) { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + log.error(e.getMessage(), e); + } + } + + /** + * 文件上传操作。 + * + * @param fieldName 上传文件名。 + * @param asImage 是否作为图片上传。如果是图片,今后下载的时候无需权限验证。否则就是附件上传,下载时需要权限验证。 + * @param uploadFile 上传文件对象。 + * @param response Http 应答对象。 + */ + @PostMapping("/upload") + public void upload( + @RequestParam String fieldName, + @RequestParam Boolean asImage, + @RequestParam("uploadFile") MultipartFile uploadFile, + HttpServletResponse response) throws Exception { + UploadStoreInfo storeInfo = MyModelUtil.getUploadStoreInfo(SysUaaOperator.class, fieldName); + if (!storeInfo.isSupportUpload()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FIELD)); + return; + } + BaseUpDownloader upDownloader = upDownloaderFactory.get(storeInfo.getStoreType()); + UploadResponseInfo responseInfo = upDownloader.doUpload(null, + appConfig.getUploadFileBaseDir(), SysUaaOperator.class.getSimpleName(), fieldName, asImage, uploadFile); + if (responseInfo.getUploadFailed()) { + ResponseResult.output(HttpServletResponse.SC_FORBIDDEN, + ResponseResult.error(ErrorCodeEnum.UPLOAD_FAILED, responseInfo.getErrorMessage())); + return; + } + cacheHelper.putSessionUploadFile(responseInfo.getFilename()); + ResponseResult.output(ResponseResult.success(responseInfo)); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/SysUaaUserController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/SysUaaUserController.java new file mode 100644 index 00000000..a950db6b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/controller/SysUaaUserController.java @@ -0,0 +1,157 @@ +package com.orangeforms.uaaadmin.controller; + +import com.orangeforms.uaaadmin.config.ApplicationConfig; +import com.orangeforms.uaaadmin.model.SysUaaUser; +import com.orangeforms.uaaadmin.service.SysUaaUserService; +import com.github.pagehelper.page.PageMethod; +import com.orangeforms.common.core.object.*; +import com.orangeforms.common.core.util.*; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.annotation.MyRequestBody; +import com.orangeforms.common.core.validator.AddGroup; +import com.orangeforms.common.core.validator.UpdateGroup; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import javax.validation.groups.Default; + +/** + * UAA用户操作控制器类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@RestController +@RequestMapping("/admin/uaaadmin/sysUaaUser") +public class SysUaaUserController { + + @Autowired + private SysUaaUserService sysUaaUserService; + @Autowired + private ApplicationConfig appConfig; + + /** + * 新增UAA用户数据。 + * + * @param sysUaaUser 新增对象。 + * @return 应答结果对象,包含新增对象主键Id。 + */ + @PostMapping("/add") + public ResponseResult add(@MyRequestBody SysUaaUser sysUaaUser) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUaaUser, Default.class, AddGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + sysUaaUser = sysUaaUserService.saveNew(sysUaaUser); + return ResponseResult.success(sysUaaUser.getUserId()); + } + + /** + * 更新UAA用户数据。 + * + * @param sysUaaUser 更新对象。 + * @return 应答结果对象。 + */ + @PostMapping("/update") + public ResponseResult update(@MyRequestBody SysUaaUser sysUaaUser) { + String errorMessage = MyCommonUtil.getModelValidationError(sysUaaUser, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); + } + // 验证关联Id的数据合法性 + SysUaaUser originalSysUaaUser = sysUaaUserService.getById(sysUaaUser.getUserId()); + if (originalSysUaaUser == null) { + errorMessage = "数据验证失败,当前UAA用户并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysUaaUserService.update(sysUaaUser, originalSysUaaUser)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 重置UAA用户密码到初始化密码。 + * + * @param uaaUserId 用户Id。 + * @return 应答结果对象。 + */ + @PostMapping("/resetPassword") + public ResponseResult resetPassword(@MyRequestBody Long uaaUserId) { + if (MyCommonUtil.existBlankArgument(uaaUserId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysUaaUserService.changePassword(uaaUserId, appConfig.getDefaultUserPassword())) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } + + /** + * 删除UAA用户数据。 + * + * @param userId 删除对象主键Id。 + * @return 应答结果对象。 + */ + @PostMapping("/delete") + public ResponseResult delete(@MyRequestBody Long userId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysUaaUser originalSysUaaUser = sysUaaUserService.getById(userId); + if (originalSysUaaUser == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysUaaUserService.remove(userId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); + } + + /** + * 列出符合过滤条件的UAA用户列表。 + * + * @param sysUaaUserFilter 过滤对象。 + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 应答结果对象,包含查询结果集。 + */ + @PostMapping("/list") + public ResponseResult> list( + @MyRequestBody SysUaaUser sysUaaUserFilter, + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUaaUser.class); + List resultList = sysUaaUserService.getSysUaaUserListWithRelation(sysUaaUserFilter, orderBy); + return ResponseResult.success(MyPageUtil.makeResponseData(resultList)); + } + + /** + * 查看指定UAA用户对象详情。 + * + * @param userId 指定对象主键Id。 + * @return 应答结果对象,包含对象详情。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam Long userId) { + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysUaaUser sysUaaUser = sysUaaUserService.getByIdWithRelation(userId, MyRelationParam.full()); + if (sysUaaUser == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(sysUaaUser); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/AuthClientDetailsMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/AuthClientDetailsMapper.java new file mode 100644 index 00000000..fa33eb41 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/AuthClientDetailsMapper.java @@ -0,0 +1,26 @@ +package com.orangeforms.uaaadmin.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.uaaadmin.model.AuthClientDetails; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 应用客户端数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface AuthClientDetailsMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param authClientDetailsFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getAuthClientDetailsList( + @Param("authClientDetailsFilter") AuthClientDetails authClientDetailsFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/SysUaaOperatorMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/SysUaaOperatorMapper.java new file mode 100644 index 00000000..c911c108 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/SysUaaOperatorMapper.java @@ -0,0 +1,26 @@ +package com.orangeforms.uaaadmin.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.uaaadmin.model.SysUaaOperator; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * 操作员数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUaaOperatorMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param sysUaaOperatorFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysUaaOperatorList( + @Param("sysUaaOperatorFilter") SysUaaOperator sysUaaOperatorFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/SysUaaUserMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/SysUaaUserMapper.java new file mode 100644 index 00000000..1ede1a96 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/SysUaaUserMapper.java @@ -0,0 +1,26 @@ +package com.orangeforms.uaaadmin.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.uaaadmin.model.SysUaaUser; +import org.apache.ibatis.annotations.Param; + +import java.util.*; + +/** + * UAA用户数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUaaUserMapper extends BaseDaoMapper { + + /** + * 获取过滤后的对象列表。 + * + * @param sysUaaUserFilter 主表过滤对象。 + * @param orderBy 排序字符串,order by从句的参数。 + * @return 对象列表。 + */ + List getSysUaaUserList( + @Param("sysUaaUserFilter") SysUaaUser sysUaaUserFilter, @Param("orderBy") String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/AuthClientDetailsMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/AuthClientDetailsMapper.xml new file mode 100644 index 00000000..54b50469 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/AuthClientDetailsMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + AND zz_auth_client_details.client_desc = #{authClientDetailsFilter.clientDesc} + + + AND zz_auth_client_details.deleted_flag = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/SysUaaOperatorMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/SysUaaOperatorMapper.xml new file mode 100644 index 00000000..e3b5d9dd --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/SysUaaOperatorMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + AND zz_sys_uaa_operator.operator_type = #{sysUaaOperatorFilter.operatorType} + + + + AND CONCAT(IFNULL(zz_sys_uaa_operator.login_name,''), IFNULL(zz_sys_uaa_operator.show_name,'')) LIKE #{safeSearchString} + + + AND zz_sys_uaa_operator.deleted_flag = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/SysUaaUserMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/SysUaaUserMapper.xml new file mode 100644 index 00000000..b825ba9b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/dao/mapper/SysUaaUserMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + AND zz_sys_uaa_user.locked = #{sysUaaUserFilter.locked} + + + AND zz_sys_uaa_user.create_time >= #{sysUaaUserFilter.createTimeStart} + + + AND zz_sys_uaa_user.create_time <= #{sysUaaUserFilter.createTimeEnd} + + + + AND CONCAT(IFNULL(zz_sys_uaa_user.username,''), IFNULL(zz_sys_uaa_user.show_name,'')) LIKE #{safeSearchString} + + + AND zz_sys_uaa_user.deleted_flag = ${@com.orangeforms.common.core.constant.GlobalDeletedFlag@NORMAL} + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/interceptor/AuthenticationInterceptor.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/interceptor/AuthenticationInterceptor.java new file mode 100644 index 00000000..947cf93d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/interceptor/AuthenticationInterceptor.java @@ -0,0 +1,114 @@ +package com.orangeforms.uaaadmin.interceptor; + +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.annotation.NoAuthInterface; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.object.TokenData; +import com.orangeforms.common.core.util.ApplicationContextHolder; +import com.orangeforms.common.core.util.JwtUtil; +import com.orangeforms.common.core.util.RedisKeyUtil; +import com.orangeforms.uaaadmin.config.ApplicationConfig; +import io.jsonwebtoken.Claims; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * 登录用户Token验证、生成和权限验证的拦截器。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class AuthenticationInterceptor implements HandlerInterceptor { + + private final ApplicationConfig appConfig = + ApplicationContextHolder.getBean("applicationConfig"); + private final RedissonClient redissonClient = + ApplicationContextHolder.getBean(RedissonClient.class); + private final String operatorAdminUrlPrefix = "/admin/uaaadmin/sysUaaOperator"; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + String url = request.getRequestURI(); + // 如果接口方法标记NoAuthInterface注解,可以直接跳过Token鉴权验证,这里主要为了测试接口方便 + if (handler instanceof HandlerMethod) { + HandlerMethod hm = (HandlerMethod) handler; + if (hm.getBeanType().getAnnotation(NoAuthInterface.class) != null + || hm.getMethodAnnotation(NoAuthInterface.class) != null) { + return true; + } + } + String token = request.getHeader(appConfig.getTokenHeaderKey()); + if (StringUtils.isBlank(token)) { + token = request.getParameter(appConfig.getTokenHeaderKey()); + } + Claims c = JwtUtil.parseToken(token, appConfig.getTokenSigningKey()); + if (JwtUtil.isNullOrExpired(c)) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + this.outputResponseMessage(response, + ResponseResult.error(ErrorCodeEnum.UNAUTHORIZED_LOGIN, "用户会话已过期或尚未登录,请重新登录!")); + return false; + } + String sessionId = (String) c.get("sessionId"); + RBucket bucket = redissonClient.getBucket(RedisKeyUtil.makeSessionIdKey(sessionId)); + String tokenString = bucket.get(); + if (tokenString == null) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + this.outputResponseMessage(response, + ResponseResult.error(ErrorCodeEnum.UNAUTHORIZED_LOGIN, "用户会话已失效,请重新登录!")); + return false; + } + TokenData tokenData = JSON.parseObject(tokenString, TokenData.class); + TokenData.addToRequest(tokenData); + // 操作员管理的URL接口,只有管理员可以访问。 + if (!tokenData.getIsAdmin() && StringUtils.startsWithIgnoreCase(url, this.operatorAdminUrlPrefix)) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + this.outputResponseMessage(response, + ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); + return false; + } + if (JwtUtil.needToRefresh(c)) { + String refreshedToken = JwtUtil.generateToken(c, appConfig.getExpiration(), appConfig.getTokenSigningKey()); + response.addHeader(appConfig.getRefreshedTokenHeaderKey(), refreshedToken); + } + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + // 这里需要空注解,否则sonar会不happy。 + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + // 这里需要空注解,否则sonar会不happy。 + } + + private void outputResponseMessage(HttpServletResponse response, ResponseResult respObj) { + PrintWriter out; + try { + out = response.getWriter(); + } catch (IOException e) { + log.error("Failed to call OutputResponseMessage.", e); + return; + } + response.setContentType("application/json; charset=utf-8"); + out.print(JSON.toJSONString(respObj)); + out.flush(); + out.close(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/AuthClientDetails.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/AuthClientDetails.java new file mode 100644 index 00000000..b4810ee3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/AuthClientDetails.java @@ -0,0 +1,81 @@ +package com.orangeforms.uaaadmin.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.validator.AddGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +/** + * AuthClientDetails实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_auth_client_details") +public class AuthClientDetails extends BaseModel { + + /** + * 应用标识。 + */ + @NotBlank(message = "数据验证失败,应用标识不能为空!") + @TableId(value = "client_id") + private String clientId; + + /** + * 应用密钥(bcyt) 加密。 + */ + @JSONField(serialize = false) + @TableField(value = "client_secret") + private String clientSecret; + + /** + * 应用密钥(明文)。 + */ + @NotBlank(message = "数据验证失败,应用密钥为空!", groups = {AddGroup.class}) + @TableField(value = "client_secret_plain") + private String clientSecretPlain; + + /** + * 应用名称。 + */ + @TableField(value = "client_desc") + private String clientDesc; + + /** + * 5种oauth授权方式(authorization_code,password,refresh_token,client_credentials)。 + */ + @TableField(value = "authorized_grant_types") + private String authorizedGrantTypes; + + /** + * 回调地址。 + */ + @TableField(value = "web_server_redirect_uri") + private String webServerRedirectUri; + + /** + * access_token有效期。 + */ + @NotNull(message = "数据验证失败,TOKEN 有效期不能为空!") + @TableField(value = "access_token_validity") + private Integer accessTokenValidity; + + /** + * refresh_token有效期。 + */ + @TableField(value = "refresh_token_validity") + private Integer refreshTokenValidity; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @JSONField(serialize = false) + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/SysUaaOperator.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/SysUaaOperator.java new file mode 100644 index 00000000..4d80b01a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/SysUaaOperator.java @@ -0,0 +1,97 @@ +package com.orangeforms.uaaadmin.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.annotation.RelationConstDict; +import com.orangeforms.common.core.annotation.UploadFlagColumn; +import com.orangeforms.common.core.upload.UploadStoreTypeEnum; +import com.orangeforms.common.core.validator.AddGroup; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.uaaadmin.model.constant.OperatorType; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.*; + +/** + * SysUaaOperator实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_uaa_operator") +public class SysUaaOperator extends BaseModel { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + @TableId(value = "operator_id") + private Long operatorId; + + /** + * 用户登录名称。 + */ + @NotBlank(message = "数据验证失败,登录名称不能为空!") + @TableField(value = "login_name") + private String loginName; + + /** + * 密码。 + */ + @JSONField(serialize = false) + @NotBlank(message = "数据验证失败,密码不能为空!", groups = {AddGroup.class}) + private String password; + + /** + * 用户显示名称。 + */ + @NotBlank(message = "数据验证失败,用户昵称不能为空!") + @TableField(value = "show_name") + private String showName; + + /** + * 操作员类型(0: 管理员 1: 普通操作员)。 + */ + @NotNull(message = "数据验证失败,操作员类型不能为空!") + @ConstDictRef(constDictClass = OperatorType.class, message = "数据验证失败,操作员类型为无效值!") + @TableField(value = "operator_type") + private Integer operatorType; + + /** + * 用户头像的Url。 + */ + @UploadFlagColumn(storeType = UploadStoreTypeEnum.LOCAL_SYSTEM) + @TableField(value = "head_image_url") + private String headImageUrl; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @JSONField(serialize = false) + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * login_name / show_name LIKE搜索字符串。 + */ + @TableField(exist = false) + private String searchString; + + public void setSearchString(String searchString) { + this.searchString = MyCommonUtil.replaceSqlWildcard(searchString); + } + + @RelationConstDict( + masterIdField = "operatorType", + constantDictClass = OperatorType.class) + @TableField(exist = false) + private Map operatorTypeDictMap; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/SysUaaUser.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/SysUaaUser.java new file mode 100644 index 00000000..08b3d8ee --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/SysUaaUser.java @@ -0,0 +1,98 @@ +package com.orangeforms.uaaadmin.model; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.util.MyCommonUtil; +import com.orangeforms.common.core.base.model.BaseModel; +import com.orangeforms.common.core.annotation.RelationConstDict; +import com.orangeforms.common.core.validator.AddGroup; +import com.orangeforms.common.core.validator.UpdateGroup; +import com.orangeforms.common.core.validator.ConstDictRef; +import com.orangeforms.uaaadmin.model.constant.UserStatus; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.*; + +/** + * SysUaaUser实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_uaa_user") +public class SysUaaUser extends BaseModel { + + /** + * 主键Id。 + */ + @NotNull(message = "数据验证失败,主键Id不能为空!", groups = {UpdateGroup.class}) + @TableId(value = "user_id") + private Long userId; + + /** + * 用户登录名称。 + */ + @NotBlank(message = "数据验证失败,登录名称不能为空!") + private String username; + + /** + * 密码。 + */ + @JSONField(serialize = false) + @NotBlank(message = "数据验证失败,密码不能为空!", groups = {AddGroup.class}) + private String password; + + /** + * 用户显示名称。 + */ + @NotBlank(message = "数据验证失败,用户昵称不能为空!") + @TableField(value = "show_name") + private String showName; + + /** + * 状态(0: 正常 1: 锁定)。 + */ + @NotNull(message = "数据验证失败,用户状态不能为空!") + @ConstDictRef(constDictClass = UserStatus.class, message = "数据验证失败,用户状态为无效值!") + private Integer locked; + + /** + * 逻辑删除标记字段(1: 正常 -1: 已删除)。 + */ + @JSONField(serialize = false) + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** + * [创建时间] 范围过滤起始值(>=)。 + */ + @TableField(exist = false) + private String createTimeStart; + + /** + * [创建时间] 范围过滤结束值(<=)。 + */ + @TableField(exist = false) + private String createTimeEnd; + + /** + * username / show_name LIKE搜索字符串。 + */ + @TableField(exist = false) + private String searchString; + + public void setSearchString(String searchString) { + this.searchString = MyCommonUtil.replaceSqlWildcard(searchString); + } + + @RelationConstDict( + masterIdField = "locked", + constantDictClass = UserStatus.class) + @TableField(exist = false) + private Map lockedDictMap; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/constant/OperatorType.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/constant/OperatorType.java new file mode 100644 index 00000000..40d2bd1c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/constant/OperatorType.java @@ -0,0 +1,44 @@ +package com.orangeforms.uaaadmin.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 用户类型常量字典对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class OperatorType { + + /** + * 管理员。 + */ + public static final int ADMIN = 0; + /** + * 普通操作员。 + */ + public static final int NORMAL = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(ADMIN, "管理员"); + DICT_MAP.put(NORMAL, "普通操作员"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private OperatorType() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/constant/UserStatus.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/constant/UserStatus.java new file mode 100644 index 00000000..b45778b6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/model/constant/UserStatus.java @@ -0,0 +1,44 @@ +package com.orangeforms.uaaadmin.model.constant; + +import java.util.HashMap; +import java.util.Map; + +/** + * 用户状态常量字典对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +public final class UserStatus { + + /** + * 正常。 + */ + public static final int NORMAL = 0; + /** + * 锁定。 + */ + public static final int LOCKED = 1; + + private static final Map DICT_MAP = new HashMap<>(2); + static { + DICT_MAP.put(NORMAL, "正常"); + DICT_MAP.put(LOCKED, "锁定"); + } + + /** + * 判断参数是否为当前常量字典的合法值。 + * + * @param value 待验证的参数值。 + * @return 合法返回true,否则false。 + */ + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private UserStatus() { + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/AuthClientDetailsService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/AuthClientDetailsService.java new file mode 100644 index 00000000..e2368b0a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/AuthClientDetailsService.java @@ -0,0 +1,60 @@ +package com.orangeforms.uaaadmin.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.uaaadmin.model.AuthClientDetails; + +import java.util.*; + +/** + * 应用客户端数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface AuthClientDetailsService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param authClientDetails 新增对象。 + * @return 返回新增对象。 + */ + AuthClientDetails saveNew(AuthClientDetails authClientDetails); + + /** + * 更新数据对象。 + * + * @param authClientDetails 更新的对象。 + * @param originalAuthClientDetails 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(AuthClientDetails authClientDetails, AuthClientDetails originalAuthClientDetails); + + /** + * 删除指定数据。 + * + * @param clientId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(String clientId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getAuthClientDetailsListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getAuthClientDetailsList(AuthClientDetails filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getAuthClientDetailsList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getAuthClientDetailsListWithRelation(AuthClientDetails filter, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/SysUaaOperatorService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/SysUaaOperatorService.java new file mode 100644 index 00000000..631e3deb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/SysUaaOperatorService.java @@ -0,0 +1,77 @@ +package com.orangeforms.uaaadmin.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.uaaadmin.model.SysUaaOperator; + +import java.util.*; + +/** + * 操作员数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUaaOperatorService extends IBaseService { + + /** + * 根据登录名获取UAA操作员对象。 + * + * @param loginName UAA操作员登录名。 + * @return UAA操作员对象。 + */ + SysUaaOperator getUaaOperatorByLoginName(String loginName); + + /** + * 保存新增对象。 + * + * @param sysUaaOperator 新增对象。 + * @return 返回新增对象。 + */ + SysUaaOperator saveNew(SysUaaOperator sysUaaOperator); + + /** + * 更新数据对象。 + * + * @param sysUaaOperator 更新的对象。 + * @param originalSysUaaOperator 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(SysUaaOperator sysUaaOperator, SysUaaOperator originalSysUaaOperator); + + /** + * 修改密码。 + * + * @param uaaOperatorId 操作员Id。 + * @param newPass 新密码明文。 + * @return 成功返回true,否则false。 + */ + boolean changePassword(Long uaaOperatorId, String newPass); + + /** + * 删除指定数据。 + * + * @param operatorId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long operatorId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUaaOperatorListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUaaOperatorList(SysUaaOperator filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysUaaOperatorList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUaaOperatorListWithRelation(SysUaaOperator filter, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/SysUaaUserService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/SysUaaUserService.java new file mode 100644 index 00000000..edb620b0 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/SysUaaUserService.java @@ -0,0 +1,69 @@ +package com.orangeforms.uaaadmin.service; + +import com.orangeforms.common.core.base.service.IBaseService; +import com.orangeforms.uaaadmin.model.SysUaaUser; + +import java.util.*; + +/** + * UAA用户数据操作服务接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUaaUserService extends IBaseService { + + /** + * 保存新增对象。 + * + * @param sysUaaUser 新增对象。 + * @return 返回新增对象。 + */ + SysUaaUser saveNew(SysUaaUser sysUaaUser); + + /** + * 更新数据对象。 + * + * @param sysUaaUser 更新的对象。 + * @param originalSysUaaUser 原有数据对象。 + * @return 成功返回true,否则false。 + */ + boolean update(SysUaaUser sysUaaUser, SysUaaUser originalSysUaaUser); + + /** + * 修改密码。 + * + * @param uaaUserId 用户Id。 + * @param newPass 新密码明文。 + * @return 成功返回true,否则false。 + */ + boolean changePassword(Long uaaUserId, String newPass); + + /** + * 删除指定数据。 + * + * @param userId 主键Id。 + * @return 成功返回true,否则false。 + */ + boolean remove(Long userId); + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUaaUserListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUaaUserList(SysUaaUser filter, String orderBy); + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysUaaUserList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + List getSysUaaUserListWithRelation(SysUaaUser filter, String orderBy); +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/AuthClientDetailsServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/AuthClientDetailsServiceImpl.java new file mode 100644 index 00000000..25fb1dd1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/AuthClientDetailsServiceImpl.java @@ -0,0 +1,111 @@ +package com.orangeforms.uaaadmin.service.impl; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.uaaadmin.service.AuthClientDetailsService; +import com.orangeforms.uaaadmin.dao.AuthClientDetailsMapper; +import com.orangeforms.uaaadmin.model.AuthClientDetails; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 应用客户端数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Service("authClientDetailsService") +public class AuthClientDetailsServiceImpl extends BaseService implements AuthClientDetailsService { + + @Autowired + private AuthClientDetailsMapper authClientDetailsMapper; + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return authClientDetailsMapper; + } + + /** + * 保存新增对象。 + * + * @param authClientDetails 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public AuthClientDetails saveNew(AuthClientDetails authClientDetails) { + authClientDetails.setClientSecret(passwordEncoder.encode(authClientDetails.getClientSecretPlain())); + MyModelUtil.fillCommonsForInsert(authClientDetails); + authClientDetailsMapper.insert(authClientDetails); + return authClientDetails; + } + + /** + * 更新数据对象。 + * + * @param authClientDetails 更新的对象。 + * @param originalAuthClientDetails 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(AuthClientDetails authClientDetails, AuthClientDetails originalAuthClientDetails) { + authClientDetails.setClientSecret(originalAuthClientDetails.getClientSecret()); + authClientDetails.setClientSecretPlain(originalAuthClientDetails.getClientSecretPlain()); + MyModelUtil.fillCommonsForUpdate(authClientDetails, originalAuthClientDetails); + return authClientDetailsMapper.updateById(authClientDetails) == 1; + } + + /** + * 删除指定数据。 + * + * @param clientId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(String clientId) { + return authClientDetailsMapper.deleteById(clientId) == 1; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getAuthClientDetailsListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getAuthClientDetailsList(AuthClientDetails filter, String orderBy) { + return authClientDetailsMapper.getAuthClientDetailsList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getAuthClientDetailsList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getAuthClientDetailsListWithRelation(AuthClientDetails filter, String orderBy) { + List resultList = authClientDetailsMapper.getAuthClientDetailsList(filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.normal()); + return resultList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/SysUaaOperatorServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/SysUaaOperatorServiceImpl.java new file mode 100644 index 00000000..01f0d7d2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/SysUaaOperatorServiceImpl.java @@ -0,0 +1,143 @@ +package com.orangeforms.uaaadmin.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.uaaadmin.service.SysUaaOperatorService; +import com.orangeforms.uaaadmin.dao.SysUaaOperatorMapper; +import com.orangeforms.uaaadmin.model.SysUaaOperator; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 操作员数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Service("sysUaaOperatorService") +public class SysUaaOperatorServiceImpl extends BaseService implements SysUaaOperatorService { + + @Autowired + private SysUaaOperatorMapper sysUaaOperatorMapper; + @Autowired + private PasswordEncoder passwordEncoder; + @Autowired + private IdGeneratorWrapper idGenerator; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysUaaOperatorMapper; + } + + /** + * 根据登录名获取UAA操作员对象。 + * @param loginName UAA操作员登录名。 + * @return UAA操作员对象。 + */ + @Override + public SysUaaOperator getUaaOperatorByLoginName(String loginName) { + SysUaaOperator sysUaaOperator = new SysUaaOperator(); + sysUaaOperator.setLoginName(loginName); + return sysUaaOperatorMapper.selectOne(new QueryWrapper<>(sysUaaOperator)); + } + + /** + * 保存新增对象。 + * + * @param sysUaaOperator 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysUaaOperator saveNew(SysUaaOperator sysUaaOperator) { + sysUaaOperator.setPassword(passwordEncoder.encode(sysUaaOperator.getPassword())); + sysUaaOperator.setOperatorId(idGenerator.nextLongId()); + MyModelUtil.fillCommonsForInsert(sysUaaOperator); + sysUaaOperatorMapper.insert(sysUaaOperator); + return sysUaaOperator; + } + + /** + * 更新数据对象。 + * + * @param sysUaaOperator 更新的对象。 + * @param originalSysUaaOperator 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysUaaOperator sysUaaOperator, SysUaaOperator originalSysUaaOperator) { + sysUaaOperator.setPassword(originalSysUaaOperator.getPassword()); + MyModelUtil.fillCommonsForUpdate(sysUaaOperator, originalSysUaaOperator); + return sysUaaOperatorMapper.updateById(sysUaaOperator) == 1; + } + + /** + * 修改密码。 + * + * @param uaaOperatorId 操作员Id。 + * @param newPass 新密码明文。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean changePassword(Long uaaOperatorId, String newPass) { + SysUaaOperator updatedOperator = new SysUaaOperator(); + updatedOperator.setOperatorId(uaaOperatorId); + updatedOperator.setPassword(passwordEncoder.encode(newPass)); + return sysUaaOperatorMapper.updateById(updatedOperator) == 1; + } + + /** + * 删除指定数据。 + * + * @param operatorId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long operatorId) { + return sysUaaOperatorMapper.deleteById(operatorId) == 1; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUaaOperatorListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUaaOperatorList(SysUaaOperator filter, String orderBy) { + return sysUaaOperatorMapper.getSysUaaOperatorList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysUaaOperatorList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUaaOperatorListWithRelation(SysUaaOperator filter, String orderBy) { + List resultList = sysUaaOperatorMapper.getSysUaaOperatorList(filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.normal()); + return resultList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/SysUaaUserServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/SysUaaUserServiceImpl.java new file mode 100644 index 00000000..e6b23a0d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/java/com/orangeforms/uaaadmin/service/impl/SysUaaUserServiceImpl.java @@ -0,0 +1,131 @@ +package com.orangeforms.uaaadmin.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.object.MyRelationParam; +import com.orangeforms.common.core.util.MyModelUtil; +import com.orangeforms.common.sequence.wrapper.IdGeneratorWrapper; +import com.orangeforms.uaaadmin.service.SysUaaUserService; +import com.orangeforms.uaaadmin.dao.SysUaaUserMapper; +import com.orangeforms.uaaadmin.model.SysUaaUser; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * UAA用户数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Service("sysUaaUserService") +public class SysUaaUserServiceImpl extends BaseService implements SysUaaUserService { + + @Autowired + private SysUaaUserMapper sysUaaUserMapper; + @Autowired + private IdGeneratorWrapper idGenerator; + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysUaaUserMapper; + } + + /** + * 保存新增对象。 + * + * @param sysUaaUser 新增对象。 + * @return 返回新增对象。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public SysUaaUser saveNew(SysUaaUser sysUaaUser) { + sysUaaUser.setUserId(idGenerator.nextLongId()); + sysUaaUser.setPassword(passwordEncoder.encode(sysUaaUser.getPassword())); + MyModelUtil.fillCommonsForInsert(sysUaaUser); + sysUaaUserMapper.insert(sysUaaUser); + return sysUaaUser; + } + + /** + * 更新数据对象。 + * + * @param sysUaaUser 更新的对象。 + * @param originalSysUaaUser 原有数据对象。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean update(SysUaaUser sysUaaUser, SysUaaUser originalSysUaaUser) { + sysUaaUser.setPassword(originalSysUaaUser.getPassword()); + MyModelUtil.fillCommonsForUpdate(sysUaaUser, originalSysUaaUser); + return sysUaaUserMapper.updateById(sysUaaUser) == 1; + } + + /** + * 修改密码。 + * + * @param uaaUserId 用户Id。 + * @param newPass 新密码明文。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean changePassword(Long uaaUserId, String newPass) { + SysUaaUser updatedUser = new SysUaaUser(); + updatedUser.setUserId(uaaUserId); + updatedUser.setPassword(passwordEncoder.encode(newPass)); + return sysUaaUserMapper.updateById(updatedUser) == 1; + } + + /** + * 删除指定数据。 + * + * @param userId 主键Id。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean remove(Long userId) { + return sysUaaUserMapper.deleteById(userId) == 1; + } + + /** + * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 + * 如果需要同时获取关联数据,请移步(getSysUaaUserListWithRelation)方法。 + * + * @param filter 过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUaaUserList(SysUaaUser filter, String orderBy) { + return sysUaaUserMapper.getSysUaaUserList(filter, orderBy); + } + + /** + * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 + * 如果仅仅需要获取主表数据,请移步(getSysUaaUserList),以便获取更好的查询性能。 + * + * @param filter 主表过滤对象。 + * @param orderBy 排序参数。 + * @return 查询结果集。 + */ + @Override + public List getSysUaaUserListWithRelation(SysUaaUser filter, String orderBy) { + List resultList = sysUaaUserMapper.getSysUaaUserList(filter, orderBy); + this.buildRelationForDataList(resultList, MyRelationParam.normal()); + return resultList; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/resources/bootstrap.yml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..81d740e2 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/resources/bootstrap.yml @@ -0,0 +1,17 @@ +spring: + application: + name: uaa-admin + profiles: + active: dev + cloud: + nacos: + config: + server-addr: localhost:8848 + file-extension: yaml + # 共享配置文件,排序越高后,优先级越高。 + shared-configs: + - data-id: application-dev.yaml + group: DEFAULT_GROUP + refresh: true + main: + allow-bean-definition-overriding: true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/resources/log4j2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/resources/log4j2.xml new file mode 100644 index 00000000..034a43d1 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/src/main/resources/log4j2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + ./zzlogs/uaa-admin + + ./zzlogs/uaa-admin/backup + + info + + + + + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] T:[%X{traceId}] S:[%X{sessionId}] U:[%X{userId}] [%t] ==> [%traceId] %msg%n + + + 31 + + 20M + + + + + + + localhost:9092 + 10000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/uaa-admin.iml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/uaa-admin.iml new file mode 100644 index 00000000..052808f6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-admin/uaa-admin.iml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/pom.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/pom.xml new file mode 100644 index 00000000..6473be4d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/pom.xml @@ -0,0 +1,80 @@ + + + + com.orangeforms + uaa + 1.0.0 + + 4.0.0 + + uaa-auth + 1.0.0 + uaa-auth + jar + + + + com.orangeforms + common-core + 1.0.0 + + + org.springframework.cloud + spring-cloud-starter-oauth2 + + + org.springframework.security.oauth + spring-security-oauth2 + + + + + + org.springframework.security.oauth + spring-security-oauth2 + 2.3.8.RELEASE + + + + org.springframework.session + spring-session-data-redis + + + org.springframework.boot + spring-boot-starter-data-redis + + + spring-boot-starter-logging + org.springframework.boot + + + + + + + + + src/main/resources + + **/*.* + + false + + + src/main/java + + **/*.xml + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/UaaAuthApplication.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/UaaAuthApplication.java new file mode 100644 index 00000000..93613b5f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/UaaAuthApplication.java @@ -0,0 +1,20 @@ +package com.orangeforms.uaaauth; + +import org.springframework.boot.SpringApplication; +import org.springframework.cloud.client.SpringCloudApplication; +import org.springframework.context.annotation.ComponentScan; + +/** + * UAA服务启动类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@SpringCloudApplication +@ComponentScan("com.orangeforms") +public class UaaAuthApplication { + + public static void main(String[] args) { + SpringApplication.run(UaaAuthApplication.class, args); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthHttpMessageConverter.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthHttpMessageConverter.java new file mode 100644 index 00000000..97976362 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthHttpMessageConverter.java @@ -0,0 +1,50 @@ +package com.orangeforms.uaaauth.config; + +import org.springframework.http.HttpInputMessage; +import org.springframework.http.HttpOutputMessage; +import org.springframework.http.MediaType; +import org.springframework.http.converter.AbstractHttpMessageConverter; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; + +import java.io.IOException; + +/** + * OAuth2AccessToken 接口对象的专有序列化转换器。如果不指定该转换器,并采用缺省的Fastjson, + * /oauth/token返回的对象参数格式不符合oauth2的标准。 + * 由于OAuth2AccessToken接口对象中的每一个字段,都基于jackson指定了不同的序列化方式,因此, + * 这里我们针对OAuth2AccessToken,仍然保留使用jackson的序列化方式。 + * + * @author Jerry + * @date 2020-08-08 + */ +@SuppressWarnings("NullableProblems") +public class AuthHttpMessageConverter extends AbstractHttpMessageConverter { + + private final MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); + + public AuthHttpMessageConverter() { + super(MediaType.APPLICATION_JSON); + } + + @Override + protected boolean supports(Class clazz) { + return clazz.equals(DefaultOAuth2AccessToken.class); + } + + @Override + protected DefaultOAuth2AccessToken readInternal( + Class clazz, HttpInputMessage inputMessage) + throws IOException, HttpMessageNotReadableException { + throw new UnsupportedOperationException( + "This converter is only used for converting DefaultOAuth2AccessToken to json."); + } + + @Override + protected void writeInternal(DefaultOAuth2AccessToken accessToken, HttpOutputMessage outputMessage) + throws IOException, HttpMessageNotWritableException { + mappingJackson2HttpMessageConverter.write(accessToken, MediaType.APPLICATION_JSON, outputMessage); + } +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthWebMvcConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthWebMvcConfig.java new file mode 100644 index 00000000..953ba5f4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthWebMvcConfig.java @@ -0,0 +1,26 @@ +package com.orangeforms.uaaauth.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +/** + * 为OAuth2AccessToken 接口对象设定专有的序列化转换器。如果不指定该转换器,并采用缺省的Fastjson, + * /oauth/token返回的对象参数格式不符合oauth2的标准。 + * 由于OAuth2AccessToken接口对象中的每一个字段,都基于jackson指定了不同的序列化方式,因此, + * 这里我们针对OAuth2AccessToken,仍然保留使用jackson的序列化方式。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +public class AuthWebMvcConfig implements WebMvcConfigurer { + + @Override + public void extendMessageConverters(List> converters) { + AuthHttpMessageConverter authHttpMessageConverter = new AuthHttpMessageConverter(); + converters.add(0, authHttpMessageConverter); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthorizationServerConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthorizationServerConfig.java new file mode 100644 index 00000000..bef5ca24 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/AuthorizationServerConfig.java @@ -0,0 +1,115 @@ +package com.orangeforms.uaaauth.config; + +import com.orangeforms.uaaauth.service.ClientDetailsServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.InternalAuthenticationServiceException; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.oauth2.common.exceptions.*; +import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; +import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; +import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.code.RandomValueAuthorizationCodeServices; +import org.springframework.security.oauth2.provider.error.DefaultWebResponseExceptionTranslator; +import org.springframework.security.oauth2.provider.error.WebResponseExceptionTranslator; +import org.springframework.security.oauth2.provider.token.TokenEnhancerChain; +import org.springframework.security.oauth2.provider.token.TokenStore; +import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; + +import java.util.Collections; + +/** + * 认证授权服务配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +@EnableAuthorizationServer +public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { + + @Autowired + private AuthenticationManager authenticationManager; + @Autowired + private UserDetailsService userDetailsService; + @Autowired + private ClientDetailsServiceImpl clientDetailsService; + @Autowired + private TokenStore tokenStore; + @Autowired + private RandomValueAuthorizationCodeServices authorizationCodeServices; + @Autowired + private WebResponseExceptionTranslator webResponseExceptionTranslator; + + @Override + public void configure(ClientDetailsServiceConfigurer clients) throws Exception { + clients.withClientDetails(clientDetailsService); + } + + @Override + public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { + // 将用户对象作为token的附加信息,一同返回给应用服务,减少一次网络交互。 + TokenEnhancerChain enhancerChain = new TokenEnhancerChain(); + enhancerChain.setTokenEnhancers(Collections.singletonList(new CustomTokenEnhancer())); + // 配置令牌存储对象,这里我们使用了下面的RedisTokenStore + endpoints.tokenStore(tokenStore) + .authenticationManager(authenticationManager) + // 获取用户数据服务,该bean的实际类型为UserDetailsServiceImpl。 + .userDetailsService(userDetailsService) + // 授权码被存储在Redis,该bean的实际类型为RedisAuthorizationCodeServices。 + .authorizationCodeServices(authorizationCodeServices) + // 自定义异常处理。 + .exceptionTranslator(webResponseExceptionTranslator) + // 扩展token携带的数据,在登录验证成功后,同时返回了userId,以供应用服务使用,减少了与uaa-auth的交互次数。 + // 该bean的实际类型为CustomTokenEnhancer + .tokenEnhancer(enhancerChain); + } + + @Override + public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { + security + .tokenKeyAccess("isAuthenticated()") + .checkTokenAccess("permitAll()") + // 让/oauth/token支持client_id以及client_secret作表单登录认证 + .allowFormAuthenticationForClients(); + } + + @Bean + public TokenStore tokenStore(RedisConnectionFactory connectionFactory) { + return new RedisTokenStore(connectionFactory); + } + + @Bean + public WebResponseExceptionTranslator webResponseExceptionTranslator() { + return new DefaultWebResponseExceptionTranslator() { + public static final String BAD_MSG = "坏的凭证"; + + @Override + public ResponseEntity translate(Exception e) throws Exception { + OAuth2Exception oAuth2Exception; + if (e.getMessage() != null && e.getMessage().equals(BAD_MSG)) { + oAuth2Exception = new InvalidGrantException("用户名或密码错误", e); + } else if (e instanceof InternalAuthenticationServiceException) { + oAuth2Exception = new InvalidGrantException(e.getMessage(), e); + } else if (e instanceof RedirectMismatchException) { + oAuth2Exception = new InvalidGrantException(e.getMessage(), e); + } else if (e instanceof InvalidScopeException) { + oAuth2Exception = new InvalidGrantException(e.getMessage(), e); + } else { + oAuth2Exception = new UnsupportedResponseTypeException("服务内部错误", e); + } + ResponseEntity response = super.translate(oAuth2Exception); + ResponseEntity.status(oAuth2Exception.getHttpErrorCode()); + response.getBody().addAdditionalInformation("respCode", oAuth2Exception.getHttpErrorCode() + ""); + response.getBody().addAdditionalInformation("respMsg", oAuth2Exception.getMessage()); + return response; + } + }; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/CustomTokenEnhancer.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/CustomTokenEnhancer.java new file mode 100644 index 00000000..cd2f2142 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/CustomTokenEnhancer.java @@ -0,0 +1,36 @@ +package com.orangeforms.uaaauth.config; + +import org.springframework.security.core.userdetails.User; +import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.security.oauth2.provider.token.TokenEnhancer; + +import java.util.HashMap; +import java.util.Map; + +/** + * 自定义访问令牌对象的数据增强器。 + * 在/oauth/token接口中,仅仅返回最基本的验证数据,这里我们通过增强器,将username也连同返回, + * 其目的主要为两点: + * 1. 避免uaa客户端在获取access_token后,再次发出请求获取username,提升验证效率。 + * 2. 给出一个典型的例子,今后如果需要添加更多的信息,可以直接在这里修改。 + * + * @author Jerry + * @date 2020-08-08 + */ +public class CustomTokenEnhancer implements TokenEnhancer { + + @Override + public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { + final Map additionalInfo = new HashMap<>(1); + Object principal = authentication.getPrincipal(); + // 增加id参数 + if (principal instanceof User) { + User user = (User) principal; + additionalInfo.put("username", user.getUsername()); + } + ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo); + return accessToken; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/DataSourceConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/DataSourceConfig.java new file mode 100644 index 00000000..3d2b4cc6 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/DataSourceConfig.java @@ -0,0 +1,30 @@ +package com.orangeforms.uaaauth.config; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.mybatis.spring.annotation.MapperScan; + +import javax.sql.DataSource; + +/** + * 数据源配置Bean对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Configuration +@EnableTransactionManagement +@MapperScan(value = {"com.orangeforms.*.dao", "com.orangeforms.common.*.dao"}) +public class DataSourceConfig { + + @Bean(initMethod = "init", destroyMethod = "close") + @Primary + @ConfigurationProperties(prefix = "spring.datasource.druid") + public DataSource druidDataSource() { + return DruidDataSourceBuilder.create().build(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/SecurityConfig.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/SecurityConfig.java new file mode 100644 index 00000000..8f9591f4 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/config/SecurityConfig.java @@ -0,0 +1,135 @@ +package com.orangeforms.uaaauth.config; + +import com.orangeforms.common.core.constant.ApplicationConstant; +import com.orangeforms.common.core.util.RsaUtil; +import com.orangeforms.uaaauth.handler.AuthLogoutHandler; +import com.orangeforms.uaaauth.handler.AuthLogoutSuccessHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; + +/** + * 认证授权服务安全配置类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Configuration +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + private UserDetailsService userDetailsService; + + /** + * 全局用户信息。 + */ + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService).passwordEncoder(new CustomPasswordEncoder()); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.formLogin() + // login.html位于resources/static目录中,用户登录时,将使用该页面。 + .loginPage("/login.html") + // 登录处理url。在login.html的表单提交中,将使用该uri。 + .loginProcessingUrl("/uaa/login") + // 注册登录成功后的处理器。 + .successHandler(loginSuccessHandler()) + .and() + .logout() + // 登出时调用的uri,该uri的处理逻辑,已在oauth内置的filter中实现。 + .logoutUrl("/oauth/remove/token") + // 登出成功处理器 + .logoutSuccessHandler(new AuthLogoutSuccessHandler()) + // 登出操作处理器。 + .addLogoutHandler(authLogoutHandler()) + // 登出后清除session。以使用户下次访问授权页面时,必须重新进行登录验证。 + .clearAuthentication(true) + .and() + .csrf().disable() + // 解决不允许显示在iframe的问题 + .headers().frameOptions().disable().cacheControl(); + // 授权码模式单独处理,需要session的支持,此模式可以支持所有oauth2的认证 + http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED); + } + + /** + * 自定义的密码匹配对象。相比于Spring Security的BCryptPasswordEncoder,会现将前端传入 + * 的密码进行RSA解密,再将解密后的结果交由BCryptPasswordEncoder对象进行密码匹配。 + */ + static class CustomPasswordEncoder extends BCryptPasswordEncoder { + @Override + public boolean matches(CharSequence rawPassword, String encodedPassword) { + try { + rawPassword = URLDecoder.decode(rawPassword.toString(), StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + log.error("Failed to call URLDecoder.decode for passwd [" + rawPassword + "]", e); + return false; + } + try { + rawPassword = RsaUtil.decrypt(rawPassword.toString(), ApplicationConstant.PRIVATE_KEY); + } catch (Exception e) { + log.error("Failed to call RsaUtil.decrypt for passwd [" + rawPassword + "]", e); + return false; + } + return super.matches(rawPassword, encodedPassword); + } + } + + /** + * 用户认证管理对象。 + */ + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + /** + * 登出操作处理器。 + * @return 登出操作处理器。 + */ + @Bean + public AuthLogoutHandler authLogoutHandler() { + return new AuthLogoutHandler(); + } + + /** + * 登录成功操作处理器。 + * @return 登录成功操作处理器。 + */ + @Bean + public AuthenticationSuccessHandler loginSuccessHandler() { + return new SavedRequestAwareAuthenticationSuccessHandler() { + @Override + public void onAuthenticationSuccess( + HttpServletRequest request, + HttpServletResponse response, + Authentication authentication) throws IOException, ServletException { + super.onAuthenticationSuccess(request, response, authentication); + } + }; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/controller/SysUaaUserController.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/controller/SysUaaUserController.java new file mode 100644 index 00000000..d61158cb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/controller/SysUaaUserController.java @@ -0,0 +1,73 @@ +package com.orangeforms.uaaauth.controller; + +import com.orangeforms.uaaauth.model.SysUaaUser; +import com.orangeforms.uaaauth.service.SysUaaUserService; +import com.orangeforms.common.core.constant.ErrorCodeEnum; +import com.orangeforms.common.core.object.ResponseResult; +import com.orangeforms.common.core.util.MyCommonUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.*; + +/** + * UaaUser用户对象查询示例接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@RestController +@RequestMapping("/uaaauth/sysUaaUser") +public class SysUaaUserController { + + @Autowired + private SysUaaUserService sysUaaUserService; + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 获取UAA授权用户的相信信息。 + * 在Uaa客户端应用正确获取access_token后,可通过请求 + * /admin/uaa/sysUaaUser/view?username=xxx&access_token=yyy 获取用户的详情信息。 + * + * @param username 用户名。 + * @return 授权用户的详细信息。 + */ + @GetMapping("/view") + public ResponseResult view(@RequestParam String username) { + if (MyCommonUtil.existBlankArgument(username)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 这里查看用户数据时候,需要把用户多对多关联的角色和数据权限Id一并查出。 + SysUaaUser user = sysUaaUserService.getByUsername(username); + if (user == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(user); + } + + /** + * 操作员修改自己的密码。 + * + * @param username 用户名。 + * @param oldPass 原有密码明文。 + * @param newPass 新密码明文。 + * @return 应答结果对象。 + */ + @GetMapping("/changePassword") + public ResponseResult changePassword( + @RequestParam String username, @RequestParam String oldPass, @RequestParam String newPass) { + if (MyCommonUtil.existBlankArgument(newPass, oldPass)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysUaaUser user = sysUaaUserService.getByUsername(username); + if (user == null || !passwordEncoder.matches(oldPass, user.getPassword())) { + return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD); + } + if (!sysUaaUserService.changePassword(user.getUserId(), newPass)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/AuthClientDetailsMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/AuthClientDetailsMapper.java new file mode 100644 index 00000000..9db7d070 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/AuthClientDetailsMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.uaaauth.dao; + +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import com.orangeforms.uaaauth.model.AuthClientDetails; + +/** + * UAA应用客户端数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface AuthClientDetailsMapper extends BaseDaoMapper { +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/SysUaaUserMapper.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/SysUaaUserMapper.java new file mode 100644 index 00000000..dae093cb --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/SysUaaUserMapper.java @@ -0,0 +1,13 @@ +package com.orangeforms.uaaauth.dao; + +import com.orangeforms.uaaauth.model.SysUaaUser; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; + +/** + * UAA用户管理数据操作访问接口。 + * + * @author Jerry + * @date 2020-08-08 + */ +public interface SysUaaUserMapper extends BaseDaoMapper { +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/mapper/AuthClientDetailsMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/mapper/AuthClientDetailsMapper.xml new file mode 100644 index 00000000..ab5cc68f --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/mapper/AuthClientDetailsMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/mapper/SysUaaUserMapper.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/mapper/SysUaaUserMapper.xml new file mode 100644 index 00000000..41f3dfc7 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/dao/mapper/SysUaaUserMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/handler/AuthLogoutHandler.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/handler/AuthLogoutHandler.java new file mode 100644 index 00000000..e85ec7fa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/handler/AuthLogoutHandler.java @@ -0,0 +1,39 @@ +package com.orangeforms.uaaauth.handler; + +import com.orangeforms.uaaauth.util.AuthUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.provider.token.TokenStore; +import org.springframework.security.web.authentication.logout.LogoutHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 登出操作处理器对象。这里将同时清空redis中的access_token。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class AuthLogoutHandler implements LogoutHandler { + @Autowired + private TokenStore tokenStore; + + @Override + public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { + String token = request.getParameter("token"); + if (StringUtils.isBlank(token)) { + token = AuthUtils.extractToken(request); + } + if (StringUtils.isNotBlank(token)) { + OAuth2AccessToken existingAccessToken = tokenStore.readAccessToken(token); + if (existingAccessToken != null) { + tokenStore.removeAccessToken(existingAccessToken); + } + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/handler/AuthLogoutSuccessHandler.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/handler/AuthLogoutSuccessHandler.java new file mode 100644 index 00000000..2b494e3a --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/handler/AuthLogoutSuccessHandler.java @@ -0,0 +1,49 @@ +package com.orangeforms.uaaauth.handler; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.orangeforms.common.core.object.ResponseResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.DefaultRedirectStrategy; +import org.springframework.security.web.RedirectStrategy; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; + +/** + * 登出成功处理器对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public class AuthLogoutSuccessHandler implements LogoutSuccessHandler { + private final RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); + + @Override + public void onLogoutSuccess( + HttpServletRequest request, + HttpServletResponse response, + Authentication authentication) throws IOException { + String redirectUri = request.getParameter("redirect_uri"); + if (StrUtil.isNotEmpty(redirectUri)) { + // 重定向指定的地址 + redirectStrategy.sendRedirect(request, response, redirectUri); + } else { + response.setStatus(HttpStatus.OK.value()); + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + PrintWriter writer = response.getWriter(); + String jsonStr = JSON.toJSONString(ResponseResult.success("登出成功")); + writer.write(jsonStr); + writer.flush(); + } + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/model/AuthClientDetails.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/model/AuthClientDetails.java new file mode 100644 index 00000000..cf94264b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/model/AuthClientDetails.java @@ -0,0 +1,76 @@ +package com.orangeforms.uaaauth.model; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.base.model.BaseModel; + +/** + * OAuth2 应用客户端表的实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_auth_client_details") +public class AuthClientDetails extends BaseModel { + + /** + * 应用标识。 + */ + @TableId(value = "client_id") + private String clientId; + + /** + * 应用密钥(bcyt) 加密。 + */ + @JSONField(serialize = false) + @TableField(value = "client_secret") + private String clientSecret; + + /** + * 应用密钥(明文)。 + */ + @TableField(value = "client_secret_plain") + private String clientSecretPlain; + + /** + * 应用描述。 + */ + @TableField(value = "client_desc") + private String clientDesc; + + /** + * 5种oauth授权方式(authorization_code,password,refresh_token,client_credentials)。 + */ + @TableField(value = "authorized_grant_types") + private String authorizedGrantTypes; + + /** + * 回调地址 。 + */ + @TableField(value = "web_server_redirect_uri") + private String webServerRedirectUri; + + /** + * access_token有效期。 + */ + @TableField(value = "access_token_validity") + private Integer accessTokenValidity; + + /** + * refresh_token有效期。 + */ + @TableField(value = "refresh_token_validity") + private Integer refreshTokenValidity; + + /** + * 是否删除(1: 正常,-1: 删除) + */ + @JSONField(serialize = false) + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/model/SysUaaUser.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/model/SysUaaUser.java new file mode 100644 index 00000000..df127c2b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/model/SysUaaUser.java @@ -0,0 +1,62 @@ +package com.orangeforms.uaaauth.model; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.*; +import com.orangeforms.common.core.base.model.BaseModel; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * SysUaaUser实体对象。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "zz_sys_uaa_user") +public class SysUaaUser extends BaseModel { + + /** + * 用户Id。 + */ + @NotNull(message = "数据验证失败,用户Id不能为空!") + @TableId(value = "user_id") + private Long userId; + + /** + * 登录用户名。 + */ + @NotBlank(message = "数据验证失败,用户名不能为空!") + private String username; + + /** + * 用户密码。 + */ + @NotBlank(message = "数据验证失败,用户密码不能为空!") + private String password; + + /** + * 用户显示名称。 + */ + @NotBlank(message = "数据验证失败,用户显示名称不能为空!") + @TableField(value = "show_name") + private String showName; + + /** + * 用户状态(0: 正常 1: 锁定)。 + */ + @NotNull(message = "数据验证失败,用户状态不能为空!") + private Boolean locked; + + /** + * 是否删除(1: 正常,-1: 删除) + */ + @JSONField(serialize = false) + @TableLogic + @TableField(value = "deleted_flag") + private Integer deletedFlag; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/ClientDetailsServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/ClientDetailsServiceImpl.java new file mode 100644 index 00000000..82921ddc --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/ClientDetailsServiceImpl.java @@ -0,0 +1,55 @@ +package com.orangeforms.uaaauth.service; + +import com.orangeforms.uaaauth.dao.AuthClientDetailsMapper; +import com.orangeforms.uaaauth.model.AuthClientDetails; +import com.orangeforms.common.core.constant.GlobalDeletedFlag; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.oauth2.provider.ClientDetails; +import org.springframework.security.oauth2.provider.ClientDetailsService; +import org.springframework.security.oauth2.provider.ClientRegistrationException; +import org.springframework.security.oauth2.provider.client.BaseClientDetails; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.Collections; +import java.util.stream.Collectors; + +/** + * UAA客户端应用数据操作服务类。该类必须为ClientDetailsService接口的实现类。 + * loadClientByClientId方法,被Oauth2框架调用获取客户端数据。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Service +public class ClientDetailsServiceImpl implements ClientDetailsService { + + @Autowired + private AuthClientDetailsMapper clientDetailsMapper; + + @Override + public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException { + AuthClientDetails authClientDetails = clientDetailsMapper.selectById(clientId); + if (authClientDetails == null || authClientDetails.getDeletedFlag() == GlobalDeletedFlag.DELETED) { + throw new ClientRegistrationException("应用Id不存在!"); + } + BaseClientDetails clientDetails = new BaseClientDetails(); + clientDetails.setClientId(authClientDetails.getClientId()); + clientDetails.setClientSecret(authClientDetails.getClientSecret()); + clientDetails.setAccessTokenValiditySeconds(authClientDetails.getAccessTokenValidity()); + clientDetails.setRefreshTokenValiditySeconds(authClientDetails.getRefreshTokenValidity()); + clientDetails.setScope(Collections.singletonList("all")); + // 这里设置为"true",表示所有的scope都会自动审批通过。 + clientDetails.setAutoApproveScopes(Collections.singletonList("true")); + if (StringUtils.isNotBlank(authClientDetails.getAuthorizedGrantTypes())) { + clientDetails.setAuthorizedGrantTypes(Arrays.stream(StringUtils.split( + authClientDetails.getAuthorizedGrantTypes(), ",")).collect(Collectors.toSet())); + } + if (StringUtils.isNotBlank(authClientDetails.getWebServerRedirectUri())) { + clientDetails.setRegisteredRedirectUri(Arrays.stream(StringUtils.split( + authClientDetails.getWebServerRedirectUri(), ",")).collect(Collectors.toSet())); + } + return clientDetails; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/RedisAuthorizationCodeServices.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/RedisAuthorizationCodeServices.java new file mode 100644 index 00000000..698e7949 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/RedisAuthorizationCodeServices.java @@ -0,0 +1,71 @@ +package com.orangeforms.uaaauth.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.security.oauth2.provider.code.RandomValueAuthorizationCodeServices; +import org.springframework.security.oauth2.provider.token.store.redis.JdkSerializationStrategy; +import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStoreSerializationStrategy; +import org.springframework.stereotype.Service; + +/** + * 在OAuth2授权码验证模式下,请求的授权码都会存储到redis中,以实现UAA服务的分布式部署。 + * 同时也提升了验证过程的执行效率。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Service +public class RedisAuthorizationCodeServices extends RandomValueAuthorizationCodeServices { + + @Autowired + private RedisConnectionFactory redisConnectionFactory; + private final RedisTokenStoreSerializationStrategy serializationStrategy = new JdkSerializationStrategy(); + private static final int EXPIRED_SECONDS = 10 * 60; + + private RedisConnection getConnection() { + return redisConnectionFactory.getConnection(); + } + + /** + * 将授权码存储到redis中。 + */ + @Override + protected void store(String code, OAuth2Authentication authentication) { + RedisConnection connection = getConnection(); + try { + byte[] key = serializationStrategy.serialize(redisKey(code)); + connection.set(key, serializationStrategy.serialize(authentication)); + connection.expire(key, EXPIRED_SECONDS); + } finally { + connection.close(); + } + } + + /** + * 将授权码从redis中删除。 + */ + @Override + protected OAuth2Authentication remove(final String code) { + OAuth2Authentication token = null; + RedisConnection connection = getConnection(); + try { + byte[] key = serializationStrategy.serialize(redisKey(code)); + byte[] value = connection.get(key); + if (value != null) { + connection.del(key); + token = serializationStrategy.deserialize(value, OAuth2Authentication.class); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + connection.close(); + } + return token; + } + + private String redisKey(String code) { + return "oauth:code:" + code; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/SysUaaUserService.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/SysUaaUserService.java new file mode 100644 index 00000000..05bb3acf --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/SysUaaUserService.java @@ -0,0 +1,56 @@ +package com.orangeforms.uaaauth.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.orangeforms.uaaauth.dao.SysUaaUserMapper; +import com.orangeforms.uaaauth.model.SysUaaUser; +import com.orangeforms.common.core.base.service.BaseService; +import com.orangeforms.common.core.base.dao.BaseDaoMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * 用户管理数据操作服务类。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Service +public class SysUaaUserService extends BaseService { + + @Autowired + private SysUaaUserMapper sysUserMapper; + @Autowired + private PasswordEncoder passwordEncoder; + + /** + * 返回当前Service的主表Mapper对象。 + * + * @return 主表Mapper对象。 + */ + @Override + protected BaseDaoMapper mapper() { + return sysUserMapper; + } + + public SysUaaUser getByUsername(String username) { + SysUaaUser filter = new SysUaaUser(); + filter.setUsername(username); + return sysUserMapper.selectOne(new QueryWrapper<>(filter)); + } + + /** + * 修改用户密码。 + * @param userId 用户主键Id。 + * @param newPass 新密码。 + * @return 成功返回true,否则false。 + */ + @Transactional(rollbackFor = Exception.class) + public boolean changePassword(Long userId, String newPass) { + SysUaaUser updatedUser = new SysUaaUser(); + updatedUser.setUserId(userId); + updatedUser.setPassword(passwordEncoder.encode(newPass)); + return sysUserMapper.updateById(updatedUser) == 1; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/UserDetailsServiceImpl.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/UserDetailsServiceImpl.java new file mode 100644 index 00000000..70e3c73d --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/service/UserDetailsServiceImpl.java @@ -0,0 +1,47 @@ +package com.orangeforms.uaaauth.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.orangeforms.uaaauth.dao.SysUaaUserMapper; +import com.orangeforms.uaaauth.model.SysUaaUser; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.Collections; + +/** + * UAA授权用户数据操作服务类。该类必须为UserDetailsService接口的实现类。 + * loadUserByUsername方法,被Oauth2框架调用获取授权用户数据。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + + @Autowired + private SysUaaUserMapper mapper; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + SysUaaUser filter = new SysUaaUser(); + filter.setUsername(username); + SysUaaUser sysUaaUser = mapper.selectOne(new QueryWrapper<>(filter)); + if (sysUaaUser == null) { + throw new UsernameNotFoundException("用户名不存在![" + username + "]"); + } + return new User( + sysUaaUser.getUsername(), + sysUaaUser.getPassword(), + true, + true, + true, + !sysUaaUser.getLocked(), + Collections.emptyList()); + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/util/AuthUtils.java b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/util/AuthUtils.java new file mode 100644 index 00000000..35e7c9e3 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/java/com/orangeforms/uaaauth/util/AuthUtils.java @@ -0,0 +1,88 @@ +package com.orangeforms.uaaauth.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException; + +import javax.servlet.http.HttpServletRequest; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Enumeration; + +/** + * 认证授权相关工具类。该类直接取自zlt,感谢作者。 + * + * @author Jerry + * @date 2020-08-08 + */ +@Slf4j +public final class AuthUtils { + + private AuthUtils() { + throw new IllegalStateException("Utility class"); + } + + private static final String BASIC = "Basic "; + private static final String CLIENT_STR_SEPERATOR = ":"; + private static final int CLIENT_STR_ARRAY_LENGTH = 2; + + /** + * 获取requet(head/param)中的token + */ + public static String extractToken(HttpServletRequest request) { + String token = extractHeaderToken(request); + if (token == null) { + token = request.getParameter(OAuth2AccessToken.ACCESS_TOKEN); + if (token == null) { + log.debug("Token not found in request parameters. Not an OAuth2 request."); + } + } + return token; + } + + /** + * 解析head中的token + */ + private static String extractHeaderToken(HttpServletRequest request) { + Enumeration headers = request.getHeaders("Authorization"); + while (headers.hasMoreElements()) { + String value = headers.nextElement(); + if ((value.startsWith(OAuth2AccessToken.BEARER_TYPE))) { + String authHeaderValue = value.substring(OAuth2AccessToken.BEARER_TYPE.length()).trim(); + int commaIndex = authHeaderValue.indexOf(','); + if (commaIndex > 0) { + authHeaderValue = authHeaderValue.substring(0, commaIndex); + } + return authHeaderValue; + } + } + return null; + } + + /** + * *从header 请求中的clientId:clientSecret + */ + public static String[] extractClient(HttpServletRequest request) { + String header = request.getHeader("Authorization"); + if (header == null || !header.startsWith(BASIC)) { + throw new UnapprovedClientAuthenticationException("请求头中client信息为空"); + } + return extractHeaderClient(header); + } + + /** + * 从header 请求中的clientId:clientSecret + * + * @param header header中的参数 + */ + public static String[] extractHeaderClient(String header) { + byte[] base64Client = header.substring(BASIC.length()).getBytes(StandardCharsets.UTF_8); + byte[] decoded = Base64.getDecoder().decode(base64Client); + String clientStr = new String(decoded, StandardCharsets.UTF_8); + String[] clientArr = clientStr.split(CLIENT_STR_SEPERATOR); + if (CLIENT_STR_ARRAY_LENGTH != clientArr.length) { + throw new RuntimeException("Invalid basic authentication token"); + } + return clientArr; + } +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/bootstrap.yml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..1f1b042c --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/bootstrap.yml @@ -0,0 +1,17 @@ +spring: + application: + name: uaa-auth + profiles: + active: dev + cloud: + nacos: + config: + server-addr: localhost:8848 + file-extension: yaml + # 共享配置文件,排序越高后,优先级越高。 + shared-configs: + - data-id: application-dev.yaml + group: DEFAULT_GROUP + refresh: true + main: + allow-bean-definition-overriding: true diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/log4j2.xml b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/log4j2.xml new file mode 100644 index 00000000..d82f9560 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/log4j2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + ./zzlogs/uaa-auth + + ./zzlogs/uaa-auth/backup + + info + + + + + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n + + + + [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> [%traceId] %msg%n + + + 31 + + 20M + + + + + + + localhost:9092 + 10000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/css/common.css b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/css/common.css new file mode 100644 index 00000000..0e26033e --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/css/common.css @@ -0,0 +1,173 @@ +header{ + width: 100%; + height: 50px; + background: #1e1b29; + border-bottom: solid 4px red; +} +.member_wrap{ + +} +.header_item{ + overflow: hidden; +} +.header_item{ + + width: 980px; + margin: 0 auto; +} +.menu_head{ + width: 100px; + height: 100px; + border-radius: 100px; + border: solid 3px #fff; + overflow: hidden; +} +.menu_head img{ + width: 100%; + height: 100%; +} +.menu_info{ + width:840px; + margin-left: 20px; +} +.info_name{ + font-size: 18px; + line-height: 40px; + font-weight: bold; + color: #fff; +} +.info_name_box{ + margin-top: 10px; +} +.level{ + font-size: 14px; + color: #f60; + font-weight: bold; +} +.info_desc{ + margin-top: 10px; + font-size: 14px; + color: #FFF; +} +.banner_menu{ + width: 980px; + height: 50px; + margin: 20px auto; + background: #fff; +} + + +.nav_box{ + margin-top: 50px; +} +.nav_box ul { + overflow: hidden; +} +.nav_box ul li{ + display: block; + padding: 0 20px; +} +.nav_box ul li a{ + color: #fff; + font-size: 16px; +} +.nav_box ul li a:hover{ + color: red; +} + + + + + +.login_wrap{ + background: url(/images/logo_bg.jpg) no-repeat center; + /*background-size: 100%;*/ +} +.logo{ + width: 500px; + height: 150px; + margin: 0px auto; + background: url(/images/logowz.png) no-repeat center; +} +.login_box{ + width: 360px; + background: #FFFFFF; + margin: 0px auto; +} +.login_title{ + font-size: 25px; + text-align: center; + color: #FF7F50; + padding: 15px 0; + width: 300px; + margin: 0 auto; + border-bottom: solid 1px #CCCCCC; +} +.form_text_ipt{ + width: 300px; + height: 40px; + border: solid 1px #CCCCCC; + margin: 20px auto 0 auto; + background: #FFFFFF; +} +.form_check_ipt{ + width: 300px; + margin: 10px auto; + overflow: hidden; +} +.form_text_ipt input{ + width: 290px; + height: 30px; + margin: 5px; + border: none; + font-family: "微软雅黑"; + font-size: 15px; + color: #666; +} +.check_left label{ + cursor: pointer; +} +.check_left label input{ + position: relative; + top: 2px; +} +.form_btn{ + width: 300px; + height: 40px; + margin: 10px auto; +} +.form_btn button{ + width: 100%; + height: 100%; + border: none; + color: #FFFFFF; + font-size: 14px; + background: #FF7F50; + cursor: pointer; +} +.form_reg_btn{ + width: 300px; + margin: 0 auto; + font-size: 14px; + color: #666; +} +.other_login{ + overflow: hidden; + width: 300px; + height: 80px; + line-height: 80px; + margin: 0px auto; +} +.other_left{ + font-size: 14px; + color: #999; +} + +.other_right a{ + margin:5px; + color:#636363; +} + +.other_right a:hover{ + color:#AEEEEE; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/css/reset.css b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/css/reset.css new file mode 100644 index 00000000..9f03c67b --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/css/reset.css @@ -0,0 +1,39 @@ +/*reset*/ +*{padding: 0;margin: 0;} +html, body, body div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, figure, footer, header, menu, nav, section, time, mark, audio, video, details, summary { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font-weight: normal; + vertical-align: baseline; + background: transparent; +} +article, aside, figure, footer, header, nav, section, details, summary {display: block;} +html, body { height: 100%; color: #333; font-size: 12px; font-family: "微软雅黑",MicrosoftYaHei;} +a { text-decoration: none; color: #3cf; -webkit-tap-highlight-color: transparent;} +li{list-style: none;} +table{border-collapse: collapse;} +input {outline: medium none;font-family: "微软雅黑",MicrosoftYaHei;font-size: 14px;} +button{font-family:"微软雅黑",MicrosoftYaHei;} +em {font-style: normal;} +.wrap{max-width: 100%;min-height: 100%;overflow: hidden;margin: 0 auto;background: #ccc;} + +.left{float: left;} +.right{float: right;} +.clear{clear:both;} +.red{color: #f60;} + +.ececk_warning{ + font-size: 13px; + color: red; + width: 300px; + margin: 0 auto; + display: none; +} +._warning{ + font-size: 13px; + color: red; + width: 300px; + margin: 0 auto; +} diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/cut.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/cut.jpg new file mode 100644 index 00000000..c9e2720c Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/cut.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/logo_bg.jpg b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/logo_bg.jpg new file mode 100644 index 00000000..2382c300 Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/logo_bg.jpg differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/logowz.png b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/logowz.png new file mode 100644 index 00000000..b5ed1d8f Binary files /dev/null and b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/images/logowz.png differ diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/js/common.js b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/js/common.js new file mode 100644 index 00000000..36393583 --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/js/common.js @@ -0,0 +1,50 @@ +$(function(){ + + $('.form_text_ipt input').focus(function(){ + $(this).parent().css({ + 'box-shadow':'0 0 3px #bbb', + }); + }); + $('.form_text_ipt input').blur(function(){ + $(this).parent().css({ + 'box-shadow':'none', + }); + }); + + $('.form_text_ipt input').bind('input propertychange',function(){ + if($(this).val()==""){ + $(this).css({ + 'color':'red', + }); + $(this).parent().css({ + 'border':'solid 1px red', + }); + $(this).parent().next().show(); + }else{ + $(this).css({ + 'color':'#ccc', + }); + $(this).parent().css({ + 'border':'solid 1px #ccc', + }); + $(this).parent().next().hide(); + } + }); + + let query = location.search; + if (query === '?error') { + $('#loginError').show(); + } +}); + +function checkForm(){ + var inputPwd = document.getElementById('input_pwd'); + var rsaPwd = document.getElementById('rsa_pwd'); + // 加密 + let encrypt = new JSEncrypt(); + var publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpC4QMnbTrQOFriJJCCFFWhlruBJThAEBfRk7pRx1jsAhyNVL3CqJb0tRvpnbCnJhrRAEPdgFHXv5A0RrvFp+5Cw7QoFH6O9rKB8+0H7+aVQeKITMUHf/XMXioymw6Iq4QfWd8RhdtM1KM6eGTy8aU7SO2s69Mc1LXefg/x3yw6wIDAQAB'; + encrypt.setPublicKey(publicKey); + rsaPwd.value= encodeURIComponent(encrypt.encrypt(inputPwd.value)); + //进行下一步 + return true; +} \ No newline at end of file diff --git a/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/js/jquery.min.js b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/js/jquery.min.js new file mode 100644 index 00000000..046e93aa --- /dev/null +++ b/orange-demo-uaa/orange-demo-multi-service-uaa/framework/uaa/uaa-auth/src/main/resources/static/js/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f +}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("