Commit 7280375ab2835e61221afae92aa5e42e9b7b02f5

Authored by Adam
Exists in master

Merge branch 'master' into 'master'

Master

See merge request !7
Showing 314 changed files   Show diff stats

Too many changes.

To preserve performance only 100 of 314 files displayed.

LICENSE 100644 → 100755
1 MIT License 1 MIT License
2 2
3 Copyright (c) 2017-present PanJiaChen 3 Copyright (c) 2017-present PanJiaChen
4 4
5 Permission is hereby granted, free of charge, to any person obtaining a copy 5 Permission is hereby granted, free of charge, to any person obtaining a copy
6 of this software and associated documentation files (the "Software"), to deal 6 of this software and associated documentation files (the "Software"), to deal
7 in the Software without restriction, including without limitation the rights 7 in the Software without restriction, including without limitation the rights
8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 copies of the Software, and to permit persons to whom the Software is 9 copies of the Software, and to permit persons to whom the Software is
10 furnished to do so, subject to the following conditions: 10 furnished to do so, subject to the following conditions:
11 11
12 The above copyright notice and this permission notice shall be included in all 12 The above copyright notice and this permission notice shall be included in all
13 copies or substantial portions of the Software. 13 copies or substantial portions of the Software.
14 14
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 SOFTWARE. 21 SOFTWARE.
22 22
File was created 1 <p align="center">
2 <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3 </p>
4
5 <p align="center">
6 <a href="https://github.com/vuejs/vue">
7 <img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
8 </a>
9 <a href="https://github.com/ElemeFE/element">
10 <img src="https://img.shields.io/badge/element--ui-2.7.0-brightgreen.svg" alt="element-ui">
11 </a>
12 <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13 <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Estado de Construcción">
14 </a>
15 <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16 <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="Licencia">
17 </a>
18 <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19 <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="Liberación Github">
20 </a>
21 <a href="https://gitter.im/vue-element-admin/discuss">
22 <img src="https://badges.gitter.im/Join%20Chat.svg" alt="Gitter">
23 </a>
24 <a href="https://panjiachen.github.io/vue-element-admin-site/donate">
25 <img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="Donación">
26 </a>
27 </p>
28
29 Español | [English](./README.md) | [简体中文](./README.zh-CN.md) | [日本語](./README.ja.md)
30
31 ## Introducción
32
33 [vue-element-admin](https://panjiachen.github.io/vue-element-admin) es una interfáz de administración preparada para producción. Está basada en [vue](https://github.com/vuejs/vue) y usa [element-ui](https://github.com/ElemeFE/element) como conjunto de herramientas de interfáz de usuario.
34
35 Vue Element Admin es una solución práctica basada en la nueva plataforma de desarrollo de vue, construida con soporte a i18 para el manejo de múltiples lenguajes, plantillas estándares para aplicaciones de negocio y un conjunto de asombrosas características. Esta herramienta ayuda a construir largas y complejas Aplicacones de una sola página (SPA). Creo que lo que necesites hacer, este proyecto te ayudará.
36
37 - [Vista Prévia de la Aplicación](https://panjiachen.github.io/vue-element-admin)
38
39 - [Documentación](https://panjiachen.github.io/vue-element-admin-site/)
40
41 - [Canal de Gitter](https://gitter.im/vue-element-admin/discuss)
42
43 - [Para Donaciones](https://panjiachen.github.io/vue-element-admin-site/donate/)
44
45 - [Enlace de Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
46
47 - [Canal de Gitee](https://panjiachen.gitee.io/vue-element-admin/)
48
49 - Plantilla base recomendada para usar: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
50 - Aplicación de Escritorio: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
51 - Plantilla de Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Créditos: [@Armour](https://github.com/Armour))
52 - [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
53
54 **Después de la versión `v4.1.0+`, la rama por defecto master no tendrá soporte para i18n. Por favor use [i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), los cambios serán incluidos en la rama master**
55
56 **la versión actual es `v4.0+` construida con `vue-cli`. Si encuentra algún problema, por favor coloque un [issue](https://github.com/PanJiaChen/vue-element-admin/issues/new). Si desea usar la versión anterior, puede cambiar de rama a [tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0), no relacionado con `vue-cli`**
57
58 **Este proyecto no está soportado para versiones muy viejas de navegadores (e.g. IE).**
59
60 ## Preparación
61
62 Necesita instalar [node](https://nodejs.org/) y [git](https://git-scm.com/) localmente. El proyecto es basado en [ES2015+](https://es6.ruanyifeng.com/), [vue](https://cn.vuejs.org/index.html), [vuex](https://vuex.vuejs.org/zh-cn/), [vue-router](https://router.vuejs.org/zh-cn/), [vue-cli](https://github.com/vuejs/vue-cli) , [axios](https://github.com/axios/axios) and [element-ui](https://github.com/ElemeFE/element), toda la solicitud de datos simulada se realiza a través de [Mock.js](https://github.com/nuysoft/Mock).
63 Entendiendo y aprendiendo esto pudiera ayudarle con su proyecto.
64
65 <p align="center">
66 <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
67 </p>
68
69 ## Patrocinantes
70
71 Se un patrocinante y pon tu logo en nuestro README on GitHub con un enlace directo a tu sitio web. [[Se un Patrocinante]](https://www.patreon.com/panjiachen)
72
73 <a href="https://flatlogic.com/admin-dashboards?from=vue-element-admin"><img width="150px" src="https://wpimg.wallstcn.com/9c0b719b-5551-4c1e-b776-63994632d94a.png" /></a><p>Plantilla de Dashboard de administración hecha con Vue, React y Angular.</p>
74
75 ## Características
76
77 ```
78 - Iniciar / Cerrar Sesión
79
80 - Permisos de Authentication
81 - Página de Permisos
82 - Directivas de permisos
83 - Página de configuración de permisos
84 - Autenticación por dos pasos
85
86 - Construcción Multi-entorno
87 - dev sit stage producción
88
89 - Características Globales
90 - I18n
91 - Temas dinámicos
92 - Dynamic sidebar (soporte a rutas multi-nivel)
93 - Barra de rutas dinámica
94 - Tags-view (Tab page Support right-click operation)
95 - Svg Sprite
96 - Datos de simulación con Mock
97 - Pantalla completa
98 - Responsive Sidebar
99
100 - Editor
101 - Editor de Texto Enriquecido
102 - Editor Markdown
103 - Editor JSON
104
105 - Excel
106 - Exportación a Excel
107 - Carga de Excel
108 - Visualización de Excel
109 - Exportación como zip
110
111 - Tabla
112 - Tabla Dinámica
113 - Tabla con Arrastrar y Soltar
114 - Tabla de edición en línea
115
116 - Páginas de Error
117 - 401
118 - 404
119
120 - Componentes
121 - Carga de Avatar
122 - Botón para subir al inicio
123 - Arrastrar y Soltar (Diaglogo)
124 - Arrastrar y Soltar (Seleccionar)
125 - Arrastrar y Soltar (Kanban)
126 - Arrastrar y Soltar (Lista)
127 - Panel de división
128 - Componente para soltar archivos
129 - Adhesión de objetos
130 - Contador hasta
131
132 - Ejemplo Avanzado
133 - Registro de Errores
134 - Tablero de indicadores
135 - Página de Guías
136 - ECharts (Gráficos)
137 - Portapapeles
138 - Convertidor de Markdown a html
139 ```
140
141 ## Iniciando
142
143 ```bash
144 # clone el proyecto
145 git clone https://github.com/PanJiaChen/vue-element-admin.git
146
147 # vaya al directorio clonado
148 cd vue-element-admin
149
150 # instale las dependencias
151 npm install
152
153 # corra el proyecto como desarrollador
154 npm run dev
155 ```
156
157 Automáticamente se abrirá el siguiente enlace en su navegador http://localhost:9527
158
159 ## Construcción
160
161 ```bash
162 # Construcción para entornos de prueba
163 npm run build:stage
164
165 # Construcción para entornos de producción
166 npm run build:prod
167 ```
168
169 ## Avanzado
170
171 ```bash
172 # Vista previa con efectos de entorno
173 npm run preview
174
175 # Vista previa con efectos + análisis de recursos estáticos
176 npm run preview -- --report
177
178 # Chequeo de formato de código
179 npm run lint
180
181 # Chequeo de formato de código y auto-corrección
182 npm run lint -- --fix
183 ```
184
185 Vaya a [Documentación](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) para mayor información
186
187 ## Registro de Cambios
188
189 Los cambios detallados por cada liberación se encuentran en [notas de liberación](https://github.com/PanJiaChen/vue-element-admin/releases).
190
191 ## Demostración en línea
192
193 [Vista Prévia de la Aplicación](https://panjiachen.github.io/vue-element-admin)
194
195 ## Donación
196
197 Si este proyecto es de mucha ayuda para ti, puedes comprarle al autor un vaso de jugo :tropical_drink:
198
199 ![Donar](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png)
200
201 [dona por Paypal](https://www.paypal.me/panfree23)
202
203 [Comprame un Café](https://www.buymeacoffee.com/Pan)
204
205 ## Navegadores Soportados
206
207 Navegadores modernos e Internet Explorer 10+.
208
209 | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Safari |
210 | --------- | --------- | --------- | --------- |
211 | IE10, IE11, Edge| últimas 2 versiones| últimas 2 versiones| últimas 2 versiones
212
213 ## Licencia
214
215 [MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
216
217 Copyright (c) 2017-presente PanJiaChen
218
File was created 1 <p align="center">
2 <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3 </p>
4
5 <p align="center">
6 <a href="https://github.com/vuejs/vue">
7 <img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
8 </a>
9 <a href="https://github.com/ElemeFE/element">
10 <img src="https://img.shields.io/badge/element--ui-2.7.0-brightgreen.svg" alt="element-ui">
11 </a>
12 <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13 <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Build Status">
14 </a>
15 <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16 <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
17 </a>
18 <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19 <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="GitHub release">
20 </a>
21 <a href="https://gitter.im/vue-element-admin/discuss">
22 <img src="https://badges.gitter.im/Join%20Chat.svg" alt="gitter">
23 </a>
24 <a href="https://panjiachen.gitee.io/vue-element-admin-site/zh/donate">
25 <img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
26 </a>
27 </p>
28
29 日本語 | [English](./README.md) | [简体中文](./README.zh-CN.md) | [Spanish](./README.es.md)
30
31 ## 概要
32
33 [vue-element-admin](https://panjiachen.github.io/vue-element-admin) は管理画面のフロントエンドのインタフェース,[vue](https://github.com/vuejs/vue) と [element-ui](https://github.com/ElemeFE/element)を使っています。i18nの多言語対応、可変ルート、権限、典型的なビジネスアプリテンプレートであり、豊富なコンポーネントを提供しています、素早くビジネス用の管理画面の現型を構築に役立ちます。
34
35 - [デモページ](https://panjiachen.github.io/vue-element-admin)
36
37 - [ドキュメント](https://panjiachen.github.io/vue-element-admin-site/)
38
39 - [Gitter](https://gitter.im/vue-element-admin/discuss)
40
41 - [Donate](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate)
42
43 - [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
44
45 - おすすめシンプルテンプレート: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
46 - デスクトップバージョン: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
47 - Typescriptバージョン: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour))
48 - [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
49
50 **After the `v4.1.0+` version, the default master branch will not support i18n. Please use [i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), it will keep up with the master update**
51
52 **現在のバージョン `v4.0+` は `vue-cli` で構築,バグ報告は[issue](https://github.com/PanJiaChen/vue-element-admin/issues/new)のissueでお願いします。旧バージョン[tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0)もあります。`vue-cli`に依存しないです。**
53
54 **低いバージョンのブラウザはサーポートしないです(例えば ie),必要があれば polyfill を追加してください。 [詳細はこちら](https://github.com/PanJiaChen/vue-element-admin/wiki#babel-polyfill)**
55
56 ## 前準備
57
58 ローカル環境に [node](http://nodejs.org/) と [git](https://git-scm.com/)をインストールが必要です。[ES2015+](http://es6.ruanyifeng.com/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[vue-cli](https://github.com/vuejs/vue-cli) 、[axios](https://github.com/axios/axios) 和 [element-ui](https://github.com/ElemeFE/element)で開発しています。Requestは[Mock.js](https://github.com/nuysoft/Mock)のモックデータを使っています。
59
60 **バグ修正や新規機能追加のissue と pull requestは大歓迎です。**
61
62 <p align="center">
63 <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
64 </p>
65
66 ## Sponsors
67
68 Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor]](https://www.patreon.com/panjiachen)
69
70 <a href="https://flatlogic.com/admin-dashboards?from=vue-element-admin"><img width="150px" src="https://wpimg.wallstcn.com/9c0b719b-5551-4c1e-b776-63994632d94a.png" /></a><p>Admin Dashboard Templates made with Vue, React and Angular.</p>
71
72 ## 機能一覧
73
74 ```
75 - ログイン / ログアウト
76
77 - Auth認証
78 - ページ権限
79 - 権限パーミッション
80 - 権限設定
81 - 外部IDでログイン
82
83 - 複数環境デプロイ
84 - dev sit stage prod
85
86 - 共通機能
87 - 多言語切替
88 - テーマ切替
89 - サイトメニュー(ルートから生成)
90 - Breadcrumb Navigation
91 - Tag Navigation
92 - Svg Sprite Icon
93 - ローカル/バックエンド モック データ
94 - Screenfull
95
96 - WYSIWYG
97 - TinyMCE
98 - Markdown
99 - JSON
100
101 - Excel
102 - エクスポート
103 - インポート
104 - リード
105 - Zip
106
107 - Table
108 - Dynamic Table
109 - Drag And Drop Table
110 - Inline Edit Table
111
112 - Error Page
113 - 401
114 - 404
115
116 - コンポーネント
117 - Avatar Upload
118 - Back To Top
119 - Drag Dialog
120 - Drag Select
121 - Drag Kanban
122 - Drag List
123 - SplitPane
124 - Dropzone
125 - Sticky
126 - CountTo
127
128 - Advanced Example
129 - Error Log
130 - Dashboard
131 - Guide Page
132 - ECharts
133 - Clipboard
134 - Markdown to html
135 ```
136
137 ## Getting started
138
139 ```bash
140 # clone the project
141 git clone -b i18n git@github.com:PanJiaChen/vue-element-admin.git
142
143 # enter the project directory
144 cd vue-element-admin
145
146 # install dependency
147 npm install
148
149 # develop
150 npm run dev
151 ```
152
153 This will automatically open http://localhost:9527
154
155 ## Build
156
157 ```bash
158 # build for test environment
159 npm run build:stage
160
161 # build for production environment
162 npm run build:prod
163 ```
164
165 ## Advanced
166
167 ```bash
168 # preview the release environment effect
169 npm run preview
170
171 # preview the release environment effect + static resource analysis
172 npm run preview -- --report
173
174 # code format check
175 npm run lint
176
177 # code format check and auto fix
178 npm run lint -- --fix
179 ```
180
181 Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
182
183 ## Changelog
184
185 Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases).
186
187 ## Online Demo
188
189 [Preview](https://panjiachen.github.io/vue-element-admin)
190
191 ## Donate
192
193 If you find this project useful, you can buy author a glass of juice :tropical_drink:
194
195 ![donate](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png)
196
197 [Paypal Me](https://www.paypal.me/panfree23)
198
199 [Buy me a coffee](https://www.buymeacoffee.com/Pan)
200
201 ## Browsers support
202
203 Modern browsers and Internet Explorer 10+.
204
205 | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Safari |
206 | --------- | --------- | --------- | --------- |
207 | IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
208
209 ## License
210
211 [MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
212
213 Copyright (c) 2017-present PanJiaChen
214
1 <p align="center">
2 <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3 </p>
1 4
5 <p align="center">
6 <a href="https://github.com/vuejs/vue">
7 <img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
8 </a>
9 <a href="https://github.com/ElemeFE/element">
10 <img src="https://img.shields.io/badge/element--ui-2.7.0-brightgreen.svg" alt="element-ui">
11 </a>
12 <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13 <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Build Status">
14 </a>
15 <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16 <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
17 </a>
18 <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19 <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="GitHub release">
20 </a>
21 <a href="https://gitter.im/vue-element-admin/discuss">
22 <img src="https://badges.gitter.im/Join%20Chat.svg" alt="gitter">
23 </a>
24 <a href="https://panjiachen.github.io/vue-element-admin-site/donate">
25 <img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
26 </a>
27 </p>
2 28
3 ## Build Setup 29 English | [简体中文](./README.zh-CN.md) | [日本語](./README.ja.md) | [Spanish](./README.es.md)
4 30
31 ## Introduction
32
33 [vue-element-admin](https://panjiachen.github.io/vue-element-admin) is a production-ready front-end solution for admin interfaces. It is based on [vue](https://github.com/vuejs/vue) and uses the UI Toolkit [element-ui](https://github.com/ElemeFE/element).
34
35 [vue-element-admin](https://panjiachen.github.io/vue-element-admin) is based on the newest development stack of vue and it has a built-in i18n solution, typical templates for enterprise applications, and lots of awesome features. It helps you build large and complex Single-Page Applications. I believe whatever your needs are, this project will help you.
36
37 - [Preview](https://panjiachen.github.io/vue-element-admin)
38
39 - [Documentation](https://panjiachen.github.io/vue-element-admin-site/)
40
41 - [Gitter](https://gitter.im/vue-element-admin/discuss)
42
43 - [Donate](https://panjiachen.github.io/vue-element-admin-site/donate/)
44
45 - [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
46
47 - [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 国内用户可访问该地址在线预览
48
49 - Base template recommends using: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
50 - Desktop: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
51 - Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour))
52 - [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
53
54 **After the `v4.1.0+` version, the default master branch will not support i18n. Please use [i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), it will keep up with the master update**
55
56 **The current version is `v4.0+` build on `vue-cli`. If you find a problem, please put [issue](https://github.com/PanJiaChen/vue-element-admin/issues/new). If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0), it does not rely on `vue-cli`**
57
58 **This project does not support low version browsers (e.g. IE). Please add polyfill by yourself.**
59
60 ## Preparation
61
62 You need to install [node](https://nodejs.org/) and [git](https://git-scm.com/) locally. The project is based on [ES2015+](https://es6.ruanyifeng.com/), [vue](https://cn.vuejs.org/index.html), [vuex](https://vuex.vuejs.org/zh-cn/), [vue-router](https://router.vuejs.org/zh-cn/), [vue-cli](https://github.com/vuejs/vue-cli) , [axios](https://github.com/axios/axios) and [element-ui](https://github.com/ElemeFE/element), all request data is simulated using [Mock.js](https://github.com/nuysoft/Mock).
63 Understanding and learning this knowledge in advance will greatly help the use of this project.
64
65 <p align="center">
66 <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
67 </p>
68
69 ## Sponsors
70
71 Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor]](https://www.patreon.com/panjiachen)
72
73 <a href="https://flatlogic.com/admin-dashboards?from=vue-element-admin"><img width="150px" src="https://wpimg.wallstcn.com/9c0b719b-5551-4c1e-b776-63994632d94a.png" /></a><p>Admin Dashboard Templates made with Vue, React and Angular.</p>
74
75 ## Features
76
77 ```
78 - Login / Logout
79
80 - Permission Authentication
81 - Page permission
82 - Directive permission
83 - Permission configuration page
84 - Two-step login
85
86 - Multi-environment build
87 - dev sit stage prod
88
89 - Global Features
90 - I18n
91 - Multiple dynamic themes
92 - Dynamic sidebar (supports multi-level routing)
93 - Dynamic breadcrumb
94 - Tags-view (Tab page Support right-click operation)
95 - Svg Sprite
96 - Mock data
97 - Screenfull
98 - Responsive Sidebar
99
100 - Editor
101 - Rich Text Editor
102 - Markdown Editor
103 - JSON Editor
104
105 - Excel
106 - Export Excel
107 - Upload Excel
108 - Visualization Excel
109 - Export zip
110
111 - Table
112 - Dynamic Table
113 - Drag And Drop Table
114 - Inline Edit Table
115
116 - Error Page
117 - 401
118 - 404
119
120 - Components
121 - Avatar Upload
122 - Back To Top
123 - Drag Dialog
124 - Drag Select
125 - Drag Kanban
126 - Drag List
127 - SplitPane
128 - Dropzone
129 - Sticky
130 - CountTo
131
132 - Advanced Example
133 - Error Log
134 - Dashboard
135 - Guide Page
136 - ECharts
137 - Clipboard
138 - Markdown to html
139 ```
140
141 ## Getting started
5 142
6 ```bash 143 ```bash
144 # clone the project
145 git clone -b i18n git@github.com:PanJiaChen/vue-element-admin.git
7 146
8 # enter the project directory 147 # enter the project directory
9 cd gulu-admin 148 cd vue-element-admin
10 149
11 # install dependency 150 # install dependency
12 npm install 151 npm install
13 152
14 # develop 153 # develop
15 npm run dev 154 npm run dev
16 ``` 155 ```
17 156
18 This will automatically open http://localhost:9528 157 This will automatically open http://localhost:9527
19 158
20 ## Build 159 ## Build
21 160
22 ```bash 161 ```bash
23 # build for test environment 162 # build for test environment
24 npm run build:stage 163 npm run build:stage
25 164
26 # build for production environment 165 # build for production environment
27 npm run build:prod 166 npm run build:prod
28 ``` 167 ```
29 168
30 ## Advanced 169 ## Advanced
31 170
32 ```bash 171 ```bash
33 # preview the release environment effect 172 # preview the release environment effect
34 npm run preview 173 npm run preview
35 174
36 # preview the release environment effect + static resource analysis 175 # preview the release environment effect + static resource analysis
37 npm run preview -- --report 176 npm run preview -- --report
38 177
39 # code format check 178 # code format check
40 npm run lint 179 npm run lint
41 180
42 # code format check and auto fix 181 # code format check and auto fix
43 npm run lint -- --fix 182 npm run lint -- --fix
44 ``` 183 ```
45 184
46 Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information 185 Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
47 186
48 ## Demo 187 ## Changelog
49 188
50 ![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif) 189 Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases).
51 190
52 ## Extra 191 ## Online Demo
53 192
54 If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) 193 [Preview](https://panjiachen.github.io/vue-element-admin)
55 194
56 For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour)) 195 ## Donate
57 196
58 ## Related Project 197 If you find this project useful, you can buy author a glass of juice :tropical_drink:
59 198
60 - [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) 199 ![donate](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png)
61 200
62 - [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) 201 [Paypal Me](https://www.paypal.me/panfree23)
63 202
64 - [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) 203 [Buy me a coffee](https://www.buymeacoffee.com/Pan)
65 204
66 - [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) 205 ## Browsers support
206
207 Modern browsers and Internet Explorer 10+.
208
209 | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Safari |
210 | --------- | --------- | --------- | --------- |
211 | IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
212
213 ## License
67 214
215 [MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
68 216
217 Copyright (c) 2017-present PanJiaChen
69 218
File was created 1 <p align="center">
2 <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3 </p>
4
5 <p align="center">
6 <a href="https://github.com/vuejs/vue">
7 <img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
8 </a>
9 <a href="https://github.com/ElemeFE/element">
10 <img src="https://img.shields.io/badge/element--ui-2.7.0-brightgreen.svg" alt="element-ui">
11 </a>
12 <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13 <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Build Status">
14 </a>
15 <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16 <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
17 </a>
18 <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19 <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="GitHub release">
20 </a>
21 <a href="https://gitter.im/vue-element-admin/discuss">
22 <img src="https://badges.gitter.im/Join%20Chat.svg" alt="gitter">
23 </a>
24 <a href="https://panjiachen.gitee.io/vue-element-admin-site/zh/donate">
25 <img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
26 </a>
27 </p>
28
29 简体中文 | [English](./README.md) | [日本語](./README.ja.md) | [Spanish](./README.es.md)
30
31 ## 简介
32
33 [vue-element-admin](https://panjiachen.github.io/vue-element-admin) 是一个后台前端解决方案,它基于 [vue](https://github.com/vuejs/vue) 和 [element-ui](https://github.com/ElemeFE/element)实现。它使用了最新的前端技术栈,内置了 i18n 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。相信不管你的需求是什么,本项目都能帮助到你。
34
35 - [在线预览](https://panjiachen.github.io/vue-element-admin)
36
37 - [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
38
39 - [Gitter 讨论组](https://gitter.im/vue-element-admin/discuss)
40
41 - [Donate](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate)
42
43 - [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
44
45 - [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 在线预览(国内用户可访问该地址)
46
47 - [国内访问文档](https://panjiachen.gitee.io/vue-element-admin-site/zh/) 文档(方便没翻墙的用户查看)
48
49 - 基础模板建议使用: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template)
50 - 桌面端: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
51 - Typescript 版: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour))
52 - [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
53
54 **`v4.1.0+`版本之后默认 master 分支将不支持国际化,有需要的请使用[i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n)分支,它会和 master 保持同步更新**
55
56 **该项目不支持低版本浏览器(如 ie),有需求请自行添加 polyfill [详情](https://github.com/PanJiaChen/vue-element-admin/wiki#babel-polyfill)**
57
58 **目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若发现问题,欢迎提[issue](https://github.com/PanJiaChen/vue-element-admin/issues/new)。若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0),它不依赖 `vue-cli`**
59
60 群主 **[圈子](https://jianshiapp.com/circles/1209)** 群主会经常分享一些技术相关的东西,或者加入 [qq 群](https://github.com/PanJiaChen/vue-element-admin/issues/602) 或者关注 [微博](https://weibo.com/u/3423485724?is_all=1)
61
62 ## 前序准备
63
64 你需要在本地安装 [node](http://nodejs.org/) 和 [git](https://git-scm.com/)。本项目技术栈基于 [ES2015+](http://es6.ruanyifeng.com/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[vue-cli](https://github.com/vuejs/vue-cli) 、[axios](https://github.com/axios/axios) 和 [element-ui](https://github.com/ElemeFE/element),所有的请求数据都使用[Mock.js](https://github.com/nuysoft/Mock)进行模拟,提前了解和学习这些知识会对使用本项目有很大的帮助。
65
66 同时配套了系列教程文章,如何从零构建后一个完整的后台项目,建议大家先看完这些文章再来实践本项目
67
68 - [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2)
69 - [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac)
70 - [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35)
71 - [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板)](https://juejin.im/post/595b4d776fb9a06bbe7dba56)
72 - [手摸手,带你用vue撸后台 系列五(v4.0新版本)](https://juejin.im/post/5c92ff94f265da6128275a85)
73 - [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836)
74 - [手摸手,带你优雅的使用 icon](https://juejin.im/post/59bb864b5188257e7a427c09)
75 - [手摸手,带你用合理的姿势使用 webpack4(上)](https://juejin.im/post/5b56909a518825195f499806)
76 - [手摸手,带你用合理的姿势使用 webpack4(下)](https://juejin.im/post/5b5d6d6f6fb9a04fea58aabc)
77
78 **如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 和 pr**
79
80 <p align="center">
81 <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
82 </p>
83
84 ## Sponsors
85
86 Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor]](https://www.patreon.com/panjiachen)
87
88 <a href="https://flatlogic.com/admin-dashboards?from=vue-element-admin"><img width="150px" src="https://wpimg.wallstcn.com/9c0b719b-5551-4c1e-b776-63994632d94a.png" /></a><p>Admin Dashboard Templates made with Vue, React and Angular.</p>
89
90 ## 功能
91
92 ```
93 - 登录 / 注销
94
95 - 权限验证
96 - 页面权限
97 - 指令权限
98 - 权限配置
99 - 二步登录
100
101 - 多环境发布
102 - dev sit stage prod
103
104 - 全局功能
105 - 国际化多语言
106 - 多种动态换肤
107 - 动态侧边栏(支持多级路由嵌套)
108 - 动态面包屑
109 - 快捷导航(标签页)
110 - Svg Sprite 图标
111 - 本地/后端 mock 数据
112 - Screenfull全屏
113 - 自适应收缩侧边栏
114
115 - 编辑器
116 - 富文本
117 - Markdown
118 - JSON 等多格式
119
120 - Excel
121 - 导出excel
122 - 导入excel
123 - 前端可视化excel
124 - 导出zip
125
126 - 表格
127 - 动态表格
128 - 拖拽表格
129 - 内联编辑
130
131 - 错误页面
132 - 401
133 - 404
134
135 - 組件
136 - 头像上传
137 - 返回顶部
138 - 拖拽Dialog
139 - 拖拽Select
140 - 拖拽看板
141 - 列表拖拽
142 - SplitPane
143 - Dropzone
144 - Sticky
145 - CountTo
146
147 - 综合实例
148 - 错误日志
149 - Dashboard
150 - 引导页
151 - ECharts 图表
152 - Clipboard(剪贴复制)
153 - Markdown2html
154 ```
155
156 ## 开发
157
158 ```bash
159 # 克隆项目
160 git clone -b i18n git@github.com:PanJiaChen/vue-element-admin.git
161
162 # 进入项目目录
163 cd vue-element-admin
164
165 # 安装依赖
166 npm install
167
168 # 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
169 npm install --registry=https://registry.npm.taobao.org
170
171 # 启动服务
172 npm run dev
173 ```
174
175 浏览器访问 http://localhost:9527
176
177 ## 发布
178
179 ```bash
180 # 构建测试环境
181 npm run build:stage
182
183 # 构建生产环境
184 npm run build:prod
185 ```
186
187 ## 其它
188
189 ```bash
190 # 预览发布环境效果
191 npm run preview
192
193 # 预览发布环境效果 + 静态资源分析
194 npm run preview -- --report
195
196 # 代码格式检查
197 npm run lint
198
199 # 代码格式检查并自动修复
200 npm run lint -- --fix
201 ```
202
203 更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
204
205 ## Changelog
206
207 Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases).
208
209 ## Online Demo
210
211 [在线 Demo](https://panjiachen.github.io/vue-element-admin)
212
213 ## Donate
214
215 如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 :tropical_drink:
216 ![donate](https://panjiachen.github.io/donate/donation.png)
217
218 [更多捐赠方式](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate)
219
220 [Paypal Me](https://www.paypal.me/panfree23)
221
222 [Buy me a coffee](https://www.buymeacoffee.com/Pan)
223
224 ## Browsers support
225
226 Modern browsers and Internet Explorer 10+.
227
228 | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](https://godban.github.io/browsers-support-badges/)</br>Safari |
229 | --------- | --------- | --------- | --------- |
230 | IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
231
232 ## License
233
234 [MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
235
236 Copyright (c) 2017-present PanJiaChen
237
1 // module.exports = {
2 // presets: [
3 // '@vue/app'
4 // ]
5 // }
6 // "@babel/preset-env",
7 // {
8 // "modules": false
9 // },
10 module.exports = { 1 module.exports = {
11 "presets": [ 2 presets: [
12 [ 3 '@vue/app'
13 '@vue/app',
14 // '@babel/preset-env',
15 {
16 // "modules": false,
17 // "targets": { // 配置代码的运行环境
18 // "chrome": 64
19 // },
20 // "useBuiltIns": true // 开启对 babel-polyfill 的优化
21 }
22 ]
23 ],
24 "plugins": [
25 [
26 "component",
27 {
28 "libraryName": "element-ui",
29 "styleLibraryName": "theme-chalk"
30 }
31 ]
32 ] 4 ]
33 } 5 }
34 6
build/index.js 100644 → 100755
1 const { run } = require('runjs') 1 const { run } = require('runjs')
2 const chalk = require('chalk') 2 const chalk = require('chalk')
3 const config = require('../vue.config.js') 3 const config = require('../vue.config.js')
4 const rawArgv = process.argv.slice(2) 4 const rawArgv = process.argv.slice(2)
5 const args = rawArgv.join(' ') 5 const args = rawArgv.join(' ')
6 6
7 if (process.env.npm_config_preview || rawArgv.includes('--preview')) { 7 if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
8 const report = rawArgv.includes('--report') 8 const report = rawArgv.includes('--report')
9 9
10 run(`vue-cli-service build ${args}`) 10 run(`vue-cli-service build ${args}`)
11 11
12 const port = 9526 12 const port = 9526
13 const publicPath = config.publicPath 13 const publicPath = config.publicPath
14 14
15 var connect = require('connect') 15 var connect = require('connect')
16 var serveStatic = require('serve-static') 16 var serveStatic = require('serve-static')
17 const app = connect() 17 const app = connect()
18 18
19 app.use( 19 app.use(
20 publicPath, 20 publicPath,
21 serveStatic('./dist', { 21 serveStatic('./dist', {
22 index: ['index.html', '/'] 22 index: ['index.html', '/']
23 }) 23 })
24 ) 24 )
25 25
26 app.listen(port, function () { 26 app.listen(port, function () {
27 console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) 27 console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
28 if (report) { 28 if (report) {
29 console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) 29 console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
30 } 30 }
31 31
32 }) 32 })
33 } else { 33 } else {
34 run(`vue-cli-service build ${args}`) 34 run(`vue-cli-service build ${args}`)
35 } 35 }
36 36
jest.config.js 100644 → 100755
1 module.exports = { 1 module.exports = {
2 moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], 2 moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
3 transform: { 3 transform: {
4 '^.+\\.vue$': 'vue-jest', 4 '^.+\\.vue$': 'vue-jest',
5 '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 5 '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
6 'jest-transform-stub', 6 'jest-transform-stub',
7 '^.+\\.jsx?$': 'babel-jest' 7 '^.+\\.jsx?$': 'babel-jest'
8 }, 8 },
9 moduleNameMapper: { 9 moduleNameMapper: {
10 '^@/(.*)$': '<rootDir>/src/$1' 10 '^@/(.*)$': '<rootDir>/src/$1'
11 }, 11 },
12 snapshotSerializers: ['jest-serializer-vue'], 12 snapshotSerializers: ['jest-serializer-vue'],
13 testMatch: [ 13 testMatch: [
14 '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' 14 '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
15 ], 15 ],
16 collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], 16 collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
17 coverageDirectory: '<rootDir>/tests/unit/coverage', 17 coverageDirectory: '<rootDir>/tests/unit/coverage',
18 // 'collectCoverage': true, 18 // 'collectCoverage': true,
19 'coverageReporters': [ 19 'coverageReporters': [
20 'lcov', 20 'lcov',
21 'text-summary' 21 'text-summary'
22 ], 22 ],
23 testURL: 'http://localhost/' 23 testURL: 'http://localhost/'
24 } 24 }
25 25
1 { 1 {
2 "compilerOptions": { 2 "compilerOptions": {
3 "baseUrl": "./", 3 "baseUrl": "./",
4 "paths": { 4 "paths": {
5 "@/*": ["src/*"] 5 "@/*": ["src/*"]
6 } 6 }
7 }, 7 },
8 "exclude": ["node_modules", "dist"] 8 "exclude": ["node_modules", "dist"]
9 } 9 }
10
File was created 1 import Mock from 'mockjs'
2
3 const List = []
4 const count = 100
5
6 const baseContent = '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>'
7 const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3'
8
9 for (let i = 0; i < count; i++) {
10 List.push(Mock.mock({
11 id: '@increment',
12 timestamp: +Mock.Random.date('T'),
13 author: '@first',
14 reviewer: '@first',
15 title: '@title(5, 10)',
16 content_short: 'mock data',
17 content: baseContent,
18 forecast: '@float(0, 100, 2, 2)',
19 importance: '@integer(1, 3)',
20 'type|1': ['CN', 'US', 'JP', 'EU'],
21 'status|1': ['published', 'draft'],
22 display_time: '@datetime',
23 comment_disabled: true,
24 pageviews: '@integer(300, 5000)',
25 image_uri,
26 platforms: ['a-platform']
27 }))
28 }
29
30 export default [
31 {
32 url: '/vue-element-admin/article/list',
33 type: 'get',
34 response: config => {
35 const { importance, type, title, page = 1, limit = 20, sort } = config.query
36
37 let mockList = List.filter(item => {
38 if (importance && item.importance !== +importance) return false
39 if (type && item.type !== type) return false
40 if (title && item.title.indexOf(title) < 0) return false
41 return true
42 })
43
44 if (sort === '-id') {
45 mockList = mockList.reverse()
46 }
47
48 const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
49
50 return {
51 code: 20000,
52 data: {
53 total: mockList.length,
54 items: pageList
55 }
56 }
57 }
58 },
59
60 {
61 url: '/vue-element-admin/article/detail',
62 type: 'get',
63 response: config => {
64 const { id } = config.query
65 for (const article of List) {
66 if (article.id === +id) {
67 return {
68 code: 20000,
69 data: article
70 }
71 }
72 }
73 }
74 },
75
76 {
77 url: '/vue-element-admin/article/pv',
78 type: 'get',
79 response: _ => {
80 return {
81 code: 20000,
82 data: {
83 pvData: [
84 { key: 'PC', pv: 1024 },
85 { key: 'mobile', pv: 1024 },
86 { key: 'ios', pv: 1024 },
87 { key: 'android', pv: 1024 }
88 ]
89 }
90 }
91 }
92 },
93
94 {
95 url: '/vue-element-admin/article/create',
96 type: 'post',
97 response: _ => {
98 return {
99 code: 20000,
100 data: 'success'
101 }
102 }
103 },
104
105 {
106 url: '/vue-element-admin/article/update',
107 type: 'post',
108 response: _ => {
109 return {
110 code: 20000,
111 data: 'success'
112 }
113 }
114 }
115 ]
116
117
1 import Mock from 'mockjs' 1 import Mock from 'mockjs'
2 import { 2 import { param2Obj } from '../src/utils'
3 param2Obj
4 } from '../src/utils'
5 3
6 import user from './user' 4 import user from './user'
7 import table from './table' 5 import role from './role'
6 import article from './article'
7 import search from './remote-search'
8 8
9 const mocks = [ 9 const mocks = [
10 ...user, 10 ...user,
11 ...table 11 ...role,
12 ...article,
13 ...search
12 ] 14 ]
13 15
14 // for front mock 16 // for front mock
15 // please use it cautiously, it will redefine XMLHttpRequest, 17 // please use it cautiously, it will redefine XMLHttpRequest,
16 // which will cause many of your third-party libraries to be invalidated(like progress event). 18 // which will cause many of your third-party libraries to be invalidated(like progress event).
17 export function mockXHR() { 19 export function mockXHR() {
18 // mock patch 20 // mock patch
19 // https://github.com/nuysoft/Mock/issues/300 21 // https://github.com/nuysoft/Mock/issues/300
20 Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send 22 Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
21 Mock.XHR.prototype.send = function () { 23 Mock.XHR.prototype.send = function() {
22 if (this.custom.xhr) { 24 if (this.custom.xhr) {
23 this.custom.xhr.withCredentials = this.withCredentials || false 25 this.custom.xhr.withCredentials = this.withCredentials || false
24 26
25 if (this.responseType) { 27 if (this.responseType) {
26 this.custom.xhr.responseType = this.responseType 28 this.custom.xhr.responseType = this.responseType
27 } 29 }
28 } 30 }
29 this.proxy_send(...arguments) 31 this.proxy_send(...arguments)
30 } 32 }
31 33
32 function XHR2ExpressReqWrap(respond) { 34 function XHR2ExpressReqWrap(respond) {
33 return function (options) { 35 return function(options) {
34 let result = null 36 let result = null
35 if (respond instanceof Function) { 37 if (respond instanceof Function) {
36 const { 38 const { body, type, url } = options
37 body,
38 type,
39 url
40 } = options
41 // https://expressjs.com/en/4x/api.html#req 39 // https://expressjs.com/en/4x/api.html#req
42 result = respond({ 40 result = respond({
43 method: type, 41 method: type,
44 body: JSON.parse(body), 42 body: JSON.parse(body),
45 query: param2Obj(url) 43 query: param2Obj(url)
46 }) 44 })
47 } else { 45 } else {
48 result = respond 46 result = respond
49 } 47 }
50 return Mock.mock(result) 48 return Mock.mock(result)
51 } 49 }
52 } 50 }
53 51
54 for (const i of mocks) { 52 for (const i of mocks) {
55 Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) 53 Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
56 } 54 }
57 } 55 }
58 56
59 // for mock server 57 // for mock server
60 const responseFake = (url, type, respond) => { 58 const responseFake = (url, type, respond) => {
61 return { 59 return {
62 url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), 60 url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
63 type: type || 'get', 61 type: type || 'get',
64 response(req, res) { 62 response(req, res) {
65 console.log('request invoke:' + req.path) 63 console.log('request invoke:' + req.path)
66 res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) 64 res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
67 } 65 }
68 } 66 }
69 } 67 }
70 68
mock/mock-server.js
1 const chokidar = require('chokidar') 1 const chokidar = require('chokidar')
2 const bodyParser = require('body-parser') 2 const bodyParser = require('body-parser')
3 const chalk = require('chalk') 3 const chalk = require('chalk')
4 const path = require('path') 4 const path = require('path')
5 5
6 const mockDir = path.join(process.cwd(), 'mock') 6 const mockDir = path.join(process.cwd(), 'mock')
7 7
8 function registerRoutes(app) { 8 function registerRoutes(app) {
9 let mockLastIndex 9 let mockLastIndex
10 const { default: mocks } = require('./index.js') 10 const { default: mocks } = require('./index.js')
11 for (const mock of mocks) { 11 for (const mock of mocks) {
12 app[mock.type](mock.url, mock.response) 12 app[mock.type](mock.url, mock.response)
13 mockLastIndex = app._router.stack.length 13 mockLastIndex = app._router.stack.length
14 } 14 }
15 const mockRoutesLength = Object.keys(mocks).length 15 const mockRoutesLength = Object.keys(mocks).length
16 return { 16 return {
17 mockRoutesLength: mockRoutesLength, 17 mockRoutesLength: mockRoutesLength,
18 mockStartIndex: mockLastIndex - mockRoutesLength 18 mockStartIndex: mockLastIndex - mockRoutesLength
19 } 19 }
20 } 20 }
21 21
22 function unregisterRoutes() { 22 function unregisterRoutes() {
23 Object.keys(require.cache).forEach(i => { 23 Object.keys(require.cache).forEach(i => {
24 if (i.includes(mockDir)) { 24 if (i.includes(mockDir)) {
25 delete require.cache[require.resolve(i)] 25 delete require.cache[require.resolve(i)]
26 } 26 }
27 }) 27 })
28 } 28 }
29 29
30 module.exports = app => { 30 module.exports = app => {
31 // es6 polyfill 31 // es6 polyfill
32 require('@babel/register') 32 require('@babel/register')
33 33
34 // parse app.body 34 // parse app.body
35 // https://expressjs.com/en/4x/api.html#req.body 35 // https://expressjs.com/en/4x/api.html#req.body
36 app.use(bodyParser.json()) 36 app.use(bodyParser.json())
37 app.use(bodyParser.urlencoded({ 37 app.use(bodyParser.urlencoded({
38 extended: true 38 extended: true
39 })) 39 }))
40 40
41 const mockRoutes = registerRoutes(app) 41 const mockRoutes = registerRoutes(app)
42 var mockRoutesLength = mockRoutes.mockRoutesLength 42 var mockRoutesLength = mockRoutes.mockRoutesLength
43 var mockStartIndex = mockRoutes.mockStartIndex 43 var mockStartIndex = mockRoutes.mockStartIndex
44 44
45 // watch files, hot reload mock server 45 // watch files, hot reload mock server
46 chokidar.watch(mockDir, { 46 chokidar.watch(mockDir, {
47 ignored: /mock-server/, 47 ignored: /mock-server/,
48 ignoreInitial: true 48 ignoreInitial: true
49 }).on('all', (event, path) => { 49 }).on('all', (event, path) => {
50 if (event === 'change' || event === 'add') { 50 if (event === 'change' || event === 'add') {
51 try { 51 try {
52 // remove mock routes stack 52 // remove mock routes stack
53 app._router.stack.splice(mockStartIndex, mockRoutesLength) 53 app._router.stack.splice(mockStartIndex, mockRoutesLength)
54 54
55 // clear routes cache 55 // clear routes cache
56 unregisterRoutes() 56 unregisterRoutes()
57 57
58 const mockRoutes = registerRoutes(app) 58 const mockRoutes = registerRoutes(app)
59 mockRoutesLength = mockRoutes.mockRoutesLength 59 mockRoutesLength = mockRoutes.mockRoutesLength
60 mockStartIndex = mockRoutes.mockStartIndex 60 mockStartIndex = mockRoutes.mockStartIndex
61 61
62 console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`)) 62 console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
63 } catch (error) { 63 } catch (error) {
64 console.error(chalk.redBright(error)) 64 console.log(chalk.redBright(error))
65 } 65 }
66 } 66 }
67 }) 67 })
68 } 68 }
69 69
mock/remote-search.js
File was created 1 import Mock from 'mockjs'
2
3 const NameList = []
4 const count = 100
5
6 for (let i = 0; i < count; i++) {
7 NameList.push(Mock.mock({
8 name: '@first'
9 }))
10 }
11 NameList.push({ name: 'mock-Pan' })
12
13 export default [
14 // username search
15 {
16 url: '/vue-element-admin/search/user',
17 type: 'get',
18 response: config => {
19 const { name } = config.query
20 const mockNameList = NameList.filter(item => {
21 const lowerCaseName = item.name.toLowerCase()
22 return !(name && lowerCaseName.indexOf(name.toLowerCase()) < 0)
23 })
24 return {
25 code: 20000,
26 data: { items: mockNameList }
27 }
28 }
29 },
30
31 // transaction list
32 {
33 url: '/vue-element-admin/transaction/list',
34 type: 'get',
35 response: _ => {
36 return {
37 code: 20000,
38 data: {
39 total: 20,
40 'items|20': [{
41 order_no: '@guid()',
42 timestamp: +Mock.Random.date('T'),
43 username: '@name()',
44 price: '@float(1000, 15000, 0, 2)',
45 'status|1': ['success', 'pending']
46 }]
47 }
48 }
49 }
50 }
51 ]
52
mock/role/index.js
File was created 1 import Mock from 'mockjs'
2 import { deepClone } from '../../src/utils/index.js'
3 import { asyncRoutes, constantRoutes } from './routes.js'
4
5 const routes = deepClone([...constantRoutes, ...asyncRoutes])
6
7 const roles = [
8 {
9 key: 'admin',
10 name: 'admin',
11 description: 'Super Administrator. Have access to view all pages.',
12 routes: routes
13 },
14 {
15 key: 'editor',
16 name: 'editor',
17 description: 'Normal Editor. Can see all pages except permission page',
18 routes: routes.filter(i => i.path !== '/permission')// just a mock
19 },
20 {
21 key: 'visitor',
22 name: 'visitor',
23 description: 'Just a visitor. Can only see the home page and the document page',
24 routes: [{
25 path: '',
26 redirect: 'dashboard',
27 children: [
28 {
29 path: 'dashboard',
30 name: 'Dashboard',
31 meta: { title: 'dashboard', icon: 'dashboard' }
32 }
33 ]
34 }]
35 }
36 ]
37
38 export default [
39 // mock get all routes form server
40 {
41 url: '/vue-element-admin/routes',
42 type: 'get',
43 response: _ => {
44 return {
45 code: 20000,
46 data: routes
47 }
48 }
49 },
50
51 // mock get all roles form server
52 {
53 url: '/vue-element-admin/roles',
54 type: 'get',
55 response: _ => {
56 return {
57 code: 20000,
58 data: roles
59 }
60 }
61 },
62
63 // add role
64 {
65 url: '/vue-element-admin/role',
66 type: 'post',
67 response: {
68 code: 20000,
69 data: {
70 key: Mock.mock('@integer(300, 5000)')
71 }
72 }
73 },
74
75 // update role
76 {
77 url: '/vue-element-admin/role/[A-Za-z0-9]',
78 type: 'put',
79 response: {
80 code: 20000,
81 data: {
82 status: 'success'
83 }
84 }
85 },
86
87 // delete role
88 {
89 url: '/vue-element-admin/role/[A-Za-z0-9]',
90 type: 'delete',
91 response: {
92 code: 20000,
93 data: {
94 status: 'success'
95 }
96 }
97 }
98 ]
99
mock/role/routes.js
File was created 1 // Just a mock data
2
3 export const constantRoutes = [
4 {
5 path: '/redirect',
6 component: 'layout/Layout',
7 hidden: true,
8 children: [
9 {
10 path: '/redirect/:path*',
11 component: 'views/redirect/index'
12 }
13 ]
14 },
15 {
16 path: '/login',
17 component: 'views/login/index',
18 hidden: true
19 },
20 {
21 path: '/auth-redirect',
22 component: 'views/login/auth-redirect',
23 hidden: true
24 },
25 {
26 path: '/404',
27 component: 'views/error-page/404',
28 hidden: true
29 },
30 {
31 path: '/401',
32 component: 'views/error-page/401',
33 hidden: true
34 },
35 {
36 path: '',
37 component: 'layout/Layout',
38 redirect: 'dashboard',
39 children: [
40 {
41 path: 'dashboard',
42 component: 'views/dashboard/index',
43 name: 'Dashboard',
44 meta: { title: 'dashboard', icon: 'dashboard', affix: true }
45 }
46 ]
47 },
48 {
49 path: '/documentation',
50 component: 'layout/Layout',
51 children: [
52 {
53 path: 'index',
54 component: 'views/documentation/index',
55 name: 'Documentation',
56 meta: { title: 'documentation', icon: 'documentation', affix: true }
57 }
58 ]
59 },
60 {
61 path: '/guide',
62 component: 'layout/Layout',
63 redirect: '/guide/index',
64 children: [
65 {
66 path: 'index',
67 component: 'views/guide/index',
68 name: 'Guide',
69 meta: { title: 'guide', icon: 'guide', noCache: true }
70 }
71 ]
72 }
73 ]
74
75 export const asyncRoutes = [
76 {
77 path: '/permission',
78 component: 'layout/Layout',
79 redirect: '/permission/index',
80 alwaysShow: true,
81 meta: {
82 title: 'permission',
83 icon: 'lock',
84 roles: ['admin', 'editor']
85 },
86 children: [
87 {
88 path: 'page',
89 component: 'views/permission/page',
90 name: 'PagePermission',
91 meta: {
92 title: 'pagePermission',
93 roles: ['admin']
94 }
95 },
96 {
97 path: 'directive',
98 component: 'views/permission/directive',
99 name: 'DirectivePermission',
100 meta: {
101 title: 'directivePermission'
102 }
103 },
104 {
105 path: 'role',
106 component: 'views/permission/role',
107 name: 'RolePermission',
108 meta: {
109 title: 'rolePermission',
110 roles: ['admin']
111 }
112 }
113 ]
114 },
115
116 {
117 path: '/icon',
118 component: 'layout/Layout',
119 children: [
120 {
121 path: 'index',
122 component: 'views/icons/index',
123 name: 'Icons',
124 meta: { title: 'icons', icon: 'icon', noCache: true }
125 }
126 ]
127 },
128
129 {
130 path: '/components',
131 component: 'layout/Layout',
132 redirect: 'noRedirect',
133 name: 'ComponentDemo',
134 meta: {
135 title: 'components',
136 icon: 'component'
137 },
138 children: [
139 {
140 path: 'tinymce',
141 component: 'views/components-demo/tinymce',
142 name: 'TinymceDemo',
143 meta: { title: 'tinymce' }
144 },
145 {
146 path: 'markdown',
147 component: 'views/components-demo/markdown',
148 name: 'MarkdownDemo',
149 meta: { title: 'markdown' }
150 },
151 {
152 path: 'json-editor',
153 component: 'views/components-demo/json-editor',
154 name: 'JsonEditorDemo',
155 meta: { title: 'jsonEditor' }
156 },
157 {
158 path: 'split-pane',
159 component: 'views/components-demo/split-pane',
160 name: 'SplitpaneDemo',
161 meta: { title: 'splitPane' }
162 },
163 {
164 path: 'avatar-upload',
165 component: 'views/components-demo/avatar-upload',
166 name: 'AvatarUploadDemo',
167 meta: { title: 'avatarUpload' }
168 },
169 {
170 path: 'dropzone',
171 component: 'views/components-demo/dropzone',
172 name: 'DropzoneDemo',
173 meta: { title: 'dropzone' }
174 },
175 {
176 path: 'sticky',
177 component: 'views/components-demo/sticky',
178 name: 'StickyDemo',
179 meta: { title: 'sticky' }
180 },
181 {
182 path: 'count-to',
183 component: 'views/components-demo/count-to',
184 name: 'CountToDemo',
185 meta: { title: 'countTo' }
186 },
187 {
188 path: 'mixin',
189 component: 'views/components-demo/mixin',
190 name: 'ComponentMixinDemo',
191 meta: { title: 'componentMixin' }
192 },
193 {
194 path: 'back-to-top',
195 component: 'views/components-demo/back-to-top',
196 name: 'BackToTopDemo',
197 meta: { title: 'backToTop' }
198 },
199 {
200 path: 'drag-dialog',
201 component: 'views/components-demo/drag-dialog',
202 name: 'DragDialogDemo',
203 meta: { title: 'dragDialog' }
204 },
205 {
206 path: 'drag-select',
207 component: 'views/components-demo/drag-select',
208 name: 'DragSelectDemo',
209 meta: { title: 'dragSelect' }
210 },
211 {
212 path: 'dnd-list',
213 component: 'views/components-demo/dnd-list',
214 name: 'DndListDemo',
215 meta: { title: 'dndList' }
216 },
217 {
218 path: 'drag-kanban',
219 component: 'views/components-demo/drag-kanban',
220 name: 'DragKanbanDemo',
221 meta: { title: 'dragKanban' }
222 }
223 ]
224 },
225 {
226 path: '/charts',
227 component: 'layout/Layout',
228 redirect: 'noRedirect',
229 name: 'Charts',
230 meta: {
231 title: 'charts',
232 icon: 'chart'
233 },
234 children: [
235 {
236 path: 'keyboard',
237 component: 'views/charts/keyboard',
238 name: 'KeyboardChart',
239 meta: { title: 'keyboardChart', noCache: true }
240 },
241 {
242 path: 'line',
243 component: 'views/charts/line',
244 name: 'LineChart',
245 meta: { title: 'lineChart', noCache: true }
246 },
247 {
248 path: 'mixchart',
249 component: 'views/charts/mixChart',
250 name: 'MixChart',
251 meta: { title: 'mixChart', noCache: true }
252 }
253 ]
254 },
255 {
256 path: '/nested',
257 component: 'layout/Layout',
258 redirect: '/nested/menu1/menu1-1',
259 name: 'Nested',
260 meta: {
261 title: 'nested',
262 icon: 'nested'
263 },
264 children: [
265 {
266 path: 'menu1',
267 component: 'views/nested/menu1/index',
268 name: 'Menu1',
269 meta: { title: 'menu1' },
270 redirect: '/nested/menu1/menu1-1',
271 children: [
272 {
273 path: 'menu1-1',
274 component: 'views/nested/menu1/menu1-1',
275 name: 'Menu1-1',
276 meta: { title: 'menu1-1' }
277 },
278 {
279 path: 'menu1-2',
280 component: 'views/nested/menu1/menu1-2',
281 name: 'Menu1-2',
282 redirect: '/nested/menu1/menu1-2/menu1-2-1',
283 meta: { title: 'menu1-2' },
284 children: [
285 {
286 path: 'menu1-2-1',
287 component: 'views/nested/menu1/menu1-2/menu1-2-1',
288 name: 'Menu1-2-1',
289 meta: { title: 'menu1-2-1' }
290 },
291 {
292 path: 'menu1-2-2',
293 component: 'views/nested/menu1/menu1-2/menu1-2-2',
294 name: 'Menu1-2-2',
295 meta: { title: 'menu1-2-2' }
296 }
297 ]
298 },
299 {
300 path: 'menu1-3',
301 component: 'views/nested/menu1/menu1-3',
302 name: 'Menu1-3',
303 meta: { title: 'menu1-3' }
304 }
305 ]
306 },
307 {
308 path: 'menu2',
309 name: 'Menu2',
310 component: 'views/nested/menu2/index',
311 meta: { title: 'menu2' }
312 }
313 ]
314 },
315
316 {
317 path: '/example',
318 component: 'layout/Layout',
319 redirect: '/example/list',
320 name: 'Example',
321 meta: {
322 title: 'example',
323 icon: 'example'
324 },
325 children: [
326 {
327 path: 'create',
328 component: 'views/example/create',
329 name: 'CreateArticle',
330 meta: { title: 'createArticle', icon: 'edit' }
331 },
332 {
333 path: 'edit/:id(\\d+)',
334 component: 'views/example/edit',
335 name: 'EditArticle',
336 meta: { title: 'editArticle', noCache: true },
337 hidden: true
338 },
339 {
340 path: 'list',
341 component: 'views/example/list',
342 name: 'ArticleList',
343 meta: { title: 'articleList', icon: 'list' }
344 }
345 ]
346 },
347
348 {
349 path: '/tab',
350 component: 'layout/Layout',
351 children: [
352 {
353 path: 'index',
354 component: 'views/tab/index',
355 name: 'Tab',
356 meta: { title: 'tab', icon: 'tab' }
357 }
358 ]
359 },
360
361 {
362 path: '/error',
363 component: 'layout/Layout',
364 redirect: 'noRedirect',
365 name: 'ErrorPages',
366 meta: {
367 title: 'errorPages',
368 icon: '404'
369 },
370 children: [
371 {
372 path: '401',
373 component: 'views/error-page/401',
374 name: 'Page401',
375 meta: { title: 'page401', noCache: true }
376 },
377 {
378 path: '404',
379 component: 'views/error-page/404',
380 name: 'Page404',
381 meta: { title: 'page404', noCache: true }
382 }
383 ]
384 },
385
386 {
387 path: '/error-log',
388 component: 'layout/Layout',
389 redirect: 'noRedirect',
390 children: [
391 {
392 path: 'log',
393 component: 'views/error-log/index',
394 name: 'ErrorLog',
395 meta: { title: 'errorLog', icon: 'bug' }
396 }
397 ]
398 },
399
400 {
401 path: '/excel',
402 component: 'layout/Layout',
403 redirect: '/excel/export-excel',
404 name: 'Excel',
405 meta: {
406 title: 'excel',
407 icon: 'excel'
408 },
409 children: [
410 {
411 path: 'export-excel',
412 component: 'views/excel/export-excel',
413 name: 'ExportExcel',
414 meta: { title: 'exportExcel' }
415 },
416 {
417 path: 'export-selected-excel',
418 component: 'views/excel/select-excel',
419 name: 'SelectExcel',
420 meta: { title: 'selectExcel' }
421 },
422 {
423 path: 'export-merge-header',
424 component: 'views/excel/merge-header',
425 name: 'MergeHeader',
426 meta: { title: 'mergeHeader' }
427 },
428 {
429 path: 'upload-excel',
430 component: 'views/excel/upload-excel',
431 name: 'UploadExcel',
432 meta: { title: 'uploadExcel' }
433 }
434 ]
435 },
436
437 {
438 path: '/zip',
439 component: 'layout/Layout',
440 redirect: '/zip/download',
441 alwaysShow: true,
442 meta: { title: 'zip', icon: 'zip' },
443 children: [
444 {
445 path: 'download',
446 component: 'views/zip/index',
447 name: 'ExportZip',
448 meta: { title: 'exportZip' }
449 }
450 ]
451 },
452
453 {
454 path: '/pdf',
455 component: 'layout/Layout',
456 redirect: '/pdf/index',
457 children: [
458 {
459 path: 'index',
460 component: 'views/pdf/index',
461 name: 'PDF',
462 meta: { title: 'pdf', icon: 'pdf' }
463 }
464 ]
465 },
466 {
467 path: '/pdf/download',
468 component: 'views/pdf/download',
469 hidden: true
470 },
471
472 {
473 path: '/theme',
474 component: 'layout/Layout',
475 redirect: 'noRedirect',
476 children: [
477 {
478 path: 'index',
479 component: 'views/theme/index',
480 name: 'Theme',
481 meta: { title: 'theme', icon: 'theme' }
482 }
483 ]
484 },
485
486 {
487 path: '/clipboard',
488 component: 'layout/Layout',
489 redirect: 'noRedirect',
490 children: [
491 {
492 path: 'index',
493 component: 'views/clipboard/index',
494 name: 'ClipboardDemo',
495 meta: { title: 'clipboardDemo', icon: 'clipboard' }
496 }
497 ]
498 },
499
500 {
501 path: '/i18n',
502 component: 'layout/Layout',
503 children: [
504 {
505 path: 'index',
506 component: 'views/i18n-demo/index',
507 name: 'I18n',
508 meta: { title: 'i18n', icon: 'international' }
509 }
510 ]
511 },
512
513 {
514 path: 'external-link',
515 component: 'layout/Layout',
516 children: [
517 {
518 path: 'https://github.com/PanJiaChen/vue-element-admin',
519 meta: { title: 'externalLink', icon: 'link' }
520 }
521 ]
522 },
523
524 { path: '*', redirect: '/404', hidden: true }
525 ]
526
1
1 const tokens = { 2 const tokens = {
2 admin: { 3 admin: {
3 token: 'admin-token' 4 token: 'admin-token'
4 }, 5 },
5 assistant: { 6 editor: {
6 token: 'assistant-token' 7 token: 'editor-token'
7 },
8 runner: {
9 token: 'runner-token'
10 },
11 shoper: {
12 token: 'shoper-token'
13 } 8 }
14 } 9 }
15 10
16 const users = { 11 const users = {
17 'admin-token': { //管理员 12 'admin-token': {
18 roles: ['admin'], 13 roles: ['admin'],
19 introduction: 'I am a super administrator', 14 introduction: 'I am a super administrator',
20 avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', 15 avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
21 name: 'Super Admin' 16 name: 'Super Admin'
22 }, 17 },
23 'assistant-token': { //管理员助理 18 'editor-token': {
24 roles: ['assistant'], 19 roles: ['editor'],
25 introduction: 'I am a assistant of administrator', 20 introduction: 'I am an editor',
26 avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
27 name: 'assistant Admin'
28 },
29 'runner-token': { //运营人员
30 roles: ['runner'],
31 introduction: 'I am an runner',
32 avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
33 name: 'Normal runner'
34 },
35 'shoper-token': { //供应商
36 roles: ['shoper'],
37 introduction: 'I am an shoper',
38 avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', 21 avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
39 name: 'Normal shoper' 22 name: 'Normal Editor'
40 } 23 }
41 } 24 }
42 25
43 export default [{ // user login 26 export default [
44 url: '/yp/user/login', 27 // user login
28 {
29 url: '/vue-element-admin/user/login',
45 type: 'post', 30 type: 'post',
46 response: config => { 31 response: config => {
47 console.log('config-----111--->', config.body); 32 const { username } = config.body
48 const { 33 const token = tokens[username]
49 username, 34
50 password 35 // mock error
51 } = config.body; 36 if (!token) {
52 if (username == 'admin' && password == '111111') {
53 const token = tokens[username];
54 if (!token) {
55 return {
56 code: 60204,
57 message: 'Account and password are incorrect.'
58 }
59 } else {
60 return {
61 code: 20000,
62 data: token
63 }
64 }
65 } else {
66 console.log('passwordpasswordpassword', username, password);
67 return { 37 return {
68 code: 60204, 38 code: 60204,
69 message: 'Account and password are incorrect///.' 39 message: 'Account and password are incorrect.'
70 } 40 }
71 } 41 }
42
43 return {
44 code: 20000,
45 data: token
46 }
72 } 47 }
73 }, 48 },
74 49
75 // get user info 50 // get user info
76 { 51 {
77 url: '/yp/user/info\.*', 52 url: '/vue-element-admin/user/info\.*',
78 type: 'get', 53 type: 'get',
79 response: config => { 54 response: config => {
80 const { 55 const { token } = config.query
81 token
82 } = config.query
83 const info = users[token] 56 const info = users[token]
84 57
85 // mock error 58 // mock error
86 if (!info) { 59 if (!info) {
87 return { 60 return {
88 code: 50008, 61 code: 50008,
89 message: 'Login failed, unable to get user details.' 62 message: 'Login failed, unable to get user details.'
90 } 63 }
91 } 64 }
92 65
93 return { 66 return {
94 code: 20000, 67 code: 20000,
95 data: info 68 data: info
96 } 69 }
97 } 70 }
98 }, 71 },
99 72
100 // user logout 73 // user logout
101 { 74 {
102 url: '/yp/user/logout', 75 url: '/vue-element-admin/user/logout',
103 type: 'post', 76 type: 'post',
104 response: _ => { 77 response: _ => {
1 { 1 {
2 "name": "yp-plan", 2 "name": "vue-element-admin",
3 "version": "4.2.1", 3 "version": "4.2.1",
4 "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", 4 "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
5 "author": "XYT==admin@xiuyetang.com", 5 "author": "Pan <panfree23@gmail.com>",
6 "license": "MIT", 6 "license": "MIT",
7 "scripts": { 7 "scripts": {
8 "dev": "vue-cli-service serve", 8 "dev": "vue-cli-service serve",
9 "build:prod": "vue-cli-service build", 9 "build:prod": "vue-cli-service build",
10 "build:stage": "vue-cli-service build --mode staging", 10 "build:stage": "vue-cli-service build --mode staging",
11 "preview": "node build/index.js --preview", 11 "preview": "node build/index.js --preview",
12 "lint": "eslint --ext .js,.vue src", 12 "lint": "eslint --ext .js,.vue src",
13 "test:unit": "jest --clearCache && vue-cli-service test:unit", 13 "test:unit": "jest --clearCache && vue-cli-service test:unit",
14 "test:ci": "npm run lint && npm run test:unit", 14 "test:ci": "npm run lint && npm run test:unit",
15 "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml" 15 "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
16 "new": "plop"
17 },
18 "husky": {
19 "hooks": {
20 "pre-commit": "lint-staged"
21 }
22 },
23 "lint-staged": {
24 "src/**/*.{js,vue}": [
25 "eslint --fix",
26 "git add"
27 ]
28 },
29 "keywords": [
30 "vue",
31 "admin",
32 "dashboard",
33 "element-ui",
34 "boilerplate",
35 "admin-template",
36 "management-system"
37 ],
38 "repository": {
39 "type": "git",
40 "url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
41 },
42 "bugs": {
43 "url": "https://github.com/PanJiaChen/vue-element-admin/issues"
16 }, 44 },
17 "dependencies": { 45 "dependencies": {
18 "axios": "0.18.1", 46 "axios": "0.18.1",
19 "babel-polyfill": "^6.26.0", 47 "clipboard": "2.0.4",
20 "echarts": "^4.7.0", 48 "codemirror": "5.45.0",
49 "driver.js": "0.9.5",
50 "dropzone": "5.5.1",
51 "echarts": "4.2.1",
21 "element-ui": "2.13.0", 52 "element-ui": "2.13.0",
53 "file-saver": "2.0.1",
54 "fuse.js": "3.4.4",
22 "js-cookie": "2.2.0", 55 "js-cookie": "2.2.0",
56 "jsonlint": "1.6.3",
57 "jszip": "3.2.1",
23 "normalize.css": "7.0.0", 58 "normalize.css": "7.0.0",
24 "nprogress": "0.2.0", 59 "nprogress": "0.2.0",
25 "path-to-regexp": "2.4.0", 60 "path-to-regexp": "2.4.0",
26 "plop": "^2.6.0", 61 "pinyin": "2.9.0",
62 "screenfull": "4.2.0",
63 "showdown": "1.9.0",
64 "sortablejs": "1.8.4",
65 "tui-editor": "1.3.3",
27 "vue": "2.6.10", 66 "vue": "2.6.10",
28 "vue-router": "3.0.6", 67 "vue-count-to": "1.0.13",
29 "vuex": "3.1.0" 68 "vue-i18n": "7.3.2",
69 "vue-router": "3.0.2",
70 "vue-splitpane": "1.0.4",
71 "vuedraggable": "2.20.0",
72 "vuex": "3.1.0",
73 "xlsx": "0.14.1"
30 }, 74 },
31 "devDependencies": { 75 "devDependencies": {
32 "@babel/core": "7.0.0", 76 "@babel/core": "7.0.0",
33 "@babel/preset-env": "^7.9.6",
34 "@babel/register": "7.0.0", 77 "@babel/register": "7.0.0",
35 "@vue/cli-plugin-babel": "3.6.0", 78 "@vue/cli-plugin-babel": "3.5.3",
36 "@vue/cli-plugin-eslint": "^3.9.1", 79 "@vue/cli-plugin-eslint": "^3.9.1",
37 "@vue/cli-plugin-unit-jest": "3.6.3", 80 "@vue/cli-plugin-unit-jest": "3.5.3",
38 "@vue/cli-service": "3.6.0", 81 "@vue/cli-service": "3.5.3",
39 "@vue/test-utils": "1.0.0-beta.29", 82 "@vue/test-utils": "1.0.0-beta.29",
40 "autoprefixer": "^9.5.1", 83 "autoprefixer": "^9.5.1",
41 "babel-cli": "^6.26.0",
42 "babel-core": "7.0.0-bridge.0", 84 "babel-core": "7.0.0-bridge.0",
43 "babel-eslint": "10.0.1", 85 "babel-eslint": "10.0.1",
44 "babel-jest": "23.6.0", 86 "babel-jest": "23.6.0",
45 "babel-plugin-component": "^1.1.1",
46 "babel-preset-env": "^1.7.0",
47 "chalk": "2.4.2", 87 "chalk": "2.4.2",
88 "chokidar": "2.1.5",
48 "connect": "3.6.6", 89 "connect": "3.6.6",
49 "eslint": "5.15.3", 90 "eslint": "5.15.3",
50 "eslint-plugin-vue": "5.2.2", 91 "eslint-plugin-vue": "5.2.2",
51 "html-webpack-plugin": "3.2.0", 92 "html-webpack-plugin": "3.2.0",
93 "husky": "1.3.1",
94 "lint-staged": "8.1.5",
52 "mockjs": "1.0.1-beta3", 95 "mockjs": "1.0.1-beta3",
53 "node-sass": "^4.9.0", 96 "node-sass": "^4.9.0",
97 "plop": "2.3.0",
54 "runjs": "^4.3.2", 98 "runjs": "^4.3.2",
55 "sass-loader": "^7.1.0", 99 "sass-loader": "^7.1.0",
56 "script-ext-html-webpack-plugin": "2.1.3", 100 "script-ext-html-webpack-plugin": "2.1.3",
57 "script-loader": "0.7.2", 101 "script-loader": "0.7.2",
58 "serve-static": "^1.13.2", 102 "serve-static": "^1.13.2",
59 "svg-sprite-loader": "4.1.3", 103 "svg-sprite-loader": "4.1.3",
60 "svgo": "1.2.2", 104 "svgo": "1.2.0",
61 "vue-schart": "^2.0.0",
62 "vue-template-compiler": "2.6.10" 105 "vue-template-compiler": "2.6.10"
63 }, 106 },
64 "engines": { 107 "engines": {
65 "node": ">=8.9", 108 "node": ">=8.9",
66 "npm": ">= 3.0.0" 109 "npm": ">= 3.0.0"
67 }, 110 },
68 "browserslist": [ 111 "browserslist": [
plop-templates/component/index.hbs
File was created 1 {{#if template}}
2 <template>
3 <div />
4 </template>
5 {{/if}}
6
7 {{#if script}}
8 <script>
9 export default {
10 name: '{{ properCase name }}',
11 props: {},
12 data() {
13 return {}
14 },
15 created() {},
16 mounted() {},
17 methods: {}
18 }
19 </script>
20 {{/if}}
21
22 {{#if style}}
23 <style lang="scss" scoped>
24
25 </style>
26 {{/if}}
27
plop-templates/component/prompt.js
File was created 1 const { notEmpty } = require('../utils.js')
2
3 module.exports = {
4 description: 'generate vue component',
5 prompts: [{
6 type: 'input',
7 name: 'name',
8 message: 'component name please',
9 validate: notEmpty('name')
10 },
11 {
12 type: 'checkbox',
13 name: 'blocks',
14 message: 'Blocks:',
15 choices: [{
16 name: '<template>',
17 value: 'template',
18 checked: true
19 },
20 {
21 name: '<script>',
22 value: 'script',
23 checked: true
24 },
25 {
26 name: 'style',
27 value: 'style',
28 checked: true
29 }
30 ],
31 validate(value) {
32 if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
33 return 'Components require at least a <script> or <template> tag.'
34 }
35 return true
36 }
37 }
38 ],
39 actions: data => {
40 const name = '{{properCase name}}'
41 const actions = [{
42 type: 'add',
43 path: `src/components/${name}/index.vue`,
44 templateFile: 'plop-templates/component/index.hbs',
45 data: {
46 name: name,
47 template: data.blocks.includes('template'),
48 script: data.blocks.includes('script'),
49 style: data.blocks.includes('style')
50 }
51 }]
52
53 return actions
54 }
55 }
56
plop-templates/store/index.hbs
File was created 1 {{#if state}}
2 const state = {}
3 {{/if}}
4
5 {{#if mutations}}
6 const mutations = {}
7 {{/if}}
8
9 {{#if actions}}
10 const actions = {}
11 {{/if}}
12
13 export default {
14 namespaced: true,
15 {{options}}
16 }
17
plop-templates/store/prompt.js
File was created 1 const { notEmpty } = require('../utils.js')
2
3 module.exports = {
4 description: 'generate store',
5 prompts: [{
6 type: 'input',
7 name: 'name',
8 message: 'store name please',
9 validate: notEmpty('name')
10 },
11 {
12 type: 'checkbox',
13 name: 'blocks',
14 message: 'Blocks:',
15 choices: [{
16 name: 'state',
17 value: 'state',
18 checked: true
19 },
20 {
21 name: 'mutations',
22 value: 'mutations',
23 checked: true
24 },
25 {
26 name: 'actions',
27 value: 'actions',
28 checked: true
29 }
30 ],
31 validate(value) {
32 if (!value.includes('state') || !value.includes('mutations')) {
33 return 'store require at least state and mutations'
34 }
35 return true
36 }
37 }
38 ],
39 actions(data) {
40 const name = '{{name}}'
41 const { blocks } = data
42 const options = ['state', 'mutations']
43 const joinFlag = `,
44 `
45 if (blocks.length === 3) {
46 options.push('actions')
47 }
48
49 const actions = [{
50 type: 'add',
51 path: `src/store/modules/${name}.js`,
52 templateFile: 'plop-templates/store/index.hbs',
53 data: {
54 options: options.join(joinFlag),
55 state: blocks.includes('state'),
56 mutations: blocks.includes('mutations'),
57 actions: blocks.includes('actions')
58 }
59 }]
60 return actions
61 }
62 }
63
plop-templates/utils.js
File was created 1 exports.notEmpty = name => {
2 return v => {
3 if (!v || v.trim === '') {
4 return `${name} is required`
5 } else {
6 return true
7 }
8 }
9 }
10
plop-templates/view/index.hbs
File was created 1 {{#if template}}
2 <template>
3 <div />
4 </template>
5 {{/if}}
6
7 {{#if script}}
8 <script>
9 export default {
10 name: '{{ properCase name }}',
11 props: {},
12 data() {
13 return {}
14 },
15 created() {},
16 mounted() {},
17 methods: {}
18 }
19 </script>
20 {{/if}}
21
22 {{#if style}}
23 <style lang="scss" scoped>
24
25 </style>
26 {{/if}}
27
plop-templates/view/prompt.js
File was created 1 const { notEmpty } = require('../utils.js')
2
3 module.exports = {
4 description: 'generate a view',
5 prompts: [{
6 type: 'input',
7 name: 'name',
8 message: 'view name please',
9 validate: notEmpty('name')
10 },
11 {
12 type: 'checkbox',
13 name: 'blocks',
14 message: 'Blocks:',
15 choices: [{
16 name: '<template>',
17 value: 'template',
18 checked: true
19 },
20 {
21 name: '<script>',
22 value: 'script',
23 checked: true
24 },
25 {
26 name: 'style',
27 value: 'style',
28 checked: true
29 }
30 ],
31 validate(value) {
32 if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
33 return 'View require at least a <script> or <template> tag.'
34 }
35 return true
36 }
37 }
38 ],
39 actions: data => {
40 const name = '{{name}}'
41 const actions = [{
42 type: 'add',
43 path: `src/views/${name}/index.vue`,
44 templateFile: 'plop-templates/view/index.hbs',
45 data: {
46 name: name,
47 template: data.blocks.includes('template'),
48 script: data.blocks.includes('script'),
49 style: data.blocks.includes('style')
50 }
51 }]
52
53 return actions
54 }
55 }
56
File was created 1 const viewGenerator = require('./plop-templates/view/prompt')
2 const componentGenerator = require('./plop-templates/component/prompt')
3 const storeGenerator = require('./plop-templates/store/prompt.js')
4
5 module.exports = function(plop) {
6 plop.setGenerator('view', viewGenerator)
7 plop.setGenerator('component', componentGenerator)
8 plop.setGenerator('store', storeGenerator)
9 }
10
postcss.config.js
1 // https://github.com/michael-ciniawsky/postcss-load-config
2
3 module.exports = { 1 module.exports = {
4 'plugins': { 2 plugins: {
5 // to edit target browsers: use "browserslist" field in package.json 3 autoprefixer: {}
6 'autoprefixer': {}
7 } 4 }
8 } 5 }
9 6
public/favicon.ico 100644 → 100755
No preview for this file type
public/index.html
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <meta charset="utf-8"> 4 <meta charset="utf-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6 <meta name="renderer" content="webkit">
6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 7 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
7 <link rel="icon" href="<%= BASE_URL %>favicon.ico"> 8 <link rel="icon" href="<%= BASE_URL %>favicon.ico">
8 <title><%= webpackConfig.name %></title> 9 <title><%= webpackConfig.name %></title>
9 </head> 10 </head>
10 <body> 11 <body>
11 <noscript>
12 <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
13 </noscript>
14 <div id="app"></div> 12 <div id="app"></div>
15 <!-- built files will be auto injected --> 13 <!-- built files will be auto injected -->
16 </body> 14 </body>
17 </html> 15 </html>
1 <template> 1 <template>
2 <div id="app"> 2 <div id="app">
3 <router-view /> 3 <router-view />
4 </div> 4 </div>
5 </template> 5 </template>
6 6
7
8 <script> 7 <script>
9 export default { 8 export default {
10 name: "App" 9 name: 'App'
11 };
12 </script>
13
14
15 <style>
16 @import "//at.alicdn.com/t/font_1075796_5kpx2vwkmq3.css";
17
18 [class^="el-icon-mo"],
19 [class^=" el-icon-mo"] {
20 font-family: "iconfont", serif !important;
21 font-size: 16px;
22 font-style: normal;
23 -webkit-font-smoothing: antialiased;
24 -moz-osx-font-smoothing: grayscale;
25 } 10 }
26 </style>
src/api/article.js
File was created 1 import request from '@/utils/request'
2
3 export function fetchList(query) {
4 return request({
5 url: '/vue-element-admin/article/list',
6 method: 'get',
7 params: query
8 })
9 }
10
11 export function fetchArticle(id) {
12 return request({
13 url: '/vue-element-admin/article/detail',
14 method: 'get',
15 params: { id }
16 })
17 }
18
19 export function fetchPv(pv) {
20 return request({
21 url: '/vue-element-admin/article/pv',
22 method: 'get',
23 params: { pv }
24 })
25 }
26
27 export function createArticle(data) {
28 return request({
29 url: '/vue-element-admin/article/create',
30 method: 'post',
31 data
32 })
33 }
34
35 export function updateArticle(data) {
36 return request({
37 url: '/vue-element-admin/article/update',
38 method: 'post',
39 data
40 })
41 }
42
File was created 1 import request from '@/utils/request'
2
3 export function getToken() {
4 return request({
5 url: '/qiniu/upload/token', // 假地址 自行替换
6 method: 'get'
7 })
8 }
9
src/api/remote-search.js
File was created 1 import request from '@/utils/request'
2
3 export function searchUser(name) {
4 return request({
5 url: '/vue-element-admin/search/user',
6 method: 'get',
7 params: { name }
8 })
9 }
10
11 export function transactionList(query) {
12 return request({
13 url: '/vue-element-admin/transaction/list',
14 method: 'get',
15 params: query
16 })
17 }
18
File was created 1 import request from '@/utils/request'
2
3 export function getRoutes() {
4 return request({
5 url: '/vue-element-admin/routes',
6 method: 'get'
7 })
8 }
9
10 export function getRoles() {
11 return request({
12 url: '/vue-element-admin/roles',
13 method: 'get'
14 })
15 }
16
17 export function addRole(data) {
18 return request({
19 url: '/vue-element-admin/role',
20 method: 'post',
21 data
22 })
23 }
24
25 export function updateRole(id, data) {
26 return request({
27 url: `/vue-element-admin/role/${id}`,
28 method: 'put',
29 data
30 })
31 }
32
33 export function deleteRole(id) {
34 return request({
35 url: `/vue-element-admin/role/${id}`,
36 method: 'delete'
37 })
38 }
39
1 import request from '@/utils/request' 1 import request from '@/utils/request'
2 // var qs = require('Qs');
3 2
4 export function login(data) { 3 export function login(data) {
5 console.log('login.1111...', data)
6 return request({ 4 return request({
7 url: '/yp/user/login', 5 url: '/vue-element-admin/user/login',
8 // url: '/yp.user.login.php',
9 method: 'post', 6 method: 'post',
10 // headers: { 7 data
11 // 'Content-type': 'application/x-www-form-urlencoded'
12 // },
13 data,
14 // responseType: 'text/plain',
15 // onDownloadProgress: false,
16 // onUploadProgress: true,
17 // proxy: {}
18 });
19 }
20
21 export function getInfo(token) {
22 console.log('getInfo....', token)
23 return request({
24 url: '/yp/user/info',
25 // url: '/yp.user.info.php',
26 method: 'get',
27 params: {
28 token
29 }
30 // ,
31 // headers: {
32 // 'Content-type': 'application/x-www-form-urlencoded'
33 // },
34 }) 8 })
35 } 9 }
36 10
37 export function list(token) { 11 export function getInfo(token) {
38 console.log('listUser....', token)
39 return request({ 12 return request({
40 url: '/yp/user/list', 13 url: '/vue-element-admin/user/info',
41 method: 'get', 14 method: 'get',
42 params: { 15 params: { token }
43 token
44 }
45 }) 16 })
46 } 17 }
47 18
48 export function add(token) { 19 export function logout() {
49 console.log('addUser....', token)
50 return request({ 20 return request({
51 url: '/yp/user/add', 21 url: '/vue-element-admin/user/logout',
52 method: 'post', 22 method: 'post'
53 params: {
54 token
55 }
56 })
57 }
58
59 export function modi(token) {
60 console.log('modiUser....', token)
61 return request({
62 url: '/yp/user/modi',
63 method: 'post',
64 params: {
65 token
66 }
67 })
68 }
69
70 export function logout(token) {
71 console.log('logout....', token)
72 return request({
73 url: '/yp/user/logout',
74 // url: '/yp.user.logout.php',
75 method: 'post',
76 }) 23 })
77 } 24 }
78 25
src/assets/401_images/401.gif

160 KB

src/assets/404_images/404.png 100644 → 100755

95.8 KB | W: | H:

95.8 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
src/assets/404_images/404_cloud.png 100644 → 100755

4.65 KB | W: | H:

4.65 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
src/assets/custom-theme/fonts/element-icons.ttf
No preview for this file type
src/assets/custom-theme/fonts/element-icons.woff
No preview for this file type
src/assets/custom-theme/index.css
File was created 1 @charset "UTF-8";.custom-theme .fade-in-linear-enter-active,.custom-theme .fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .fade-in-linear-enter,.custom-theme .fade-in-linear-leave,.custom-theme .fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-linear-enter-active,.custom-theme .el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .el-fade-in-linear-enter,.custom-theme .el-fade-in-linear-leave,.custom-theme .el-fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-enter-active,.custom-theme .el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.custom-theme .el-fade-in-enter,.custom-theme .el-fade-in-leave-active{opacity:0}.custom-theme .el-zoom-in-center-enter-active,.custom-theme .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)}.custom-theme .el-zoom-in-center-enter,.custom-theme .el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.custom-theme .el-zoom-in-top-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center top;transform-origin:center top}.custom-theme .el-zoom-in-top-enter,.custom-theme .el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-bottom-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center bottom;transform-origin:center bottom}.custom-theme .el-zoom-in-bottom-enter,.custom-theme .el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-left-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:top left;transform-origin:top left}.custom-theme .el-zoom-in-left-enter,.custom-theme .el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.custom-theme .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}.custom-theme .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}.custom-theme .el-list-enter-active,.custom-theme .el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.custom-theme .el-list-enter,.custom-theme .el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.custom-theme .el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}@font-face{font-family:element-icons;src:url(fonts/element-icons.woff?t=1508751886602) format("woff"),url(fonts/element-icons.ttf?t=1508751886602) format("truetype");font-weight:400;font-style:normal}.custom-theme [class*=" el-icon-"],.custom-theme [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}.custom-theme .el-icon-upload:before{content:"\e60d"}.custom-theme .el-icon-error:before{content:"\e62c"}.custom-theme .el-icon-success:before{content:"\e62d"}.custom-theme .el-icon-warning:before{content:"\e62e"}.custom-theme .el-icon-sort-down:before{content:"\e630"}.custom-theme .el-icon-sort-up:before{content:"\e631"}.custom-theme .el-icon-arrow-left:before{content:"\e600"}.custom-theme .el-icon-circle-plus:before{content:"\e601"}.custom-theme .el-icon-circle-plus-outline:before{content:"\e602"}.custom-theme .el-icon-arrow-down:before{content:"\e603"}.custom-theme .el-icon-arrow-right:before{content:"\e604"}.custom-theme .el-icon-arrow-up:before{content:"\e605"}.custom-theme .el-icon-back:before{content:"\e606"}.custom-theme .el-icon-circle-close:before{content:"\e607"}.custom-theme .el-icon-date:before{content:"\e608"}.custom-theme .el-icon-circle-close-outline:before{content:"\e609"}.custom-theme .el-icon-caret-left:before{content:"\e60a"}.custom-theme .el-icon-caret-bottom:before{content:"\e60b"}.custom-theme .el-icon-caret-top:before{content:"\e60c"}.custom-theme .el-icon-caret-right:before{content:"\e60e"}.custom-theme .el-icon-close:before{content:"\e60f"}.custom-theme .el-icon-d-arrow-left:before{content:"\e610"}.custom-theme .el-icon-check:before{content:"\e611"}.custom-theme .el-icon-delete:before{content:"\e612"}.custom-theme .el-icon-d-arrow-right:before{content:"\e613"}.custom-theme .el-icon-document:before{content:"\e614"}.custom-theme .el-icon-d-caret:before{content:"\e615"}.custom-theme .el-icon-edit-outline:before{content:"\e616"}.custom-theme .el-icon-download:before{content:"\e617"}.custom-theme .el-icon-goods:before{content:"\e618"}.custom-theme .el-icon-search:before{content:"\e619"}.custom-theme .el-icon-info:before{content:"\e61a"}.custom-theme .el-icon-message:before{content:"\e61b"}.custom-theme .el-icon-edit:before{content:"\e61c"}.custom-theme .el-icon-location:before{content:"\e61d"}.custom-theme .el-icon-loading:before{content:"\e61e"}.custom-theme .el-icon-location-outline:before{content:"\e61f"}.custom-theme .el-icon-menu:before{content:"\e620"}.custom-theme .el-icon-minus:before{content:"\e621"}.custom-theme .el-icon-bell:before{content:"\e622"}.custom-theme .el-icon-mobile-phone:before{content:"\e624"}.custom-theme .el-icon-news:before{content:"\e625"}.custom-theme .el-icon-more:before{content:"\e646"}.custom-theme .el-icon-more-outline:before{content:"\e626"}.custom-theme .el-icon-phone:before{content:"\e627"}.custom-theme .el-icon-phone-outline:before{content:"\e628"}.custom-theme .el-icon-picture:before{content:"\e629"}.custom-theme .el-icon-picture-outline:before{content:"\e62a"}.custom-theme .el-icon-plus:before{content:"\e62b"}.custom-theme .el-icon-printer:before{content:"\e62f"}.custom-theme .el-icon-rank:before{content:"\e632"}.custom-theme .el-icon-refresh:before{content:"\e633"}.custom-theme .el-icon-question:before{content:"\e634"}.custom-theme .el-icon-remove:before{content:"\e635"}.custom-theme .el-icon-share:before{content:"\e636"}.custom-theme .el-icon-star-on:before{content:"\e637"}.custom-theme .el-icon-setting:before{content:"\e638"}.custom-theme .el-icon-circle-check:before{content:"\e639"}.custom-theme .el-icon-service:before{content:"\e63a"}.custom-theme .el-icon-sold-out:before{content:"\e63b"}.custom-theme .el-icon-remove-outline:before{content:"\e63c"}.custom-theme .el-icon-star-off:before{content:"\e63d"}.custom-theme .el-icon-circle-check-outline:before{content:"\e63e"}.custom-theme .el-icon-tickets:before{content:"\e63f"}.custom-theme .el-icon-sort:before{content:"\e640"}.custom-theme .el-icon-zoom-in:before{content:"\e641"}.custom-theme .el-icon-time:before{content:"\e642"}.custom-theme .el-icon-view:before{content:"\e643"}.custom-theme .el-icon-upload2:before{content:"\e644"}.custom-theme .el-icon-zoom-out:before{content:"\e645"}.custom-theme .el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.custom-theme .el-icon--right{margin-left:5px}.custom-theme .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)}}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .el-select-dropdown{position:absolute;z-index:1001;border:solid 1px #dfe4ed;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}.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#262729;background-color:#fff}.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\E611";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.custom-theme .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.custom-theme .el-select-dropdown .popper__arrow{-webkit-transform:translateX(-400%);transform:translateX(-400%)}.custom-theme .el-select-dropdown.is-arrow-fixed .popper__arrow{-webkit-transform:translateX(-200%);transform:translateX(-200%)}.custom-theme .el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.custom-theme .el-select-dropdown__wrap{max-height:274px}.custom-theme .el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-tag{background-color:rgba(38,39,41,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#262729;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(38,39,41,.2);white-space:nowrap}.custom-theme .el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-5px;color:#262729}.custom-theme .el-tag .el-icon-close::before{display:block}.custom-theme .el-tag .el-icon-close:hover{background-color:#262729;color:#fff}.custom-theme .el-tag--info{background-color:rgba(10,118,164,.1);border-color:rgba(10,118,164,.2);color:#0a76a4}.custom-theme .el-tag--info.is-hit{border-color:#0a76a4}.custom-theme .el-tag--info .el-tag__close{color:#0a76a4}.custom-theme .el-tag--info .el-tag__close:hover{background-color:#0a76a4;color:#fff}.custom-theme .el-tag--success{background-color:rgba(64,145,103,.1);border-color:rgba(64,145,103,.2);color:#409167}.custom-theme .el-tag--success.is-hit{border-color:#409167}.custom-theme .el-tag--success .el-tag__close{color:#409167}.custom-theme .el-tag--success .el-tag__close:hover{background-color:#409167;color:#fff}.custom-theme .el-tag--warning{background-color:rgba(157,164,8,.1);border-color:rgba(157,164,8,.2);color:#9da408}.custom-theme .el-tag--warning.is-hit{border-color:#9da408}.custom-theme .el-tag--warning .el-tag__close{color:#9da408}.custom-theme .el-tag--warning .el-tag__close:hover{background-color:#9da408;color:#fff}.custom-theme .el-tag--danger{background-color:rgba(179,69,14,.1);border-color:rgba(179,69,14,.2);color:#b3450e}.custom-theme .el-tag--danger.is-hit{border-color:#b3450e}.custom-theme .el-tag--danger .el-tag__close{color:#b3450e}.custom-theme .el-tag--danger .el-tag__close:hover{background-color:#b3450e;color:#fff}.custom-theme .el-tag--medium{height:28px;line-height:26px}.custom-theme .el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--small{height:24px;padding:0 8px;line-height:22px}.custom-theme .el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--mini{height:20px;padding:0 5px;line-height:19px}.custom-theme .el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.custom-theme .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#5a5e66;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.custom-theme .el-select-dropdown__item.is-disabled{color:#b4bccc;cursor:not-allowed}.custom-theme .el-select-dropdown__item.is-disabled:hover{background-color:#fff}.custom-theme .el-select-dropdown__item.hover,.custom-theme .el-select-dropdown__item:hover{background-color:#f5f7fa}.custom-theme .el-select-dropdown__item.selected{color:#262729;font-weight:700}.custom-theme .el-select-dropdown__item span{line-height:34px!important}.custom-theme .el-select-group{margin:0;padding:0}.custom-theme .el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.custom-theme .el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.custom-theme .el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#dfe4ed}.custom-theme .el-select-group__title{padding-left:20px;font-size:12px;color:#0a76a4;line-height:30px}.custom-theme .el-select-group .el-select-dropdown__item{padding-left:20px}.custom-theme .el-scrollbar{overflow:hidden;position:relative}.custom-theme .el-scrollbar:active>.el-scrollbar__bar,.custom-theme .el-scrollbar:focus>.el-scrollbar__bar,.custom-theme .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.custom-theme .el-scrollbar__wrap{overflow:scroll;height:100%}.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.custom-theme .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(135,141,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.custom-theme .el-scrollbar__thumb:hover{background-color:rgba(135,141,153,.5)}.custom-theme .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}.custom-theme .el-scrollbar__bar.is-vertical{width:6px;top:2px}.custom-theme .el-scrollbar__bar.is-vertical>div{width:100%}.custom-theme .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.custom-theme .el-scrollbar__bar.is-horizontal>div{height:100%}.custom-theme .el-select{display:inline-block;position:relative}.custom-theme .el-select:hover .el-input__inner{border-color:#b4bccc}.custom-theme .el-select .el-input__inner{cursor:pointer;padding-right:35px}.custom-theme .el-select .el-input__inner:focus{border-color:#262729}.custom-theme .el-select .el-input .el-select__caret{color:#b4bccc;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);line-height:16px;cursor:pointer}.custom-theme .el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.custom-theme .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:#b4bccc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-select .el-input .el-select__caret.is-show-close:hover{color:#878d99}.custom-theme .el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.custom-theme .el-select .el-input.is-disabled .el-input__inner:hover{border-color:#dfe4ed}.custom-theme .el-select>.el-input{display:block}.custom-theme .el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.custom-theme .el-select__input.is-mini{height:14px}.custom-theme .el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#b4bccc;line-height:18px;font-size:14px}.custom-theme .el-select__close:hover{color:#878d99}.custom-theme .el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.custom-theme .el-select .el-tag__close{margin-top:-2px}.custom-theme .el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:3px 0 3px 6px;background-color:#f0f2f5}.custom-theme .el-select .el-tag__close.el-icon-close{background-color:#b4bccc;right:-7px;color:#fff}.custom-theme .el-select .el-tag__close.el-icon-close:hover{background-color:#878d99}.custom-theme .el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.custom-theme .el-select__tag{display:inline-block;height:24px;line-height:24px;font-size:14px;border-radius:4px;color:#fff;background-color:#262729}.custom-theme .el-select__tag .el-icon-close{font-size:14px}.custom-theme .el-pagination{white-space:nowrap;padding:2px 5px;color:#2d2f33;font-weight:700}.custom-theme .el-pagination::after,.custom-theme .el-pagination::before{display:table;content:""}.custom-theme .el-pagination::after{clear:both}.custom-theme .el-pagination button,.custom-theme .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}.custom-theme .el-pagination .el-input__inner{text-align:center}.custom-theme .el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-pagination .el-select .el-input{width:100px;margin:0 5px}.custom-theme .el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px;height:28px}.custom-theme .el-pagination button{border:none;padding:0 6px;background:0 0}.custom-theme .el-pagination button:focus{outline:0}.custom-theme .el-pagination button:hover{color:#262729}.custom-theme .el-pagination button.disabled{color:#b4bccc;background-color:#fff;cursor:not-allowed}.custom-theme .el-pagination .btn-next,.custom-theme .el-pagination .btn-prev{background:center center no-repeat;background-size:16px;background-color:#fff;cursor:pointer;margin:0;color:#2d2f33}.custom-theme .el-pagination .btn-next .el-icon,.custom-theme .el-pagination .btn-prev .el-icon{display:block;font-size:12px}.custom-theme .el-pagination .btn-prev{padding-right:12px}.custom-theme .el-pagination .btn-next{padding-left:12px}.custom-theme .el-pagination--small .btn-next,.custom-theme .el-pagination--small .btn-prev,.custom-theme .el-pagination--small .el-pager li,.custom-theme .el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.custom-theme .el-pagination--small .arrow.disabled{visibility:hidden}.custom-theme .el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#5a5e66}.custom-theme .el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.custom-theme .el-pagination__sizes .el-input .el-input__inner:hover{border-color:#262729}.custom-theme .el-pagination__total{margin-right:10px;font-weight:400;color:#5a5e66}.custom-theme .el-pagination__jump{margin-left:24px;font-weight:400;color:#5a5e66}.custom-theme .el-pagination__jump .el-input__inner{padding:0 3px}.custom-theme .el-pagination__rightwrapper{float:right}.custom-theme .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;-moz-appearance:textfield}.custom-theme .el-pagination__editor.el-input{width:50px}.custom-theme .el-pagination__editor.el-input .el-input__inner{height:28px}.custom-theme .el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.custom-theme .el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.custom-theme .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}.custom-theme .el-pager .el-icon-more::before{vertical-align:-4px}.custom-theme .el-pager li{padding:0 4px;background:#fff;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}.custom-theme .el-pager li.btn-quicknext,.custom-theme .el-pager li.btn-quickprev{line-height:28px;color:#2d2f33}.custom-theme .el-pager li.btn-quickprev:hover{cursor:pointer}.custom-theme .el-pager li.btn-quicknext:hover{cursor:pointer}.custom-theme .el-pager li.active+li{border-left:0}.custom-theme .el-pager li:hover{color:#262729}.custom-theme .el-pager li.active{color:#262729;cursor:default}.custom-theme .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.custom-theme .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}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.custom-theme .v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.custom-theme .el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.custom-theme .el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.custom-theme .el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.custom-theme .el-dialog__header{padding:15px;padding-bottom:10px}.custom-theme .el-dialog__headerbtn{position:absolute;top:15px;right:15px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.custom-theme .el-dialog__headerbtn .el-dialog__close{color:#0a76a4}.custom-theme .el-dialog__headerbtn:focus .el-dialog__close,.custom-theme .el-dialog__headerbtn:hover .el-dialog__close{color:#262729}.custom-theme .el-dialog__title{line-height:24px;font-size:18px;color:#2d2f33}.custom-theme .el-dialog__body{padding:30px 20px;color:#5a5e66;line-height:24px;font-size:14px}.custom-theme .el-dialog__footer{padding:15px;padding-top:10px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-dialog--center{text-align:center}.custom-theme .el-dialog--center .el-dialog__header{padding-top:30px}.custom-theme .el-dialog--center .el-dialog__body{text-align:initial;padding:25px 27px 30px}.custom-theme .el-dialog--center .el-dialog__footer{text-align:inherit;padding-bottom:30px}.custom-theme .dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.custom-theme .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}}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-scrollbar{overflow:hidden;position:relative}.custom-theme .el-scrollbar:active>.el-scrollbar__bar,.custom-theme .el-scrollbar:focus>.el-scrollbar__bar,.custom-theme .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.custom-theme .el-scrollbar__wrap{overflow:scroll;height:100%}.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.custom-theme .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(135,141,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.custom-theme .el-scrollbar__thumb:hover{background-color:rgba(135,141,153,.5)}.custom-theme .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}.custom-theme .el-scrollbar__bar.is-vertical{width:6px;top:2px}.custom-theme .el-scrollbar__bar.is-vertical>div{width:100%}.custom-theme .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.custom-theme .el-scrollbar__bar.is-horizontal>div{height:100%}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .el-autocomplete{position:relative;display:inline-block}.custom-theme .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}.custom-theme .el-autocomplete-suggestion.el-popper .popper__arrow{left:24px!important}.custom-theme .el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto;background-color:#fff;border:1px solid #dfe4ed;border-radius:4px}.custom-theme .el-autocomplete-suggestion__list{margin:0;padding:0}.custom-theme .el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#5a5e66;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.custom-theme .el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.custom-theme .el-autocomplete-suggestion li.highlighted{background-color:#f5f7fa}.custom-theme .el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.custom-theme .el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.custom-theme .el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.custom-theme .el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:"";height:100%;vertical-align:middle}.custom-theme .el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.custom-theme .el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.custom-theme .el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-color:#d8dce5;color:#5a5e66;-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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button+.el-button{margin-left:10px}.custom-theme .el-button.is-round{padding:12px 20px}.custom-theme .el-button:focus,.custom-theme .el-button:hover{color:#262729;border-color:#bebebf;background-color:#e9e9ea}.custom-theme .el-button:active{color:#222325;border-color:#222325;outline:0}.custom-theme .el-button::-moz-focus-inner{border:0}.custom-theme .el-button [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-button.is-plain:focus,.custom-theme .el-button.is-plain:hover{background:#fff;border-color:#262729;color:#262729}.custom-theme .el-button.is-plain:active{background:#fff;border-color:#222325;color:#222325;outline:0}.custom-theme .el-button.is-active{color:#222325;border-color:#222325}.custom-theme .el-button.is-disabled,.custom-theme .el-button.is-disabled:focus,.custom-theme .el-button.is-disabled:hover{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5}.custom-theme .el-button.is-disabled.el-button--text{background-color:transparent}.custom-theme .el-button.is-disabled.is-plain,.custom-theme .el-button.is-disabled.is-plain:focus,.custom-theme .el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#e6ebf5;color:#b4bccc}.custom-theme .el-button.is-loading{position:relative;pointer-events:none}.custom-theme .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)}.custom-theme .el-button.is-round{border-radius:20px;padding:12px 23px}.custom-theme .el-button--primary{color:#fff;background-color:#262729;border-color:#262729}.custom-theme .el-button--primary:focus,.custom-theme .el-button--primary:hover{background:#515254;border-color:#515254;color:#fff}.custom-theme .el-button--primary:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-active{background:#222325;border-color:#222325;color:#fff}.custom-theme .el-button--primary.is-disabled,.custom-theme .el-button--primary.is-disabled:active,.custom-theme .el-button--primary.is-disabled:focus,.custom-theme .el-button--primary.is-disabled:hover{color:#fff;background-color:#939394;border-color:#939394}.custom-theme .el-button--primary.is-plain{color:#262729;background:#e9e9ea;border-color:#a8a9a9}.custom-theme .el-button--primary.is-plain:focus,.custom-theme .el-button--primary.is-plain:hover{background:#262729;border-color:#262729;color:#fff}.custom-theme .el-button--primary.is-plain:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-plain.is-disabled,.custom-theme .el-button--primary.is-plain.is-disabled:active,.custom-theme .el-button--primary.is-plain.is-disabled:focus,.custom-theme .el-button--primary.is-plain.is-disabled:hover{color:#7d7d7f;background-color:#e9e9ea;border-color:#d4d4d4}.custom-theme .el-button--success{color:#fff;background-color:#409167;border-color:#409167}.custom-theme .el-button--success:focus,.custom-theme .el-button--success:hover{background:#66a785;border-color:#66a785;color:#fff}.custom-theme .el-button--success:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-active{background:#3a835d;border-color:#3a835d;color:#fff}.custom-theme .el-button--success.is-disabled,.custom-theme .el-button--success.is-disabled:active,.custom-theme .el-button--success.is-disabled:focus,.custom-theme .el-button--success.is-disabled:hover{color:#fff;background-color:#a0c8b3;border-color:#a0c8b3}.custom-theme .el-button--success.is-plain{color:#409167;background:#ecf4f0;border-color:#b3d3c2}.custom-theme .el-button--success.is-plain:focus,.custom-theme .el-button--success.is-plain:hover{background:#409167;border-color:#409167;color:#fff}.custom-theme .el-button--success.is-plain:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-plain.is-disabled,.custom-theme .el-button--success.is-plain.is-disabled:active,.custom-theme .el-button--success.is-plain.is-disabled:focus,.custom-theme .el-button--success.is-plain.is-disabled:hover{color:#8cbda4;background-color:#ecf4f0;border-color:#d9e9e1}.custom-theme .el-button--warning{color:#fff;background-color:#9da408;border-color:#9da408}.custom-theme .el-button--warning:focus,.custom-theme .el-button--warning:hover{background:#b1b639;border-color:#b1b639;color:#fff}.custom-theme .el-button--warning:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-active{background:#8d9407;border-color:#8d9407;color:#fff}.custom-theme .el-button--warning.is-disabled,.custom-theme .el-button--warning.is-disabled:active,.custom-theme .el-button--warning.is-disabled:focus,.custom-theme .el-button--warning.is-disabled:hover{color:#fff;background-color:#ced284;border-color:#ced284}.custom-theme .el-button--warning.is-plain{color:#9da408;background:#f5f6e6;border-color:#d8db9c}.custom-theme .el-button--warning.is-plain:focus,.custom-theme .el-button--warning.is-plain:hover{background:#9da408;border-color:#9da408;color:#fff}.custom-theme .el-button--warning.is-plain:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-plain.is-disabled,.custom-theme .el-button--warning.is-plain.is-disabled:active,.custom-theme .el-button--warning.is-plain.is-disabled:focus,.custom-theme .el-button--warning.is-plain.is-disabled:hover{color:#c4c86b;background-color:#f5f6e6;border-color:#ebedce}.custom-theme .el-button--danger{color:#fff;background-color:#b3450e;border-color:#b3450e}.custom-theme .el-button--danger:focus,.custom-theme .el-button--danger:hover{background:#c26a3e;border-color:#c26a3e;color:#fff}.custom-theme .el-button--danger:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-active{background:#a13e0d;border-color:#a13e0d;color:#fff}.custom-theme .el-button--danger.is-disabled,.custom-theme .el-button--danger.is-disabled:active,.custom-theme .el-button--danger.is-disabled:focus,.custom-theme .el-button--danger.is-disabled:hover{color:#fff;background-color:#d9a287;border-color:#d9a287}.custom-theme .el-button--danger.is-plain{color:#b3450e;background:#f7ece7;border-color:#e1b59f}.custom-theme .el-button--danger.is-plain:focus,.custom-theme .el-button--danger.is-plain:hover{background:#b3450e;border-color:#b3450e;color:#fff}.custom-theme .el-button--danger.is-plain:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-plain.is-disabled,.custom-theme .el-button--danger.is-plain.is-disabled:active,.custom-theme .el-button--danger.is-plain.is-disabled:focus,.custom-theme .el-button--danger.is-plain.is-disabled:hover{color:#d18f6e;background-color:#f7ece7;border-color:#f0dacf}.custom-theme .el-button--info{color:#fff;background-color:#0a76a4;border-color:#0a76a4}.custom-theme .el-button--info:focus,.custom-theme .el-button--info:hover{background:#3b91b6;border-color:#3b91b6;color:#fff}.custom-theme .el-button--info:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-active{background:#096a94;border-color:#096a94;color:#fff}.custom-theme .el-button--info.is-disabled,.custom-theme .el-button--info.is-disabled:active,.custom-theme .el-button--info.is-disabled:focus,.custom-theme .el-button--info.is-disabled:hover{color:#fff;background-color:#85bbd2;border-color:#85bbd2}.custom-theme .el-button--info.is-plain{color:#0a76a4;background:#e7f1f6;border-color:#9dc8db}.custom-theme .el-button--info.is-plain:focus,.custom-theme .el-button--info.is-plain:hover{background:#0a76a4;border-color:#0a76a4;color:#fff}.custom-theme .el-button--info.is-plain:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-plain.is-disabled,.custom-theme .el-button--info.is-plain.is-disabled:active,.custom-theme .el-button--info.is-plain.is-disabled:focus,.custom-theme .el-button--info.is-plain.is-disabled:hover{color:#6cadc8;background-color:#e7f1f6;border-color:#cee4ed}.custom-theme .el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button--medium.is-round{padding:10px 20px}.custom-theme .el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--small.is-round{padding:9px 15px}.custom-theme .el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--mini.is-round{padding:7px 15px}.custom-theme .el-button--text{border:none;color:#262729;background:0 0;padding-left:0;padding-right:0}.custom-theme .el-button--text:focus,.custom-theme .el-button--text:hover{color:#515254;border-color:transparent;background-color:transparent}.custom-theme .el-button--text:active{color:#222325;border-color:transparent;background-color:transparent}.custom-theme .el-button-group{display:inline-block;vertical-align:middle}.custom-theme .el-button-group::after,.custom-theme .el-button-group::before{display:table;content:""}.custom-theme .el-button-group::after{clear:both}.custom-theme .el-button-group .el-button{float:left;position:relative}.custom-theme .el-button-group .el-button+.el-button{margin-left:0}.custom-theme .el-button-group .el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-button-group .el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child){border-radius:0}.custom-theme .el-button-group .el-button:not(:last-child){margin-right:-1px}.custom-theme .el-button-group .el-button:active,.custom-theme .el-button-group .el-button:focus,.custom-theme .el-button-group .el-button:hover{z-index:1}.custom-theme .el-button-group .el-button.is-active{z-index:1}.custom-theme .el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .el-dropdown{display:inline-block;position:relative;color:#5a5e66;font-size:14px}.custom-theme .el-dropdown .el-button-group{display:block}.custom-theme .el-dropdown .el-button-group .el-button{float:none}.custom-theme .el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.custom-theme .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)}.custom-theme .el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.custom-theme .el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.custom-theme .el-dropdown__icon{font-size:12px;margin:0 3px}.custom-theme .el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #e6ebf5;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)}.custom-theme .el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#5a5e66;cursor:pointer}.custom-theme .el-dropdown-menu__item:not(.is-disabled):hover{background-color:#e9e9ea;color:#515254}.custom-theme .el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #e6ebf5}.custom-theme .el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#fff}.custom-theme .el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.custom-theme .el-dropdown-menu--medium{padding:6px 0}.custom-theme .el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.custom-theme .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.custom-theme .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.custom-theme .el-dropdown-menu--small{padding:6px 0}.custom-theme .el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.custom-theme .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.custom-theme .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.custom-theme .el-dropdown-menu--mini{padding:3px 0}.custom-theme .el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.custom-theme .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.custom-theme .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.custom-theme .el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff}.custom-theme .el-menu::after,.custom-theme .el-menu::before{display:table;content:""}.custom-theme .el-menu::after{clear:both}.custom-theme .el-menu li{list-style:none}.custom-theme .el-menu--horizontal{border-right:none;border-bottom:solid 1px #e6e6e6}.custom-theme .el-menu--horizontal .el-menu-item{float:left;height:60px;line-height:60px;margin:0;cursor:pointer;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:2px solid transparent;color:#878d99}.custom-theme .el-menu--horizontal .el-menu-item a,.custom-theme .el-menu--horizontal .el-menu-item a:hover{color:inherit}.custom-theme .el-menu--horizontal .el-menu-item:focus,.custom-theme .el-menu--horizontal .el-menu-item:hover{background-color:#fff}.custom-theme .el-menu--horizontal .el-submenu{float:left;position:relative}.custom-theme .el-menu--horizontal .el-submenu:focus{outline:0}.custom-theme .el-menu--horizontal .el-submenu:focus>.el-submenu__title{color:#2d2f33}.custom-theme .el-menu--horizontal .el-submenu>.el-menu{position:absolute;top:65px;left:0;border:none;padding:5px 0;background-color:#fff;z-index:100;min-width:100%;-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:2px}.custom-theme .el-menu--horizontal .el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#878d99}.custom-theme .el-menu--horizontal .el-submenu .el-submenu__title:hover{background-color:#fff}.custom-theme .el-menu--horizontal .el-submenu .el-menu-item{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px}.custom-theme .el-menu--horizontal .el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.custom-theme .el-menu--horizontal .el-menu-item:focus,.custom-theme .el-menu--horizontal .el-menu-item:hover,.custom-theme .el-menu--horizontal .el-submenu__title:hover{outline:0;color:#2d2f33}.custom-theme .el-menu--horizontal>.el-menu-item.is-active,.custom-theme .el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #262729;color:#2d2f33}.custom-theme .el-menu--collapse{width:64px}.custom-theme .el-menu--collapse>.el-menu-item [class^=el-icon-],.custom-theme .el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.custom-theme .el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.custom-theme .el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.custom-theme .el-menu--collapse>.el-menu-item span,.custom-theme .el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.custom-theme .el-menu--collapse>.el-menu-item.is-active i{color:inherit}.custom-theme .el-menu--collapse .el-menu .el-submenu{min-width:200px}.custom-theme .el-menu--collapse .el-submenu{position:relative}.custom-theme .el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #dfe4ed;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)}.custom-theme .el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.custom-theme .el-menu-item{height:56px;line-height:56px;font-size:14px;color:#2d2f33;padding:0 20px;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}.custom-theme .el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px}.custom-theme .el-menu-item *{vertical-align:middle}.custom-theme .el-menu-item:first-child{margin-left:0}.custom-theme .el-menu-item:last-child{margin-right:0}.custom-theme .el-menu-item:focus,.custom-theme .el-menu-item:hover{outline:0;background-color:#e9e9ea}.custom-theme .el-menu-item i{color:#878d99}.custom-theme .el-menu-item.is-active{color:#262729}.custom-theme .el-menu-item.is-active i{color:inherit}.custom-theme .el-submenu__title{position:relative;height:56px;line-height:56px;font-size:14px;color:#2d2f33;padding:0 20px;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}.custom-theme .el-submenu__title *{vertical-align:middle}.custom-theme .el-submenu__title i{color:#878d99}.custom-theme .el-submenu__title:hover{background-color:#e9e9ea}.custom-theme .el-submenu .el-menu{border:none}.custom-theme .el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.custom-theme .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}.custom-theme .el-submenu.is-active .el-submenu__title{border-bottom-color:#262729}.custom-theme .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.custom-theme .el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.custom-theme .el-menu-item-group>ul{padding:0}.custom-theme .el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#878d99}.custom-theme .horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.custom-theme .el-input-number .el-input{display:block}.custom-theme .el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.custom-theme .el-input-number__decrease,.custom-theme .el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#5a5e66;cursor:pointer;font-size:13px}.custom-theme .el-input-number__decrease:hover,.custom-theme .el-input-number__increase:hover{color:#262729}.custom-theme .el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.custom-theme .el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#262729}.custom-theme .el-input-number__decrease.is-disabled,.custom-theme .el-input-number__increase.is-disabled{color:#b4bccc;cursor:not-allowed}.custom-theme .el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #d8dce5}.custom-theme .el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #d8dce5}.custom-theme .el-input-number.is-disabled .el-input-number__decrease,.custom-theme .el-input-number.is-disabled .el-input-number__increase{border-color:#dfe4ed;color:#dfe4ed}.custom-theme .el-input-number.is-disabled .el-input-number__decrease:hover,.custom-theme .el-input-number.is-disabled .el-input-number__increase:hover{color:#dfe4ed;cursor:not-allowed}.custom-theme .el-input-number--medium{width:200px;line-height:34px}.custom-theme .el-input-number--medium .el-input-number__decrease,.custom-theme .el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.custom-theme .el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.custom-theme .el-input-number--small{width:130px;line-height:30px}.custom-theme .el-input-number--small .el-input-number__decrease,.custom-theme .el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.custom-theme .el-input-number--small .el-input-number__decrease [class*=el-icon],.custom-theme .el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.custom-theme .el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.custom-theme .el-input-number--mini{width:130px;line-height:26px}.custom-theme .el-input-number--mini .el-input-number__decrease,.custom-theme .el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.custom-theme .el-input-number--mini .el-input-number__decrease [class*=el-icon],.custom-theme .el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.custom-theme .el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.custom-theme .el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.custom-theme .el-input-number.is-controls-right .el-input-number__decrease,.custom-theme .el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.custom-theme .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.custom-theme .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #d8dce5}.custom-theme .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 #d8dce5;border-radius:0 0 4px 0}.custom-theme .el-input-number.is-controls-right[class*=medium] [class*=decrease],.custom-theme .el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.custom-theme .el-input-number.is-controls-right[class*=small] [class*=decrease],.custom-theme .el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.custom-theme .el-input-number.is-controls-right[class*=mini] [class*=decrease],.custom-theme .el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.custom-theme .el-radio{color:#5a5e66;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:0;font-size:14px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.custom-theme .el-radio.is-bordered{padding:10px 20px 10px 10px;border-radius:4px;border:1px solid #d8dce5}.custom-theme .el-radio.is-bordered.is-checked{border-color:#262729}.custom-theme .el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#e6ebf5}.custom-theme .el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.custom-theme .el-radio--medium.is-bordered{padding:8px 20px 8px 10px;border-radius:4px}.custom-theme .el-radio--medium.is-bordered .el-radio__label{font-size:14px}.custom-theme .el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.custom-theme .el-radio--small.is-bordered{padding:6px 15px 6px 10px;border-radius:3px}.custom-theme .el-radio--small.is-bordered .el-radio__label{font-size:12px}.custom-theme .el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.custom-theme .el-radio--mini.is-bordered{padding:4px 15px 4px 10px;border-radius:3px}.custom-theme .el-radio--mini.is-bordered .el-radio__label{font-size:12px}.custom-theme .el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.custom-theme .el-radio+.el-radio{margin-left:30px}.custom-theme .el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.custom-theme .el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#dfe4ed;cursor:not-allowed}.custom-theme .el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.custom-theme .el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.custom-theme .el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#dfe4ed}.custom-theme .el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#b4bccc}.custom-theme .el-radio__input.is-disabled+span.el-radio__label{color:#b4bccc;cursor:not-allowed}.custom-theme .el-radio__input.is-checked .el-radio__inner{border-color:#262729;background:#262729}.custom-theme .el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.custom-theme .el-radio__input.is-checked+.el-radio__label{color:#262729}.custom-theme .el-radio__input.is-focus .el-radio__inner{border-color:#262729}.custom-theme .el-radio__inner{border:1px solid #d8dce5;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-radio__inner:hover{border-color:#262729}.custom-theme .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 cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.custom-theme .el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.custom-theme .el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #262729;box-shadow:0 0 2px 2px #262729}.custom-theme .el-radio__label{font-size:14px;padding-left:10px}.custom-theme .el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.custom-theme .el-radio-button{position:relative;display:inline-block;outline:0}.custom-theme .el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #d8dce5;font-weight:500;border-left:0;color:#5a5e66;-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}.custom-theme .el-radio-button__inner.is-round{padding:12px 20px}.custom-theme .el-radio-button__inner:hover{color:#262729}.custom-theme .el-radio-button__inner [class*=el-icon-]{line-height:.9}.custom-theme .el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1;left:-999px}.custom-theme .el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#262729;border-color:#262729;-webkit-box-shadow:-1px 0 0 0 #262729;box-shadow:-1px 0 0 0 #262729}.custom-theme .el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#edf2fc}.custom-theme .el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #d8dce5;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.custom-theme .el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.custom-theme .el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.custom-theme .el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.custom-theme .el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.custom-theme .el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.custom-theme .el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.custom-theme .el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.custom-theme .el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.custom-theme .el-radio-button:focus:not(.is-focus):not(:active){-webkit-box-shadow:0 0 2px 2px #262729;box-shadow:0 0 2px 2px #262729}.custom-theme .el-checkbox{color:#5a5e66;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}.custom-theme .el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #d8dce5}.custom-theme .el-checkbox.is-bordered.is-checked{border-color:#262729}.custom-theme .el-checkbox.is-bordered.is-disabled{border-color:#e6ebf5;cursor:not-allowed}.custom-theme .el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small{padding:3px 15px 7px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini{padding:1px 15px 5px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5;cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#b4bccc;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled+span.el-checkbox__label{color:#b4bccc;cursor:not-allowed}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.custom-theme .el-checkbox__input.is-checked+.el-checkbox__label{color:#262729}.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner{border-color:#262729}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .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}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.custom-theme .el-checkbox__inner{display:inline-block;position:relative;border:1px solid #d8dce5;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)}.custom-theme .el-checkbox__inner:hover{border-color:#262729}.custom-theme .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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-webkit-transform-origin:center;transform-origin:center}.custom-theme .el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;left:-999px}.custom-theme .el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.custom-theme .el-checkbox+.el-checkbox{margin-left:30px}.custom-theme .el-checkbox-button{position:relative;display:inline-block}.custom-theme .el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-left:0;color:#5a5e66;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button__inner.is-round{padding:12px 20px}.custom-theme .el-checkbox-button__inner:hover{color:#262729}.custom-theme .el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.custom-theme .el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#262729;border-color:#262729;-webkit-box-shadow:-1px 0 0 0 #7d7d7f;box-shadow:-1px 0 0 0 #7d7d7f}.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #d8dce5;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#262729}.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.custom-theme .el-checkbox-group{font-size:0}.custom-theme .el-switch{display:inline-block;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.custom-theme .el-switch.is-disabled .el-switch__core,.custom-theme .el-switch.is-disabled .el-switch__label{cursor:not-allowed}.custom-theme .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:#2d2f33}.custom-theme .el-switch__label.is-active{color:#262729}.custom-theme .el-switch__label--left{margin-right:10px}.custom-theme .el-switch__label--right{margin-left:10px}.custom-theme .el-switch__label *{line-height:1;font-size:14px;display:inline-block}.custom-theme .el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.custom-theme .el-switch__input:focus~.el-switch__core{outline:1px solid #262729}.custom-theme .el-switch__core{margin:0;display:inline-block;position:relative;width:40px;height:20px;border:1px solid #d8dce5;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#d8dce5;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.custom-theme .el-switch__core .el-switch__button{position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;width:16px;height:16px;background-color:#fff}.custom-theme .el-switch.is-checked .el-switch__core{border-color:#262729;background-color:#262729}.custom-theme .el-switch.is-disabled{opacity:.6}.custom-theme .el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.custom-theme .el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.custom-theme .el-switch .label-fade-enter,.custom-theme .el-switch .label-fade-leave-active{opacity:0}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .el-select-dropdown{position:absolute;z-index:1001;border:solid 1px #dfe4ed;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}.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#262729;background-color:#fff}.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.custom-theme .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\E611";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.custom-theme .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.custom-theme .el-select-dropdown .popper__arrow{-webkit-transform:translateX(-400%);transform:translateX(-400%)}.custom-theme .el-select-dropdown.is-arrow-fixed .popper__arrow{-webkit-transform:translateX(-200%);transform:translateX(-200%)}.custom-theme .el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.custom-theme .el-select-dropdown__wrap{max-height:274px}.custom-theme .el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-tag{background-color:rgba(38,39,41,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#262729;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(38,39,41,.2);white-space:nowrap}.custom-theme .el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-5px;color:#262729}.custom-theme .el-tag .el-icon-close::before{display:block}.custom-theme .el-tag .el-icon-close:hover{background-color:#262729;color:#fff}.custom-theme .el-tag--info{background-color:rgba(10,118,164,.1);border-color:rgba(10,118,164,.2);color:#0a76a4}.custom-theme .el-tag--info.is-hit{border-color:#0a76a4}.custom-theme .el-tag--info .el-tag__close{color:#0a76a4}.custom-theme .el-tag--info .el-tag__close:hover{background-color:#0a76a4;color:#fff}.custom-theme .el-tag--success{background-color:rgba(64,145,103,.1);border-color:rgba(64,145,103,.2);color:#409167}.custom-theme .el-tag--success.is-hit{border-color:#409167}.custom-theme .el-tag--success .el-tag__close{color:#409167}.custom-theme .el-tag--success .el-tag__close:hover{background-color:#409167;color:#fff}.custom-theme .el-tag--warning{background-color:rgba(157,164,8,.1);border-color:rgba(157,164,8,.2);color:#9da408}.custom-theme .el-tag--warning.is-hit{border-color:#9da408}.custom-theme .el-tag--warning .el-tag__close{color:#9da408}.custom-theme .el-tag--warning .el-tag__close:hover{background-color:#9da408;color:#fff}.custom-theme .el-tag--danger{background-color:rgba(179,69,14,.1);border-color:rgba(179,69,14,.2);color:#b3450e}.custom-theme .el-tag--danger.is-hit{border-color:#b3450e}.custom-theme .el-tag--danger .el-tag__close{color:#b3450e}.custom-theme .el-tag--danger .el-tag__close:hover{background-color:#b3450e;color:#fff}.custom-theme .el-tag--medium{height:28px;line-height:26px}.custom-theme .el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--small{height:24px;padding:0 8px;line-height:22px}.custom-theme .el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--mini{height:20px;padding:0 5px;line-height:19px}.custom-theme .el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.custom-theme .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#5a5e66;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.custom-theme .el-select-dropdown__item.is-disabled{color:#b4bccc;cursor:not-allowed}.custom-theme .el-select-dropdown__item.is-disabled:hover{background-color:#fff}.custom-theme .el-select-dropdown__item.hover,.custom-theme .el-select-dropdown__item:hover{background-color:#f5f7fa}.custom-theme .el-select-dropdown__item.selected{color:#262729;font-weight:700}.custom-theme .el-select-dropdown__item span{line-height:34px!important}.custom-theme .el-select-group{margin:0;padding:0}.custom-theme .el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.custom-theme .el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.custom-theme .el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#dfe4ed}.custom-theme .el-select-group__title{padding-left:20px;font-size:12px;color:#0a76a4;line-height:30px}.custom-theme .el-select-group .el-select-dropdown__item{padding-left:20px}.custom-theme .el-scrollbar{overflow:hidden;position:relative}.custom-theme .el-scrollbar:active>.el-scrollbar__bar,.custom-theme .el-scrollbar:focus>.el-scrollbar__bar,.custom-theme .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.custom-theme .el-scrollbar__wrap{overflow:scroll;height:100%}.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.custom-theme .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(135,141,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.custom-theme .el-scrollbar__thumb:hover{background-color:rgba(135,141,153,.5)}.custom-theme .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}.custom-theme .el-scrollbar__bar.is-vertical{width:6px;top:2px}.custom-theme .el-scrollbar__bar.is-vertical>div{width:100%}.custom-theme .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.custom-theme .el-scrollbar__bar.is-horizontal>div{height:100%}.custom-theme .el-select{display:inline-block;position:relative}.custom-theme .el-select:hover .el-input__inner{border-color:#b4bccc}.custom-theme .el-select .el-input__inner{cursor:pointer;padding-right:35px}.custom-theme .el-select .el-input__inner:focus{border-color:#262729}.custom-theme .el-select .el-input .el-select__caret{color:#b4bccc;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);line-height:16px;cursor:pointer}.custom-theme .el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.custom-theme .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:#b4bccc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-select .el-input .el-select__caret.is-show-close:hover{color:#878d99}.custom-theme .el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.custom-theme .el-select .el-input.is-disabled .el-input__inner:hover{border-color:#dfe4ed}.custom-theme .el-select>.el-input{display:block}.custom-theme .el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.custom-theme .el-select__input.is-mini{height:14px}.custom-theme .el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#b4bccc;line-height:18px;font-size:14px}.custom-theme .el-select__close:hover{color:#878d99}.custom-theme .el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.custom-theme .el-select .el-tag__close{margin-top:-2px}.custom-theme .el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:3px 0 3px 6px;background-color:#f0f2f5}.custom-theme .el-select .el-tag__close.el-icon-close{background-color:#b4bccc;right:-7px;color:#fff}.custom-theme .el-select .el-tag__close.el-icon-close:hover{background-color:#878d99}.custom-theme .el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.custom-theme .el-select__tag{display:inline-block;height:24px;line-height:24px;font-size:14px;border-radius:4px;color:#fff;background-color:#262729}.custom-theme .el-select__tag .el-icon-close{font-size:14px}.custom-theme .el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-color:#d8dce5;color:#5a5e66;-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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button+.el-button{margin-left:10px}.custom-theme .el-button.is-round{padding:12px 20px}.custom-theme .el-button:focus,.custom-theme .el-button:hover{color:#262729;border-color:#bebebf;background-color:#e9e9ea}.custom-theme .el-button:active{color:#222325;border-color:#222325;outline:0}.custom-theme .el-button::-moz-focus-inner{border:0}.custom-theme .el-button [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-button.is-plain:focus,.custom-theme .el-button.is-plain:hover{background:#fff;border-color:#262729;color:#262729}.custom-theme .el-button.is-plain:active{background:#fff;border-color:#222325;color:#222325;outline:0}.custom-theme .el-button.is-active{color:#222325;border-color:#222325}.custom-theme .el-button.is-disabled,.custom-theme .el-button.is-disabled:focus,.custom-theme .el-button.is-disabled:hover{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5}.custom-theme .el-button.is-disabled.el-button--text{background-color:transparent}.custom-theme .el-button.is-disabled.is-plain,.custom-theme .el-button.is-disabled.is-plain:focus,.custom-theme .el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#e6ebf5;color:#b4bccc}.custom-theme .el-button.is-loading{position:relative;pointer-events:none}.custom-theme .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)}.custom-theme .el-button.is-round{border-radius:20px;padding:12px 23px}.custom-theme .el-button--primary{color:#fff;background-color:#262729;border-color:#262729}.custom-theme .el-button--primary:focus,.custom-theme .el-button--primary:hover{background:#515254;border-color:#515254;color:#fff}.custom-theme .el-button--primary:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-active{background:#222325;border-color:#222325;color:#fff}.custom-theme .el-button--primary.is-disabled,.custom-theme .el-button--primary.is-disabled:active,.custom-theme .el-button--primary.is-disabled:focus,.custom-theme .el-button--primary.is-disabled:hover{color:#fff;background-color:#939394;border-color:#939394}.custom-theme .el-button--primary.is-plain{color:#262729;background:#e9e9ea;border-color:#a8a9a9}.custom-theme .el-button--primary.is-plain:focus,.custom-theme .el-button--primary.is-plain:hover{background:#262729;border-color:#262729;color:#fff}.custom-theme .el-button--primary.is-plain:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-plain.is-disabled,.custom-theme .el-button--primary.is-plain.is-disabled:active,.custom-theme .el-button--primary.is-plain.is-disabled:focus,.custom-theme .el-button--primary.is-plain.is-disabled:hover{color:#7d7d7f;background-color:#e9e9ea;border-color:#d4d4d4}.custom-theme .el-button--success{color:#fff;background-color:#409167;border-color:#409167}.custom-theme .el-button--success:focus,.custom-theme .el-button--success:hover{background:#66a785;border-color:#66a785;color:#fff}.custom-theme .el-button--success:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-active{background:#3a835d;border-color:#3a835d;color:#fff}.custom-theme .el-button--success.is-disabled,.custom-theme .el-button--success.is-disabled:active,.custom-theme .el-button--success.is-disabled:focus,.custom-theme .el-button--success.is-disabled:hover{color:#fff;background-color:#a0c8b3;border-color:#a0c8b3}.custom-theme .el-button--success.is-plain{color:#409167;background:#ecf4f0;border-color:#b3d3c2}.custom-theme .el-button--success.is-plain:focus,.custom-theme .el-button--success.is-plain:hover{background:#409167;border-color:#409167;color:#fff}.custom-theme .el-button--success.is-plain:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-plain.is-disabled,.custom-theme .el-button--success.is-plain.is-disabled:active,.custom-theme .el-button--success.is-plain.is-disabled:focus,.custom-theme .el-button--success.is-plain.is-disabled:hover{color:#8cbda4;background-color:#ecf4f0;border-color:#d9e9e1}.custom-theme .el-button--warning{color:#fff;background-color:#9da408;border-color:#9da408}.custom-theme .el-button--warning:focus,.custom-theme .el-button--warning:hover{background:#b1b639;border-color:#b1b639;color:#fff}.custom-theme .el-button--warning:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-active{background:#8d9407;border-color:#8d9407;color:#fff}.custom-theme .el-button--warning.is-disabled,.custom-theme .el-button--warning.is-disabled:active,.custom-theme .el-button--warning.is-disabled:focus,.custom-theme .el-button--warning.is-disabled:hover{color:#fff;background-color:#ced284;border-color:#ced284}.custom-theme .el-button--warning.is-plain{color:#9da408;background:#f5f6e6;border-color:#d8db9c}.custom-theme .el-button--warning.is-plain:focus,.custom-theme .el-button--warning.is-plain:hover{background:#9da408;border-color:#9da408;color:#fff}.custom-theme .el-button--warning.is-plain:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-plain.is-disabled,.custom-theme .el-button--warning.is-plain.is-disabled:active,.custom-theme .el-button--warning.is-plain.is-disabled:focus,.custom-theme .el-button--warning.is-plain.is-disabled:hover{color:#c4c86b;background-color:#f5f6e6;border-color:#ebedce}.custom-theme .el-button--danger{color:#fff;background-color:#b3450e;border-color:#b3450e}.custom-theme .el-button--danger:focus,.custom-theme .el-button--danger:hover{background:#c26a3e;border-color:#c26a3e;color:#fff}.custom-theme .el-button--danger:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-active{background:#a13e0d;border-color:#a13e0d;color:#fff}.custom-theme .el-button--danger.is-disabled,.custom-theme .el-button--danger.is-disabled:active,.custom-theme .el-button--danger.is-disabled:focus,.custom-theme .el-button--danger.is-disabled:hover{color:#fff;background-color:#d9a287;border-color:#d9a287}.custom-theme .el-button--danger.is-plain{color:#b3450e;background:#f7ece7;border-color:#e1b59f}.custom-theme .el-button--danger.is-plain:focus,.custom-theme .el-button--danger.is-plain:hover{background:#b3450e;border-color:#b3450e;color:#fff}.custom-theme .el-button--danger.is-plain:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-plain.is-disabled,.custom-theme .el-button--danger.is-plain.is-disabled:active,.custom-theme .el-button--danger.is-plain.is-disabled:focus,.custom-theme .el-button--danger.is-plain.is-disabled:hover{color:#d18f6e;background-color:#f7ece7;border-color:#f0dacf}.custom-theme .el-button--info{color:#fff;background-color:#0a76a4;border-color:#0a76a4}.custom-theme .el-button--info:focus,.custom-theme .el-button--info:hover{background:#3b91b6;border-color:#3b91b6;color:#fff}.custom-theme .el-button--info:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-active{background:#096a94;border-color:#096a94;color:#fff}.custom-theme .el-button--info.is-disabled,.custom-theme .el-button--info.is-disabled:active,.custom-theme .el-button--info.is-disabled:focus,.custom-theme .el-button--info.is-disabled:hover{color:#fff;background-color:#85bbd2;border-color:#85bbd2}.custom-theme .el-button--info.is-plain{color:#0a76a4;background:#e7f1f6;border-color:#9dc8db}.custom-theme .el-button--info.is-plain:focus,.custom-theme .el-button--info.is-plain:hover{background:#0a76a4;border-color:#0a76a4;color:#fff}.custom-theme .el-button--info.is-plain:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-plain.is-disabled,.custom-theme .el-button--info.is-plain.is-disabled:active,.custom-theme .el-button--info.is-plain.is-disabled:focus,.custom-theme .el-button--info.is-plain.is-disabled:hover{color:#6cadc8;background-color:#e7f1f6;border-color:#cee4ed}.custom-theme .el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button--medium.is-round{padding:10px 20px}.custom-theme .el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--small.is-round{padding:9px 15px}.custom-theme .el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--mini.is-round{padding:7px 15px}.custom-theme .el-button--text{border:none;color:#262729;background:0 0;padding-left:0;padding-right:0}.custom-theme .el-button--text:focus,.custom-theme .el-button--text:hover{color:#515254;border-color:transparent;background-color:transparent}.custom-theme .el-button--text:active{color:#222325;border-color:transparent;background-color:transparent}.custom-theme .el-button-group{display:inline-block;vertical-align:middle}.custom-theme .el-button-group::after,.custom-theme .el-button-group::before{display:table;content:""}.custom-theme .el-button-group::after{clear:both}.custom-theme .el-button-group .el-button{float:left;position:relative}.custom-theme .el-button-group .el-button+.el-button{margin-left:0}.custom-theme .el-button-group .el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-button-group .el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child){border-radius:0}.custom-theme .el-button-group .el-button:not(:last-child){margin-right:-1px}.custom-theme .el-button-group .el-button:active,.custom-theme .el-button-group .el-button:focus,.custom-theme .el-button-group .el-button:hover{z-index:1}.custom-theme .el-button-group .el-button.is-active{z-index:1}.custom-theme .el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-checkbox{color:#5a5e66;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}.custom-theme .el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #d8dce5}.custom-theme .el-checkbox.is-bordered.is-checked{border-color:#262729}.custom-theme .el-checkbox.is-bordered.is-disabled{border-color:#e6ebf5;cursor:not-allowed}.custom-theme .el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small{padding:3px 15px 7px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini{padding:1px 15px 5px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5;cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#b4bccc;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled+span.el-checkbox__label{color:#b4bccc;cursor:not-allowed}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.custom-theme .el-checkbox__input.is-checked+.el-checkbox__label{color:#262729}.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner{border-color:#262729}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .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}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.custom-theme .el-checkbox__inner{display:inline-block;position:relative;border:1px solid #d8dce5;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)}.custom-theme .el-checkbox__inner:hover{border-color:#262729}.custom-theme .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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-webkit-transform-origin:center;transform-origin:center}.custom-theme .el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;left:-999px}.custom-theme .el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.custom-theme .el-checkbox+.el-checkbox{margin-left:30px}.custom-theme .el-checkbox-button{position:relative;display:inline-block}.custom-theme .el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-left:0;color:#5a5e66;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button__inner.is-round{padding:12px 20px}.custom-theme .el-checkbox-button__inner:hover{color:#262729}.custom-theme .el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.custom-theme .el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#262729;border-color:#262729;-webkit-box-shadow:-1px 0 0 0 #7d7d7f;box-shadow:-1px 0 0 0 #7d7d7f}.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #d8dce5;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#262729}.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.custom-theme .el-checkbox-group{font-size:0}.custom-theme .el-tag{background-color:rgba(38,39,41,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#262729;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(38,39,41,.2);white-space:nowrap}.custom-theme .el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-5px;color:#262729}.custom-theme .el-tag .el-icon-close::before{display:block}.custom-theme .el-tag .el-icon-close:hover{background-color:#262729;color:#fff}.custom-theme .el-tag--info{background-color:rgba(10,118,164,.1);border-color:rgba(10,118,164,.2);color:#0a76a4}.custom-theme .el-tag--info.is-hit{border-color:#0a76a4}.custom-theme .el-tag--info .el-tag__close{color:#0a76a4}.custom-theme .el-tag--info .el-tag__close:hover{background-color:#0a76a4;color:#fff}.custom-theme .el-tag--success{background-color:rgba(64,145,103,.1);border-color:rgba(64,145,103,.2);color:#409167}.custom-theme .el-tag--success.is-hit{border-color:#409167}.custom-theme .el-tag--success .el-tag__close{color:#409167}.custom-theme .el-tag--success .el-tag__close:hover{background-color:#409167;color:#fff}.custom-theme .el-tag--warning{background-color:rgba(157,164,8,.1);border-color:rgba(157,164,8,.2);color:#9da408}.custom-theme .el-tag--warning.is-hit{border-color:#9da408}.custom-theme .el-tag--warning .el-tag__close{color:#9da408}.custom-theme .el-tag--warning .el-tag__close:hover{background-color:#9da408;color:#fff}.custom-theme .el-tag--danger{background-color:rgba(179,69,14,.1);border-color:rgba(179,69,14,.2);color:#b3450e}.custom-theme .el-tag--danger.is-hit{border-color:#b3450e}.custom-theme .el-tag--danger .el-tag__close{color:#b3450e}.custom-theme .el-tag--danger .el-tag__close:hover{background-color:#b3450e;color:#fff}.custom-theme .el-tag--medium{height:28px;line-height:26px}.custom-theme .el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--small{height:24px;padding:0 8px;line-height:22px}.custom-theme .el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--mini{height:20px;padding:0 5px;line-height:19px}.custom-theme .el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.custom-theme .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:#fff;font-size:14px;color:#5a5e66}.custom-theme .el-table__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.custom-theme .el-table__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:color(#262729 s(16%) l(44%))}.custom-theme .el-table__expand-column .cell{padding:0;text-align:center}.custom-theme .el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-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}.custom-theme .el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.custom-theme .el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.custom-theme .el-table__expanded-cell{background-color:#fff}.custom-theme .el-table__expanded-cell[class*=cell]{padding:20px 50px}.custom-theme .el-table__expanded-cell:hover{background-color:#f5f7fa!important}.custom-theme .el-table--fit{border-right:0;border-bottom:0}.custom-theme .el-table--fit td.gutter,.custom-theme .el-table--fit th.gutter{border-right-width:1px}.custom-theme .el-table thead{color:#878d99;font-weight:500}.custom-theme .el-table thead.is-group th{background:#f5f7fa}.custom-theme .el-table td,.custom-theme .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}.custom-theme .el-table td.is-center,.custom-theme .el-table th.is-center{text-align:center}.custom-theme .el-table td.is-left,.custom-theme .el-table th.is-left{text-align:left}.custom-theme .el-table td.is-right,.custom-theme .el-table th.is-right{text-align:right}.custom-theme .el-table td.gutter,.custom-theme .el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.custom-theme .el-table td.is-hidden>*,.custom-theme .el-table th.is-hidden>*{visibility:hidden}.custom-theme .el-table--medium td,.custom-theme .el-table--medium th{padding:10px 0}.custom-theme .el-table--small{font-size:12px}.custom-theme .el-table--small td,.custom-theme .el-table--small th{padding:8px 0}.custom-theme .el-table--mini{font-size:12px}.custom-theme .el-table--mini td,.custom-theme .el-table--mini th{padding:6px 0}.custom-theme .el-table tr{background-color:#fff}.custom-theme .el-table tr input[type=checkbox]{margin:0}.custom-theme .el-table td,.custom-theme .el-table th.is-leaf{border-bottom:1px solid #e6ebf5}.custom-theme .el-table th.is-sortable{cursor:pointer}.custom-theme .el-table th{white-space:nowrap;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:left}.custom-theme .el-table th div{display:inline-block;padding-left:10px;padding-right:10px;line-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.custom-theme .el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;display:inline-block;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-table th>.cell.highlight{color:#262729}.custom-theme .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}.custom-theme .el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-table td.gutter{width:0}.custom-theme .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}.custom-theme .el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.custom-theme .el-table td:first-child .cell,.custom-theme .el-table th:first-child .cell{padding-left:0}.custom-theme .el-table--border,.custom-theme .el-table--group{border:1px solid #e6ebf5}.custom-theme .el-table--border::after,.custom-theme .el-table--group::after,.custom-theme .el-table::before{content:'';position:absolute;background-color:#e6ebf5;z-index:1}.custom-theme .el-table--border::after,.custom-theme .el-table--group::after{top:0;right:0;width:1px;height:100%}.custom-theme .el-table::before{left:0;bottom:0;width:100%;height:1px}.custom-theme .el-table--border{border-right:none;border-bottom:none}.custom-theme .el-table--border td,.custom-theme .el-table--border th{border-right:1px solid #e6ebf5}.custom-theme .el-table--border td:first-child .cell,.custom-theme .el-table--border th:first-child .cell{padding-left:10px}.custom-theme .el-table--border .has-gutter td:nth-last-of-type(2),.custom-theme .el-table--border .has-gutter th:nth-last-of-type(2){border-right:none}.custom-theme .el-table--border th.gutter:last-of-type{border-bottom:1px solid #e6ebf5;border-bottom-width:1px}.custom-theme .el-table--border th{border-bottom:1px solid #e6ebf5}.custom-theme .el-table--hidden{visibility:hidden}.custom-theme .el-table__fixed,.custom-theme .el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.custom-theme .el-table__fixed-right::before,.custom-theme .el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#e6ebf5;z-index:4}.custom-theme .el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff;border-bottom:1px solid #e6ebf5}.custom-theme .el-table__fixed-right{top:0;left:auto;right:0}.custom-theme .el-table__fixed-right .el-table__fixed-body-wrapper,.custom-theme .el-table__fixed-right .el-table__fixed-footer-wrapper,.custom-theme .el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.custom-theme .el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.custom-theme .el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.custom-theme .el-table__fixed-footer-wrapper tbody td{border-top:1px solid #e6ebf5;background-color:#f5f7fa;color:#5a5e66}.custom-theme .el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.custom-theme .el-table__body-wrapper,.custom-theme .el-table__footer-wrapper,.custom-theme .el-table__header-wrapper{width:100%}.custom-theme .el-table__footer-wrapper{margin-top:-1px}.custom-theme .el-table__footer-wrapper td{border-top:1px solid #e6ebf5}.custom-theme .el-table__body,.custom-theme .el-table__footer,.custom-theme .el-table__header{table-layout:fixed}.custom-theme .el-table__footer-wrapper,.custom-theme .el-table__header-wrapper{overflow:hidden}.custom-theme .el-table__footer-wrapper tbody td,.custom-theme .el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#5a5e66}.custom-theme .el-table__body-wrapper{overflow:auto;position:relative}.custom-theme .el-table__body-wrapper.is-scroll-none~.el-table__fixed,.custom-theme .el-table__body-wrapper.is-scroll-none~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-table__body-wrapper.is-scroll-left~.el-table__fixed{-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-table__body-wrapper.is-scroll-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-table__body-wrapper .el-table--border.is-scroll-right~.el-table__fixed-right{border-left:1px solid #e6ebf5}.custom-theme .el-table__body-wrapper .el-table--border.is-scroll-left~.el-table__fixed{border-right:1px solid #e6ebf5}.custom-theme .el-table .caret-wrapper{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:13px;width:24px;cursor:pointer;overflow:initial}.custom-theme .el-table .sort-caret{color:#0a76a4;width:14px;overflow:hidden;font-size:13px}.custom-theme .el-table .ascending .sort-caret.ascending{color:#262729}.custom-theme .el-table .descending .sort-caret.descending{color:#262729}.custom-theme .el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.custom-theme .el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.custom-theme .el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#e9e9ea}.custom-theme .el-table__body tr.hover-row.current-row>td,.custom-theme .el-table__body tr.hover-row.el-table__row--striped.current-row>td,.custom-theme .el-table__body tr.hover-row.el-table__row--striped>td,.custom-theme .el-table__body tr.hover-row>td{background-color:#e9e9ea}.custom-theme .el-table__body tr.current-row>td{background-color:#e9e9ea}.custom-theme .el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #e6ebf5;z-index:10}.custom-theme .el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.custom-theme .el-table__column-filter-trigger i{color:#0a76a4;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.custom-theme .el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.custom-theme .el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.custom-theme .el-table--fluid-height .el-table__fixed,.custom-theme .el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.custom-theme .el-checkbox{color:#5a5e66;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}.custom-theme .el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #d8dce5}.custom-theme .el-checkbox.is-bordered.is-checked{border-color:#262729}.custom-theme .el-checkbox.is-bordered.is-disabled{border-color:#e6ebf5;cursor:not-allowed}.custom-theme .el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small{padding:3px 15px 7px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini{padding:1px 15px 5px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5;cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#b4bccc;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled+span.el-checkbox__label{color:#b4bccc;cursor:not-allowed}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.custom-theme .el-checkbox__input.is-checked+.el-checkbox__label{color:#262729}.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner{border-color:#262729}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .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}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.custom-theme .el-checkbox__inner{display:inline-block;position:relative;border:1px solid #d8dce5;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)}.custom-theme .el-checkbox__inner:hover{border-color:#262729}.custom-theme .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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-webkit-transform-origin:center;transform-origin:center}.custom-theme .el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;left:-999px}.custom-theme .el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.custom-theme .el-checkbox+.el-checkbox{margin-left:30px}.custom-theme .el-checkbox-button{position:relative;display:inline-block}.custom-theme .el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-left:0;color:#5a5e66;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button__inner.is-round{padding:12px 20px}.custom-theme .el-checkbox-button__inner:hover{color:#262729}.custom-theme .el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.custom-theme .el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#262729;border-color:#262729;-webkit-box-shadow:-1px 0 0 0 #7d7d7f;box-shadow:-1px 0 0 0 #7d7d7f}.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #d8dce5;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#262729}.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.custom-theme .el-checkbox-group{font-size:0}.custom-theme .el-tag{background-color:rgba(38,39,41,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#262729;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(38,39,41,.2);white-space:nowrap}.custom-theme .el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-5px;color:#262729}.custom-theme .el-tag .el-icon-close::before{display:block}.custom-theme .el-tag .el-icon-close:hover{background-color:#262729;color:#fff}.custom-theme .el-tag--info{background-color:rgba(10,118,164,.1);border-color:rgba(10,118,164,.2);color:#0a76a4}.custom-theme .el-tag--info.is-hit{border-color:#0a76a4}.custom-theme .el-tag--info .el-tag__close{color:#0a76a4}.custom-theme .el-tag--info .el-tag__close:hover{background-color:#0a76a4;color:#fff}.custom-theme .el-tag--success{background-color:rgba(64,145,103,.1);border-color:rgba(64,145,103,.2);color:#409167}.custom-theme .el-tag--success.is-hit{border-color:#409167}.custom-theme .el-tag--success .el-tag__close{color:#409167}.custom-theme .el-tag--success .el-tag__close:hover{background-color:#409167;color:#fff}.custom-theme .el-tag--warning{background-color:rgba(157,164,8,.1);border-color:rgba(157,164,8,.2);color:#9da408}.custom-theme .el-tag--warning.is-hit{border-color:#9da408}.custom-theme .el-tag--warning .el-tag__close{color:#9da408}.custom-theme .el-tag--warning .el-tag__close:hover{background-color:#9da408;color:#fff}.custom-theme .el-tag--danger{background-color:rgba(179,69,14,.1);border-color:rgba(179,69,14,.2);color:#b3450e}.custom-theme .el-tag--danger.is-hit{border-color:#b3450e}.custom-theme .el-tag--danger .el-tag__close{color:#b3450e}.custom-theme .el-tag--danger .el-tag__close:hover{background-color:#b3450e;color:#fff}.custom-theme .el-tag--medium{height:28px;line-height:26px}.custom-theme .el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--small{height:24px;padding:0 8px;line-height:22px}.custom-theme .el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--mini{height:20px;padding:0 5px;line-height:19px}.custom-theme .el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.custom-theme .el-table-column--selection .cell{padding-left:14px;padding-right:14px}.custom-theme .el-table-filter{border:solid 1px #e6ebf5;border-radius:2px;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:2px 0}.custom-theme .el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.custom-theme .el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.custom-theme .el-table-filter__list-item:hover{background-color:#e9e9ea;color:#515254}.custom-theme .el-table-filter__list-item.is-active{background-color:#262729;color:#fff}.custom-theme .el-table-filter__content{min-width:100px}.custom-theme .el-table-filter__bottom{border-top:1px solid #e6ebf5;padding:8px}.custom-theme .el-table-filter__bottom button{background:0 0;border:none;color:#5a5e66;cursor:pointer;font-size:13px;padding:0 3px}.custom-theme .el-table-filter__bottom button:hover{color:#262729}.custom-theme .el-table-filter__bottom button:focus{outline:0}.custom-theme .el-table-filter__bottom button.is-disabled{color:#b4bccc;cursor:not-allowed}.custom-theme .el-table-filter__checkbox-group{padding:10px}.custom-theme .el-table-filter__checkbox-group label.el-checkbox{display:block;margin-bottom:8px;margin-left:5px}.custom-theme .el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.custom-theme .el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.custom-theme .el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#edf2fc}.custom-theme .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#5a5e66}.custom-theme .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}.custom-theme .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}.custom-theme .el-date-table.is-week-mode .el-date-table__row.current div{background-color:#edf2fc}.custom-theme .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}.custom-theme .el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .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%}.custom-theme .el-date-table td.next-month,.custom-theme .el-date-table td.prev-month{color:#b4bccc}.custom-theme .el-date-table td.today{position:relative}.custom-theme .el-date-table td.today span{color:#262729}.custom-theme .el-date-table td.today.end-date span,.custom-theme .el-date-table td.today.start-date span{color:#fff}.custom-theme .el-date-table td.available:hover{color:#262729}.custom-theme .el-date-table td.in-range div{background-color:#edf2fc}.custom-theme .el-date-table td.in-range div:hover{background-color:#edf2fc}.custom-theme .el-date-table td.current:not(.disabled) span{color:#fff;background-color:#262729}.custom-theme .el-date-table td.end-date div,.custom-theme .el-date-table td.start-date div{color:#fff}.custom-theme .el-date-table td.end-date span,.custom-theme .el-date-table td.start-date span{background-color:#262729}.custom-theme .el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.custom-theme .el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.custom-theme .el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#b4bccc}.custom-theme .el-date-table td.week{font-size:80%;color:#5a5e66}.custom-theme .el-date-table th{padding:5px;color:#5a5e66;font-weight:400;border-bottom:solid 1px #e6ebf5}.custom-theme .el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.custom-theme .el-month-table td{text-align:center;padding:20px 3px;cursor:pointer}.custom-theme .el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#b4bccc}.custom-theme .el-month-table td.disabled .cell:hover{color:#b4bccc}.custom-theme .el-month-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#5a5e66;margin:0 auto}.custom-theme .el-month-table td .cell:hover{color:#262729}.custom-theme .el-month-table td.current:not(.disabled) .cell{color:#262729}.custom-theme .el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.custom-theme .el-year-table .el-icon{color:#2d2f33}.custom-theme .el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.custom-theme .el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#b4bccc}.custom-theme .el-year-table td.disabled .cell:hover{color:#b4bccc}.custom-theme .el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#5a5e66;margin:0 auto}.custom-theme .el-year-table td .cell:hover{color:#262729}.custom-theme .el-year-table td.current:not(.disabled) .cell{color:#262729}.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper:nth-child(2){margin-left:1%}.custom-theme .el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.custom-theme .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.custom-theme .el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.custom-theme .el-time-spinner__arrow{font-size:12px;color:#878d99;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.custom-theme .el-time-spinner__arrow:hover{color:#262729}.custom-theme .el-time-spinner__arrow.el-icon-arrow-up{top:10px}.custom-theme .el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.custom-theme .el-time-spinner__input.el-input{width:70%}.custom-theme .el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.custom-theme .el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.custom-theme .el-time-spinner__list::after,.custom-theme .el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.custom-theme .el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#5a5e66}.custom-theme .el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.custom-theme .el-time-spinner__item.active:not(.disabled){color:#2d2f33;font-weight:700}.custom-theme .el-time-spinner__item.disabled{color:#b4bccc;cursor:not-allowed}.custom-theme .fade-in-linear-enter-active,.custom-theme .fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .fade-in-linear-enter,.custom-theme .fade-in-linear-leave,.custom-theme .fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-linear-enter-active,.custom-theme .el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .el-fade-in-linear-enter,.custom-theme .el-fade-in-linear-leave,.custom-theme .el-fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-enter-active,.custom-theme .el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.custom-theme .el-fade-in-enter,.custom-theme .el-fade-in-leave-active{opacity:0}.custom-theme .el-zoom-in-center-enter-active,.custom-theme .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)}.custom-theme .el-zoom-in-center-enter,.custom-theme .el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.custom-theme .el-zoom-in-top-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center top;transform-origin:center top}.custom-theme .el-zoom-in-top-enter,.custom-theme .el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-bottom-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center bottom;transform-origin:center bottom}.custom-theme .el-zoom-in-bottom-enter,.custom-theme .el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-left-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:top left;transform-origin:top left}.custom-theme .el-zoom-in-left-enter,.custom-theme .el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.custom-theme .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}.custom-theme .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}.custom-theme .el-list-enter-active,.custom-theme .el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.custom-theme .el-list-enter,.custom-theme .el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.custom-theme .el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.custom-theme .el-date-editor{position:relative;display:inline-block;text-align:left}.custom-theme .el-date-editor.el-input,.custom-theme .el-date-editor.el-input__inner{width:220px}.custom-theme .el-date-editor--daterange.el-input,.custom-theme .el-date-editor--daterange.el-input__inner,.custom-theme .el-date-editor--timerange.el-input,.custom-theme .el-date-editor--timerange.el-input__inner{width:350px}.custom-theme .el-date-editor--datetimerange.el-input,.custom-theme .el-date-editor--datetimerange.el-input__inner{width:400px}.custom-theme .el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#b4bccc;float:left;line-height:32px}.custom-theme .el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#5a5e66}.custom-theme .el-date-editor .el-range-input::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input::placeholder{color:#b4bccc}.custom-theme .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:#2d2f33}.custom-theme .el-date-editor .el-range__close-icon{font-size:14px;color:#b4bccc;width:25px;display:inline-block;float:right;line-height:32px}.custom-theme .el-range-editor.el-input__inner{padding:3px 10px}.custom-theme .el-range-editor.is-active{border-color:#262729}.custom-theme .el-range-editor.is-active:hover{border-color:#262729}.custom-theme .el-range-editor--medium.el-input__inner{height:36px}.custom-theme .el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.custom-theme .el-range-editor--medium .el-range-input{font-size:14px}.custom-theme .el-range-editor--medium .el-range__close-icon,.custom-theme .el-range-editor--medium .el-range__icon{line-height:28px}.custom-theme .el-range-editor--small.el-input__inner{height:32px}.custom-theme .el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.custom-theme .el-range-editor--small .el-range-input{font-size:13px}.custom-theme .el-range-editor--small .el-range__close-icon,.custom-theme .el-range-editor--small .el-range__icon{line-height:24px}.custom-theme .el-range-editor--mini.el-input__inner{height:28px}.custom-theme .el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.custom-theme .el-range-editor--mini .el-range-input{font-size:12px}.custom-theme .el-range-editor--mini .el-range__close-icon,.custom-theme .el-range-editor--mini .el-range__icon{line-height:20px}.custom-theme .el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-range-editor.is-disabled:focus,.custom-theme .el-range-editor.is-disabled:hover{border-color:#dfe4ed}.custom-theme .el-range-editor.is-disabled input{background-color:#f5f7fa;color:#b4bccc;cursor:not-allowed}.custom-theme .el-range-editor.is-disabled input::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input::placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled .el-range-separator{color:#b4bccc}.custom-theme .el-picker-panel{color:#5a5e66;border:1px solid #dfe4ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.custom-theme .el-picker-panel__body-wrapper::after,.custom-theme .el-picker-panel__body::after{content:"";display:table;clear:both}.custom-theme .el-picker-panel__content{position:relative;margin:15px}.custom-theme .el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.custom-theme .el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#5a5e66;padding-left:12px;text-align:left;outline:0;cursor:pointer}.custom-theme .el-picker-panel__shortcut:hover{color:#262729}.custom-theme .el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#262729}.custom-theme .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}.custom-theme .el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.custom-theme .el-picker-panel__icon-btn{font-size:12px;color:#2d2f33;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.custom-theme .el-picker-panel__icon-btn:hover{color:#262729}.custom-theme .el-picker-panel__icon-btn.is-disabled{color:#bbb}.custom-theme .el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.custom-theme .el-picker-panel__link-btn{vertical-align:middle}.custom-theme .el-picker-panel .popper__arrow{-webkit-transform:translateX(-400%);transform:translateX(-400%)}.custom-theme .el-picker-panel [slot=sidebar],.custom-theme .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}.custom-theme .el-picker-panel [slot=sidebar]+.el-picker-panel__body,.custom-theme .el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.custom-theme .el-date-picker{width:322px}.custom-theme .el-date-picker.has-sidebar.has-time{width:434px}.custom-theme .el-date-picker.has-sidebar{width:438px}.custom-theme .el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.custom-theme .el-date-picker .el-picker-panel__content{width:292px}.custom-theme .el-date-picker table{table-layout:fixed;width:100%}.custom-theme .el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.custom-theme .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}.custom-theme .el-date-picker__header{margin:12px;text-align:center}.custom-theme .el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #e6ebf5}.custom-theme .el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.custom-theme .el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#5a5e66}.custom-theme .el-date-picker__header-label:hover{color:#262729}.custom-theme .el-date-picker__header-label.active{color:#262729}.custom-theme .el-date-picker__prev-btn{float:left}.custom-theme .el-date-picker__next-btn{float:right}.custom-theme .el-date-picker__time-wrap{padding:10px;text-align:center}.custom-theme .el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.custom-theme .el-date-range-picker{width:646px}.custom-theme .el-date-range-picker.has-sidebar{width:756px}.custom-theme .el-date-range-picker table{table-layout:fixed;width:100%}.custom-theme .el-date-range-picker .el-picker-panel__body{min-width:513px}.custom-theme .el-date-range-picker .el-picker-panel__content{margin:0}.custom-theme .el-date-range-picker__header{position:relative;text-align:center;height:28px}.custom-theme .el-date-range-picker__header [class*=arrow-left]{float:left}.custom-theme .el-date-range-picker__header [class*=arrow-right]{float:right}.custom-theme .el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.custom-theme .el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.custom-theme .el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.custom-theme .el-date-range-picker__content.is-right .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.custom-theme .el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.custom-theme .el-date-range-picker__editors-wrap.is-right{text-align:right}.custom-theme .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}.custom-theme .el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#2d2f33}.custom-theme .el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.custom-theme .el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.custom-theme .el-time-range-picker{width:354px;overflow:visible}.custom-theme .el-time-range-picker__content{position:relative;text-align:center;padding:10px}.custom-theme .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}.custom-theme .el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.custom-theme .el-time-range-picker__body{border-radius:2px;border:1px solid #dfe4ed}.custom-theme .el-time-panel{margin:5px 0;border:solid 1px #dfe4ed;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);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}.custom-theme .el-time-panel__content{font-size:0;position:relative;overflow:hidden}.custom-theme .el-time-panel__content::after,.custom-theme .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 #dfe4ed;border-bottom:1px solid #dfe4ed}.custom-theme .el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.custom-theme .el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.custom-theme .el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.custom-theme .el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.custom-theme .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}.custom-theme .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:#2d2f33}.custom-theme .el-time-panel__btn.confirm{font-weight:800;color:#262729}.custom-theme .el-time-panel .popper__arrow{-webkit-transform:translateX(-400%);transform:translateX(-400%)}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-scrollbar{overflow:hidden;position:relative}.custom-theme .el-scrollbar:active>.el-scrollbar__bar,.custom-theme .el-scrollbar:focus>.el-scrollbar__bar,.custom-theme .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.custom-theme .el-scrollbar__wrap{overflow:scroll;height:100%}.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.custom-theme .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(135,141,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.custom-theme .el-scrollbar__thumb:hover{background-color:rgba(135,141,153,.5)}.custom-theme .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}.custom-theme .el-scrollbar__bar.is-vertical{width:6px;top:2px}.custom-theme .el-scrollbar__bar.is-vertical>div{width:100%}.custom-theme .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.custom-theme .el-scrollbar__bar.is-horizontal>div{height:100%}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .fade-in-linear-enter-active,.custom-theme .fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .fade-in-linear-enter,.custom-theme .fade-in-linear-leave,.custom-theme .fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-linear-enter-active,.custom-theme .el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .el-fade-in-linear-enter,.custom-theme .el-fade-in-linear-leave,.custom-theme .el-fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-enter-active,.custom-theme .el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.custom-theme .el-fade-in-enter,.custom-theme .el-fade-in-leave-active{opacity:0}.custom-theme .el-zoom-in-center-enter-active,.custom-theme .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)}.custom-theme .el-zoom-in-center-enter,.custom-theme .el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.custom-theme .el-zoom-in-top-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center top;transform-origin:center top}.custom-theme .el-zoom-in-top-enter,.custom-theme .el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-bottom-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center bottom;transform-origin:center bottom}.custom-theme .el-zoom-in-bottom-enter,.custom-theme .el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-left-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:top left;transform-origin:top left}.custom-theme .el-zoom-in-left-enter,.custom-theme .el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.custom-theme .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}.custom-theme .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}.custom-theme .el-list-enter-active,.custom-theme .el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.custom-theme .el-list-enter,.custom-theme .el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.custom-theme .el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.custom-theme .el-date-editor{position:relative;display:inline-block;text-align:left}.custom-theme .el-date-editor.el-input,.custom-theme .el-date-editor.el-input__inner{width:220px}.custom-theme .el-date-editor--daterange.el-input,.custom-theme .el-date-editor--daterange.el-input__inner,.custom-theme .el-date-editor--timerange.el-input,.custom-theme .el-date-editor--timerange.el-input__inner{width:350px}.custom-theme .el-date-editor--datetimerange.el-input,.custom-theme .el-date-editor--datetimerange.el-input__inner{width:400px}.custom-theme .el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#b4bccc;float:left;line-height:32px}.custom-theme .el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#5a5e66}.custom-theme .el-date-editor .el-range-input::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input::placeholder{color:#b4bccc}.custom-theme .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:#2d2f33}.custom-theme .el-date-editor .el-range__close-icon{font-size:14px;color:#b4bccc;width:25px;display:inline-block;float:right;line-height:32px}.custom-theme .el-range-editor.el-input__inner{padding:3px 10px}.custom-theme .el-range-editor.is-active{border-color:#262729}.custom-theme .el-range-editor.is-active:hover{border-color:#262729}.custom-theme .el-range-editor--medium.el-input__inner{height:36px}.custom-theme .el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.custom-theme .el-range-editor--medium .el-range-input{font-size:14px}.custom-theme .el-range-editor--medium .el-range__close-icon,.custom-theme .el-range-editor--medium .el-range__icon{line-height:28px}.custom-theme .el-range-editor--small.el-input__inner{height:32px}.custom-theme .el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.custom-theme .el-range-editor--small .el-range-input{font-size:13px}.custom-theme .el-range-editor--small .el-range__close-icon,.custom-theme .el-range-editor--small .el-range__icon{line-height:24px}.custom-theme .el-range-editor--mini.el-input__inner{height:28px}.custom-theme .el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.custom-theme .el-range-editor--mini .el-range-input{font-size:12px}.custom-theme .el-range-editor--mini .el-range__close-icon,.custom-theme .el-range-editor--mini .el-range__icon{line-height:20px}.custom-theme .el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-range-editor.is-disabled:focus,.custom-theme .el-range-editor.is-disabled:hover{border-color:#dfe4ed}.custom-theme .el-range-editor.is-disabled input{background-color:#f5f7fa;color:#b4bccc;cursor:not-allowed}.custom-theme .el-range-editor.is-disabled input::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input::placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled .el-range-separator{color:#b4bccc}.custom-theme .el-picker-panel{color:#5a5e66;border:1px solid #dfe4ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.custom-theme .el-picker-panel__body-wrapper::after,.custom-theme .el-picker-panel__body::after{content:"";display:table;clear:both}.custom-theme .el-picker-panel__content{position:relative;margin:15px}.custom-theme .el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.custom-theme .el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#5a5e66;padding-left:12px;text-align:left;outline:0;cursor:pointer}.custom-theme .el-picker-panel__shortcut:hover{color:#262729}.custom-theme .el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#262729}.custom-theme .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}.custom-theme .el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.custom-theme .el-picker-panel__icon-btn{font-size:12px;color:#2d2f33;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.custom-theme .el-picker-panel__icon-btn:hover{color:#262729}.custom-theme .el-picker-panel__icon-btn.is-disabled{color:#bbb}.custom-theme .el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.custom-theme .el-picker-panel__link-btn{vertical-align:middle}.custom-theme .el-picker-panel .popper__arrow{-webkit-transform:translateX(-400%);transform:translateX(-400%)}.custom-theme .el-picker-panel [slot=sidebar],.custom-theme .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}.custom-theme .el-picker-panel [slot=sidebar]+.el-picker-panel__body,.custom-theme .el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.custom-theme .el-date-picker{width:322px}.custom-theme .el-date-picker.has-sidebar.has-time{width:434px}.custom-theme .el-date-picker.has-sidebar{width:438px}.custom-theme .el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.custom-theme .el-date-picker .el-picker-panel__content{width:292px}.custom-theme .el-date-picker table{table-layout:fixed;width:100%}.custom-theme .el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.custom-theme .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}.custom-theme .el-date-picker__header{margin:12px;text-align:center}.custom-theme .el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #e6ebf5}.custom-theme .el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.custom-theme .el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#5a5e66}.custom-theme .el-date-picker__header-label:hover{color:#262729}.custom-theme .el-date-picker__header-label.active{color:#262729}.custom-theme .el-date-picker__prev-btn{float:left}.custom-theme .el-date-picker__next-btn{float:right}.custom-theme .el-date-picker__time-wrap{padding:10px;text-align:center}.custom-theme .el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.custom-theme .el-scrollbar{overflow:hidden;position:relative}.custom-theme .el-scrollbar:active>.el-scrollbar__bar,.custom-theme .el-scrollbar:focus>.el-scrollbar__bar,.custom-theme .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.custom-theme .el-scrollbar__wrap{overflow:scroll;height:100%}.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.custom-theme .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(135,141,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.custom-theme .el-scrollbar__thumb:hover{background-color:rgba(135,141,153,.5)}.custom-theme .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}.custom-theme .el-scrollbar__bar.is-vertical{width:6px;top:2px}.custom-theme .el-scrollbar__bar.is-vertical>div{width:100%}.custom-theme .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.custom-theme .el-scrollbar__bar.is-horizontal>div{height:100%}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .time-select{margin:5px 0;min-width:0}.custom-theme .time-select .el-picker-panel__content{max-height:200px;margin:0}.custom-theme .time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.custom-theme .time-select-item.selected:not(.disabled){color:#262729;font-weight:700}.custom-theme .time-select-item.disabled{color:#dfe4ed;cursor:not-allowed}.custom-theme .time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.custom-theme .fade-in-linear-enter-active,.custom-theme .fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .fade-in-linear-enter,.custom-theme .fade-in-linear-leave,.custom-theme .fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-linear-enter-active,.custom-theme .el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-theme .el-fade-in-linear-enter,.custom-theme .el-fade-in-linear-leave,.custom-theme .el-fade-in-linear-leave-active{opacity:0}.custom-theme .el-fade-in-enter-active,.custom-theme .el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.custom-theme .el-fade-in-enter,.custom-theme .el-fade-in-leave-active{opacity:0}.custom-theme .el-zoom-in-center-enter-active,.custom-theme .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)}.custom-theme .el-zoom-in-center-enter,.custom-theme .el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.custom-theme .el-zoom-in-top-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center top;transform-origin:center top}.custom-theme .el-zoom-in-top-enter,.custom-theme .el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-bottom-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:center bottom;transform-origin:center bottom}.custom-theme .el-zoom-in-bottom-enter,.custom-theme .el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.custom-theme .el-zoom-in-left-enter-active,.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;-webkit-transform-origin:top left;transform-origin:top left}.custom-theme .el-zoom-in-left-enter,.custom-theme .el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.custom-theme .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}.custom-theme .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}.custom-theme .el-list-enter-active,.custom-theme .el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.custom-theme .el-list-enter,.custom-theme .el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.custom-theme .el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.custom-theme .el-date-editor{position:relative;display:inline-block;text-align:left}.custom-theme .el-date-editor.el-input,.custom-theme .el-date-editor.el-input__inner{width:220px}.custom-theme .el-date-editor--daterange.el-input,.custom-theme .el-date-editor--daterange.el-input__inner,.custom-theme .el-date-editor--timerange.el-input,.custom-theme .el-date-editor--timerange.el-input__inner{width:350px}.custom-theme .el-date-editor--datetimerange.el-input,.custom-theme .el-date-editor--datetimerange.el-input__inner{width:400px}.custom-theme .el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#b4bccc;float:left;line-height:32px}.custom-theme .el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#5a5e66}.custom-theme .el-date-editor .el-range-input::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-date-editor .el-range-input::placeholder{color:#b4bccc}.custom-theme .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:#2d2f33}.custom-theme .el-date-editor .el-range__close-icon{font-size:14px;color:#b4bccc;width:25px;display:inline-block;float:right;line-height:32px}.custom-theme .el-range-editor.el-input__inner{padding:3px 10px}.custom-theme .el-range-editor.is-active{border-color:#262729}.custom-theme .el-range-editor.is-active:hover{border-color:#262729}.custom-theme .el-range-editor--medium.el-input__inner{height:36px}.custom-theme .el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.custom-theme .el-range-editor--medium .el-range-input{font-size:14px}.custom-theme .el-range-editor--medium .el-range__close-icon,.custom-theme .el-range-editor--medium .el-range__icon{line-height:28px}.custom-theme .el-range-editor--small.el-input__inner{height:32px}.custom-theme .el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.custom-theme .el-range-editor--small .el-range-input{font-size:13px}.custom-theme .el-range-editor--small .el-range__close-icon,.custom-theme .el-range-editor--small .el-range__icon{line-height:24px}.custom-theme .el-range-editor--mini.el-input__inner{height:28px}.custom-theme .el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.custom-theme .el-range-editor--mini .el-range-input{font-size:12px}.custom-theme .el-range-editor--mini .el-range__close-icon,.custom-theme .el-range-editor--mini .el-range__icon{line-height:20px}.custom-theme .el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-range-editor.is-disabled:focus,.custom-theme .el-range-editor.is-disabled:hover{border-color:#dfe4ed}.custom-theme .el-range-editor.is-disabled input{background-color:#f5f7fa;color:#b4bccc;cursor:not-allowed}.custom-theme .el-range-editor.is-disabled input::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled input::placeholder{color:#b4bccc}.custom-theme .el-range-editor.is-disabled .el-range-separator{color:#b4bccc}.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.custom-theme .el-time-spinner.has-seconds .el-time-spinner__wrapper:nth-child(2){margin-left:1%}.custom-theme .el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.custom-theme .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.custom-theme .el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.custom-theme .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.custom-theme .el-time-spinner__arrow{font-size:12px;color:#878d99;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.custom-theme .el-time-spinner__arrow:hover{color:#262729}.custom-theme .el-time-spinner__arrow.el-icon-arrow-up{top:10px}.custom-theme .el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.custom-theme .el-time-spinner__input.el-input{width:70%}.custom-theme .el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.custom-theme .el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.custom-theme .el-time-spinner__list::after,.custom-theme .el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.custom-theme .el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#5a5e66}.custom-theme .el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.custom-theme .el-time-spinner__item.active:not(.disabled){color:#2d2f33;font-weight:700}.custom-theme .el-time-spinner__item.disabled{color:#b4bccc;cursor:not-allowed}.custom-theme .el-time-panel{margin:5px 0;border:solid 1px #dfe4ed;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);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}.custom-theme .el-time-panel__content{font-size:0;position:relative;overflow:hidden}.custom-theme .el-time-panel__content::after,.custom-theme .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 #dfe4ed;border-bottom:1px solid #dfe4ed}.custom-theme .el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.custom-theme .el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.custom-theme .el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.custom-theme .el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.custom-theme .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}.custom-theme .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:#2d2f33}.custom-theme .el-time-panel__btn.confirm{font-weight:800;color:#262729}.custom-theme .el-time-panel .popper__arrow{-webkit-transform:translateX(-400%);transform:translateX(-400%)}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-scrollbar{overflow:hidden;position:relative}.custom-theme .el-scrollbar:active>.el-scrollbar__bar,.custom-theme .el-scrollbar:focus>.el-scrollbar__bar,.custom-theme .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.custom-theme .el-scrollbar__wrap{overflow:scroll;height:100%}.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.custom-theme .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(135,141,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.custom-theme .el-scrollbar__thumb:hover{background-color:rgba(135,141,153,.5)}.custom-theme .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}.custom-theme .el-scrollbar__bar.is-vertical{width:6px;top:2px}.custom-theme .el-scrollbar__bar.is-vertical>div{width:100%}.custom-theme .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.custom-theme .el-scrollbar__bar.is-horizontal>div{height:100%}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #e6ebf5;padding:12px;z-index:2000;color:#5a5e66;line-height:1.4;text-align:justify;word-break:break-all;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.custom-theme .el-popover--plain{padding:18px 20px}.custom-theme .el-popover__title{color:#2d2f33;font-size:16px;line-height:1;margin-bottom:12px}.custom-theme .el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.custom-theme .el-tooltip__popper .popper__arrow,.custom-theme .el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .el-tooltip__popper .popper__arrow{border-width:6px}.custom-theme .el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.custom-theme .el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#2d2f33;border-bottom-width:0}.custom-theme .el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#2d2f33;border-bottom-width:0}.custom-theme .el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#2d2f33}.custom-theme .el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#2d2f33}.custom-theme .el-tooltip__popper[x-placement^=right]{margin-left:12px}.custom-theme .el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#2d2f33;border-left-width:0}.custom-theme .el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#2d2f33;border-left-width:0}.custom-theme .el-tooltip__popper[x-placement^=left]{margin-right:12px}.custom-theme .el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#2d2f33}.custom-theme .el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#2d2f33}.custom-theme .el-tooltip__popper.is-dark{background:#2d2f33;color:#fff}.custom-theme .el-tooltip__popper.is-light{background:#fff;border:1px solid #2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.custom-theme .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.custom-theme .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.custom-theme .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.custom-theme .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.custom-theme .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}}.custom-theme .v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.custom-theme .el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-color:#d8dce5;color:#5a5e66;-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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button+.el-button{margin-left:10px}.custom-theme .el-button.is-round{padding:12px 20px}.custom-theme .el-button:focus,.custom-theme .el-button:hover{color:#262729;border-color:#bebebf;background-color:#e9e9ea}.custom-theme .el-button:active{color:#222325;border-color:#222325;outline:0}.custom-theme .el-button::-moz-focus-inner{border:0}.custom-theme .el-button [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-button.is-plain:focus,.custom-theme .el-button.is-plain:hover{background:#fff;border-color:#262729;color:#262729}.custom-theme .el-button.is-plain:active{background:#fff;border-color:#222325;color:#222325;outline:0}.custom-theme .el-button.is-active{color:#222325;border-color:#222325}.custom-theme .el-button.is-disabled,.custom-theme .el-button.is-disabled:focus,.custom-theme .el-button.is-disabled:hover{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5}.custom-theme .el-button.is-disabled.el-button--text{background-color:transparent}.custom-theme .el-button.is-disabled.is-plain,.custom-theme .el-button.is-disabled.is-plain:focus,.custom-theme .el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#e6ebf5;color:#b4bccc}.custom-theme .el-button.is-loading{position:relative;pointer-events:none}.custom-theme .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)}.custom-theme .el-button.is-round{border-radius:20px;padding:12px 23px}.custom-theme .el-button--primary{color:#fff;background-color:#262729;border-color:#262729}.custom-theme .el-button--primary:focus,.custom-theme .el-button--primary:hover{background:#515254;border-color:#515254;color:#fff}.custom-theme .el-button--primary:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-active{background:#222325;border-color:#222325;color:#fff}.custom-theme .el-button--primary.is-disabled,.custom-theme .el-button--primary.is-disabled:active,.custom-theme .el-button--primary.is-disabled:focus,.custom-theme .el-button--primary.is-disabled:hover{color:#fff;background-color:#939394;border-color:#939394}.custom-theme .el-button--primary.is-plain{color:#262729;background:#e9e9ea;border-color:#a8a9a9}.custom-theme .el-button--primary.is-plain:focus,.custom-theme .el-button--primary.is-plain:hover{background:#262729;border-color:#262729;color:#fff}.custom-theme .el-button--primary.is-plain:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-plain.is-disabled,.custom-theme .el-button--primary.is-plain.is-disabled:active,.custom-theme .el-button--primary.is-plain.is-disabled:focus,.custom-theme .el-button--primary.is-plain.is-disabled:hover{color:#7d7d7f;background-color:#e9e9ea;border-color:#d4d4d4}.custom-theme .el-button--success{color:#fff;background-color:#409167;border-color:#409167}.custom-theme .el-button--success:focus,.custom-theme .el-button--success:hover{background:#66a785;border-color:#66a785;color:#fff}.custom-theme .el-button--success:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-active{background:#3a835d;border-color:#3a835d;color:#fff}.custom-theme .el-button--success.is-disabled,.custom-theme .el-button--success.is-disabled:active,.custom-theme .el-button--success.is-disabled:focus,.custom-theme .el-button--success.is-disabled:hover{color:#fff;background-color:#a0c8b3;border-color:#a0c8b3}.custom-theme .el-button--success.is-plain{color:#409167;background:#ecf4f0;border-color:#b3d3c2}.custom-theme .el-button--success.is-plain:focus,.custom-theme .el-button--success.is-plain:hover{background:#409167;border-color:#409167;color:#fff}.custom-theme .el-button--success.is-plain:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-plain.is-disabled,.custom-theme .el-button--success.is-plain.is-disabled:active,.custom-theme .el-button--success.is-plain.is-disabled:focus,.custom-theme .el-button--success.is-plain.is-disabled:hover{color:#8cbda4;background-color:#ecf4f0;border-color:#d9e9e1}.custom-theme .el-button--warning{color:#fff;background-color:#9da408;border-color:#9da408}.custom-theme .el-button--warning:focus,.custom-theme .el-button--warning:hover{background:#b1b639;border-color:#b1b639;color:#fff}.custom-theme .el-button--warning:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-active{background:#8d9407;border-color:#8d9407;color:#fff}.custom-theme .el-button--warning.is-disabled,.custom-theme .el-button--warning.is-disabled:active,.custom-theme .el-button--warning.is-disabled:focus,.custom-theme .el-button--warning.is-disabled:hover{color:#fff;background-color:#ced284;border-color:#ced284}.custom-theme .el-button--warning.is-plain{color:#9da408;background:#f5f6e6;border-color:#d8db9c}.custom-theme .el-button--warning.is-plain:focus,.custom-theme .el-button--warning.is-plain:hover{background:#9da408;border-color:#9da408;color:#fff}.custom-theme .el-button--warning.is-plain:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-plain.is-disabled,.custom-theme .el-button--warning.is-plain.is-disabled:active,.custom-theme .el-button--warning.is-plain.is-disabled:focus,.custom-theme .el-button--warning.is-plain.is-disabled:hover{color:#c4c86b;background-color:#f5f6e6;border-color:#ebedce}.custom-theme .el-button--danger{color:#fff;background-color:#b3450e;border-color:#b3450e}.custom-theme .el-button--danger:focus,.custom-theme .el-button--danger:hover{background:#c26a3e;border-color:#c26a3e;color:#fff}.custom-theme .el-button--danger:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-active{background:#a13e0d;border-color:#a13e0d;color:#fff}.custom-theme .el-button--danger.is-disabled,.custom-theme .el-button--danger.is-disabled:active,.custom-theme .el-button--danger.is-disabled:focus,.custom-theme .el-button--danger.is-disabled:hover{color:#fff;background-color:#d9a287;border-color:#d9a287}.custom-theme .el-button--danger.is-plain{color:#b3450e;background:#f7ece7;border-color:#e1b59f}.custom-theme .el-button--danger.is-plain:focus,.custom-theme .el-button--danger.is-plain:hover{background:#b3450e;border-color:#b3450e;color:#fff}.custom-theme .el-button--danger.is-plain:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-plain.is-disabled,.custom-theme .el-button--danger.is-plain.is-disabled:active,.custom-theme .el-button--danger.is-plain.is-disabled:focus,.custom-theme .el-button--danger.is-plain.is-disabled:hover{color:#d18f6e;background-color:#f7ece7;border-color:#f0dacf}.custom-theme .el-button--info{color:#fff;background-color:#0a76a4;border-color:#0a76a4}.custom-theme .el-button--info:focus,.custom-theme .el-button--info:hover{background:#3b91b6;border-color:#3b91b6;color:#fff}.custom-theme .el-button--info:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-active{background:#096a94;border-color:#096a94;color:#fff}.custom-theme .el-button--info.is-disabled,.custom-theme .el-button--info.is-disabled:active,.custom-theme .el-button--info.is-disabled:focus,.custom-theme .el-button--info.is-disabled:hover{color:#fff;background-color:#85bbd2;border-color:#85bbd2}.custom-theme .el-button--info.is-plain{color:#0a76a4;background:#e7f1f6;border-color:#9dc8db}.custom-theme .el-button--info.is-plain:focus,.custom-theme .el-button--info.is-plain:hover{background:#0a76a4;border-color:#0a76a4;color:#fff}.custom-theme .el-button--info.is-plain:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-plain.is-disabled,.custom-theme .el-button--info.is-plain.is-disabled:active,.custom-theme .el-button--info.is-plain.is-disabled:focus,.custom-theme .el-button--info.is-plain.is-disabled:hover{color:#6cadc8;background-color:#e7f1f6;border-color:#cee4ed}.custom-theme .el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button--medium.is-round{padding:10px 20px}.custom-theme .el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--small.is-round{padding:9px 15px}.custom-theme .el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--mini.is-round{padding:7px 15px}.custom-theme .el-button--text{border:none;color:#262729;background:0 0;padding-left:0;padding-right:0}.custom-theme .el-button--text:focus,.custom-theme .el-button--text:hover{color:#515254;border-color:transparent;background-color:transparent}.custom-theme .el-button--text:active{color:#222325;border-color:transparent;background-color:transparent}.custom-theme .el-button-group{display:inline-block;vertical-align:middle}.custom-theme .el-button-group::after,.custom-theme .el-button-group::before{display:table;content:""}.custom-theme .el-button-group::after{clear:both}.custom-theme .el-button-group .el-button{float:left;position:relative}.custom-theme .el-button-group .el-button+.el-button{margin-left:0}.custom-theme .el-button-group .el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-button-group .el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child){border-radius:0}.custom-theme .el-button-group .el-button:not(:last-child){margin-right:-1px}.custom-theme .el-button-group .el-button:active,.custom-theme .el-button-group .el-button:focus,.custom-theme .el-button-group .el-button:hover{z-index:1}.custom-theme .el-button-group .el-button.is-active{z-index:1}.custom-theme .el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #e6ebf5;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}.custom-theme .el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.custom-theme .el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.custom-theme .el-message-box__header{position:relative;padding:15px;padding-bottom:10px}.custom-theme .el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#2d2f33}.custom-theme .el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.custom-theme .el-message-box__headerbtn .el-message-box__close{color:#0a76a4}.custom-theme .el-message-box__headerbtn:focus .el-message-box__close,.custom-theme .el-message-box__headerbtn:hover .el-message-box__close{color:#262729}.custom-theme .el-message-box__content{position:relative;padding:10px 15px;color:#5a5e66;font-size:14px}.custom-theme .el-message-box__input{padding-top:15px}.custom-theme .el-message-box__input input.invalid{border-color:#b3450e}.custom-theme .el-message-box__input input.invalid:focus{border-color:#b3450e}.custom-theme .el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.custom-theme .el-message-box__status::before{padding-left:1px}.custom-theme .el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.custom-theme .el-message-box__status.el-icon-success{color:#409167}.custom-theme .el-message-box__status.el-icon-info{color:#0a76a4}.custom-theme .el-message-box__status.el-icon-warning{color:#9da408}.custom-theme .el-message-box__status.el-icon-error{color:#b3450e}.custom-theme .el-message-box__message{margin:0}.custom-theme .el-message-box__message p{margin:0;line-height:24px}.custom-theme .el-message-box__errormsg{color:#b3450e;font-size:12px;min-height:18px;margin-top:2px}.custom-theme .el-message-box__btns{padding:5px 15px 0;text-align:right}.custom-theme .el-message-box__btns button:nth-child(2){margin-left:10px}.custom-theme .el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.custom-theme .el-message-box--center{padding-bottom:30px}.custom-theme .el-message-box--center .el-message-box__header{padding-top:30px}.custom-theme .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}.custom-theme .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)}.custom-theme .el-message-box--center .el-message-box__message{margin-left:0}.custom-theme .el-message-box--center .el-message-box__btns,.custom-theme .el-message-box--center .el-message-box__content{text-align:center}.custom-theme .el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.custom-theme .msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.custom-theme .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}}.custom-theme .el-breadcrumb{font-size:14px;line-height:1}.custom-theme .el-breadcrumb::after,.custom-theme .el-breadcrumb::before{display:table;content:""}.custom-theme .el-breadcrumb::after{clear:both}.custom-theme .el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#b4bccc}.custom-theme .el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.custom-theme .el-breadcrumb__item{float:left}.custom-theme .el-breadcrumb__inner,.custom-theme .el-breadcrumb__inner a{font-weight:700;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#2d2f33}.custom-theme .el-breadcrumb__inner a:hover,.custom-theme .el-breadcrumb__inner:hover{color:#262729;cursor:pointer}.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner,.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner a,.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#5a5e66;cursor:text}.custom-theme .el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.custom-theme .el-form--label-left .el-form-item__label{text-align:left}.custom-theme .el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px 0}.custom-theme .el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.custom-theme .el-form--inline .el-form-item__label{float:none;display:inline-block}.custom-theme .el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.custom-theme .el-form--inline.el-form--label-top .el-form-item__content{display:block}.custom-theme .el-form-item{margin-bottom:22px}.custom-theme .el-form-item::after,.custom-theme .el-form-item::before{display:table;content:""}.custom-theme .el-form-item::after{clear:both}.custom-theme .el-form-item .el-form-item{margin-bottom:0}.custom-theme .el-form-item .el-input__validateIcon{display:none}.custom-theme .el-form-item--medium .el-form-item__label{line-height:36px}.custom-theme .el-form-item--medium .el-form-item__content{line-height:36px}.custom-theme .el-form-item--small .el-form-item__label{line-height:32px}.custom-theme .el-form-item--small .el-form-item__content{line-height:32px}.custom-theme .el-form-item--small.el-form-item{margin-bottom:18px}.custom-theme .el-form-item--small .el-form-item__error{padding-top:2px}.custom-theme .el-form-item--mini .el-form-item__label{line-height:28px}.custom-theme .el-form-item--mini .el-form-item__content{line-height:28px}.custom-theme .el-form-item--mini.el-form-item{margin-bottom:18px}.custom-theme .el-form-item--mini .el-form-item__error{padding-top:1px}.custom-theme .el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#5a5e66;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-form-item__content{line-height:40px;position:relative;font-size:14px}.custom-theme .el-form-item__content::after,.custom-theme .el-form-item__content::before{display:table;content:""}.custom-theme .el-form-item__content::after{clear:both}.custom-theme .el-form-item__error{color:#b3450e;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.custom-theme .el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.custom-theme .el-form-item.is-required .el-form-item__label:before{content:'*';color:#b3450e;margin-right:4px}.custom-theme .el-form-item.is-error .el-input__inner,.custom-theme .el-form-item.is-error .el-input__inner:focus,.custom-theme .el-form-item.is-error .el-textarea__inner,.custom-theme .el-form-item.is-error .el-textarea__inner:focus{border-color:#b3450e}.custom-theme .el-form-item.is-error .el-input-group__append .el-input__inner,.custom-theme .el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.custom-theme .el-form-item.is-error .el-input__validateIcon{color:#b3450e}.custom-theme .el-form-item.is-success .el-input__inner,.custom-theme .el-form-item.is-success .el-input__inner:focus,.custom-theme .el-form-item.is-success .el-textarea__inner,.custom-theme .el-form-item.is-success .el-textarea__inner:focus{border-color:#409167}.custom-theme .el-form-item.is-success .el-input-group__append .el-input__inner,.custom-theme .el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.custom-theme .el-form-item.is-success .el-input__validateIcon{color:#409167}.custom-theme .el-form-item--feedback .el-input__validateIcon{display:inline-block}.custom-theme .el-tabs__header{padding:0;position:relative;margin:0 0 15px}.custom-theme .el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#262729;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}.custom-theme .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}.custom-theme .el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.custom-theme .el-tabs__new-tab:hover{color:#262729}.custom-theme .el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.custom-theme .el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#dfe4ed;z-index:1}.custom-theme .el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-tabs__nav-scroll{overflow:hidden}.custom-theme .el-tabs__nav-next,.custom-theme .el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#878d99}.custom-theme .el-tabs__nav-next{right:0}.custom-theme .el-tabs__nav-prev{left:0}.custom-theme .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}.custom-theme .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:#2d2f33;position:relative}.custom-theme .el-tabs__item:focus,.custom-theme .el-tabs__item:focus:active{outline:0}.custom-theme .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}.custom-theme .el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.custom-theme .el-tabs__item .el-icon-close:hover{background-color:#b4bccc;color:#fff}.custom-theme .el-tabs__item.is-active{color:#262729}.custom-theme .el-tabs__item:hover{color:#262729;cursor:pointer}.custom-theme .el-tabs__item.is-disabled{color:#b4bccc;cursor:default}.custom-theme .el-tabs__content{overflow:hidden;position:relative}.custom-theme .el-tabs--card>.el-tabs__header{border-bottom:1px solid #dfe4ed}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #dfe4ed;border-bottom:none;border-radius:4px 4px 0 0}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.custom-theme .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%}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #dfe4ed;-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)}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.custom-theme .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.custom-theme .el-tabs--border-card{background:#fff;border:1px solid #d8dce5;-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)}.custom-theme .el-tabs--border-card>.el-tabs__content{padding:15px}.custom-theme .el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #dfe4ed;margin:0}.custom-theme .el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.custom-theme .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:-1px -1px 0;color:#878d99}.custom-theme .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#262729;background-color:#fff;border-right-color:#d8dce5;border-left-color:#d8dce5}.custom-theme .el-tabs--border-card>.el-tabs__header .el-tabs__item:hover{color:#262729}.custom-theme .el-tabs--bottom:not(.el-tabs--border-card):not(.el-tabs--card) .el-tabs__item:nth-child(2),.custom-theme .el-tabs--top:not(.el-tabs--border-card):not(.el-tabs--card) .el-tabs__item:nth-child(2){padding-left:0}.custom-theme .el-tabs--bottom .el-tabs__header{margin-bottom:0;margin-top:10px}.custom-theme .el-tabs--bottom.el-tabs--border-card .el-tabs__header{border-bottom:0;border-top:1px solid #d8dce5}.custom-theme .el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap{margin-top:-1px;margin-bottom:0}.custom-theme .el-tabs--bottom.el-tabs--border-card .el-tabs__item{border:1px solid transparent;margin:0 -1px -1px -1px}.custom-theme .el-tabs--left,.custom-theme .el-tabs--right{overflow:hidden}.custom-theme .el-tabs--left .el-tabs__header,.custom-theme .el-tabs--left .el-tabs__nav-scroll,.custom-theme .el-tabs--left .el-tabs__nav-wrap,.custom-theme .el-tabs--right .el-tabs__header,.custom-theme .el-tabs--right .el-tabs__nav-scroll,.custom-theme .el-tabs--right .el-tabs__nav-wrap{height:100%}.custom-theme .el-tabs--left .el-tabs__active-bar,.custom-theme .el-tabs--right .el-tabs__active-bar{top:0;bottom:auto;width:2px;height:auto}.custom-theme .el-tabs--left .el-tabs__nav-wrap,.custom-theme .el-tabs--right .el-tabs__nav-wrap{margin-bottom:0}.custom-theme .el-tabs--left .el-tabs__nav-wrap.is-scrollable,.custom-theme .el-tabs--right .el-tabs__nav-wrap.is-scrollable{padding:30px 0}.custom-theme .el-tabs--left .el-tabs__nav-wrap::after,.custom-theme .el-tabs--right .el-tabs__nav-wrap::after{height:100%;width:2px;bottom:auto;top:0}.custom-theme .el-tabs--left .el-tabs__nav,.custom-theme .el-tabs--right .el-tabs__nav{float:none}.custom-theme .el-tabs--left .el-tabs__item,.custom-theme .el-tabs--right .el-tabs__item{display:block}.custom-theme .el-tabs--left .el-tabs__nav-next,.custom-theme .el-tabs--left .el-tabs__nav-prev,.custom-theme .el-tabs--right .el-tabs__nav-next,.custom-theme .el-tabs--right .el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.custom-theme .el-tabs--left .el-tabs__nav-next i,.custom-theme .el-tabs--left .el-tabs__nav-prev i,.custom-theme .el-tabs--right .el-tabs__nav-next i,.custom-theme .el-tabs--right .el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.custom-theme .el-tabs--left .el-tabs__nav-prev,.custom-theme .el-tabs--right .el-tabs__nav-prev{left:auto;top:0}.custom-theme .el-tabs--left .el-tabs__nav-next,.custom-theme .el-tabs--right .el-tabs__nav-next{right:auto;bottom:0}.custom-theme .el-tabs--left .el-tabs__header{float:left;margin-bottom:0;margin-right:10px}.custom-theme .el-tabs--left .el-tabs__nav-wrap{margin-right:-1px}.custom-theme .el-tabs--left .el-tabs__nav-wrap::after{left:auto;right:0}.custom-theme .el-tabs--left .el-tabs__active-bar{right:0;left:auto}.custom-theme .el-tabs--left .el-tabs__item{text-align:right}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__active-bar{display:none}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item{border-left:none;border-right:1px solid #dfe4ed;border-bottom:none;border-top:1px solid #dfe4ed}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item:first-child{border-right:1px solid #dfe4ed;border-top:none}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item.is-active{border:1px solid #dfe4ed;border-right-color:#fff;border-left:none;border-bottom:none}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item.is-active:first-child{border-top:none}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__item.is-active:last-child{border-bottom:none}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #dfe4ed;border-right:none}.custom-theme .el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.custom-theme .el-tabs--left.el-tabs--border-card .el-tabs__header{border-right:1px solid #dfe4ed}.custom-theme .el-tabs--left.el-tabs--border-card .el-tabs__item{border:1px solid transparent;margin:-1px 0 -1px -1px}.custom-theme .el-tabs--left.el-tabs--border-card .el-tabs__item.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.custom-theme .el-tabs--right .el-tabs__header{float:right;margin-bottom:0;margin-left:10px}.custom-theme .el-tabs--right .el-tabs__nav-wrap{margin-left:-1px}.custom-theme .el-tabs--right .el-tabs__nav-wrap::after{left:0;right:auto}.custom-theme .el-tabs--right .el-tabs__active-bar{left:0}.custom-theme .el-tabs--right.el-tabs--card .el-tabs__active-bar{display:none}.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item{border-bottom:none;border-top:1px solid #dfe4ed}.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item:first-child{border-left:1px solid #dfe4ed;border-top:none}.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item.is-active{border:1px solid #dfe4ed;border-left-color:#fff;border-right:none;border-bottom:none}.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item.is-active:first-child{border-top:none}.custom-theme .el-tabs--right.el-tabs--card .el-tabs__item.is-active:last-child{border-bottom:none}.custom-theme .el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #dfe4ed;border-left:none}.custom-theme .el-tabs--right.el-tabs--border-card .el-tabs__header{border-left:1px solid #dfe4ed}.custom-theme .el-tabs--right.el-tabs--border-card .el-tabs__item{border:1px solid transparent;margin:-1px -1px -1px 0}.custom-theme .el-tabs--right.el-tabs--border-card .el-tabs__item.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.custom-theme .slideInLeft-transition,.custom-theme .slideInRight-transition{display:inline-block}.custom-theme .slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.custom-theme .slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.custom-theme .slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.custom-theme .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}}.custom-theme .el-tag{background-color:rgba(38,39,41,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#262729;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(38,39,41,.2);white-space:nowrap}.custom-theme .el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-5px;color:#262729}.custom-theme .el-tag .el-icon-close::before{display:block}.custom-theme .el-tag .el-icon-close:hover{background-color:#262729;color:#fff}.custom-theme .el-tag--info{background-color:rgba(10,118,164,.1);border-color:rgba(10,118,164,.2);color:#0a76a4}.custom-theme .el-tag--info.is-hit{border-color:#0a76a4}.custom-theme .el-tag--info .el-tag__close{color:#0a76a4}.custom-theme .el-tag--info .el-tag__close:hover{background-color:#0a76a4;color:#fff}.custom-theme .el-tag--success{background-color:rgba(64,145,103,.1);border-color:rgba(64,145,103,.2);color:#409167}.custom-theme .el-tag--success.is-hit{border-color:#409167}.custom-theme .el-tag--success .el-tag__close{color:#409167}.custom-theme .el-tag--success .el-tag__close:hover{background-color:#409167;color:#fff}.custom-theme .el-tag--warning{background-color:rgba(157,164,8,.1);border-color:rgba(157,164,8,.2);color:#9da408}.custom-theme .el-tag--warning.is-hit{border-color:#9da408}.custom-theme .el-tag--warning .el-tag__close{color:#9da408}.custom-theme .el-tag--warning .el-tag__close:hover{background-color:#9da408;color:#fff}.custom-theme .el-tag--danger{background-color:rgba(179,69,14,.1);border-color:rgba(179,69,14,.2);color:#b3450e}.custom-theme .el-tag--danger.is-hit{border-color:#b3450e}.custom-theme .el-tag--danger .el-tag__close{color:#b3450e}.custom-theme .el-tag--danger .el-tag__close:hover{background-color:#b3450e;color:#fff}.custom-theme .el-tag--medium{height:28px;line-height:26px}.custom-theme .el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--small{height:24px;padding:0 8px;line-height:22px}.custom-theme .el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-tag--mini{height:20px;padding:0 5px;line-height:19px}.custom-theme .el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.custom-theme .el-tree{cursor:default;background:#fff;color:#5a5e66}.custom-theme .el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.custom-theme .el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#623615}.custom-theme .el-tree-node{white-space:nowrap}.custom-theme .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}.custom-theme .el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.custom-theme .el-tree-node__content>.el-checkbox{margin-right:8px}.custom-theme .el-tree-node__content:hover{background-color:#f5f7fa}.custom-theme .el-tree-node__expand-icon{cursor:pointer;color:#b4bccc;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}.custom-theme .el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.custom-theme .el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.custom-theme .el-tree-node__label{font-size:14px}.custom-theme .el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#b4bccc}.custom-theme .el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.custom-theme .el-tree-node.is-expanded>.el-tree-node__children{display:block}.custom-theme .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#eee}.custom-theme .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}.custom-theme .el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.custom-theme .el-alert--success{background-color:#ecf4f0;color:#409167}.custom-theme .el-alert--success .el-alert__description{color:#409167}.custom-theme .el-alert--info{background-color:#e7f1f6;color:#0a76a4}.custom-theme .el-alert--info .el-alert__description{color:#0a76a4}.custom-theme .el-alert--warning{background-color:#f5f6e6;color:#9da408}.custom-theme .el-alert--warning .el-alert__description{color:#9da408}.custom-theme .el-alert--error{background-color:#f7ece7;color:#b3450e}.custom-theme .el-alert--error .el-alert__description{color:#b3450e}.custom-theme .el-alert__content{display:table-cell;padding:0 8px}.custom-theme .el-alert__icon{font-size:16px;width:16px}.custom-theme .el-alert__icon.is-big{font-size:28px;width:28px}.custom-theme .el-alert__title{font-size:13px;line-height:18px}.custom-theme .el-alert__title.is-bold{font-weight:700}.custom-theme .el-alert .el-alert__description{font-size:12px;margin:5px 0 0 0}.custom-theme .el-alert__closebtn{font-size:12px;color:#b4bccc;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.custom-theme .el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.custom-theme .el-alert-fade-enter,.custom-theme .el-alert-fade-leave-active{opacity:0}.custom-theme .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 #e6ebf5;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}.custom-theme .el-notification.right{right:16px}.custom-theme .el-notification.left{left:16px}.custom-theme .el-notification__group{margin-left:13px}.custom-theme .el-notification__title{font-weight:700;font-size:16px;color:#2d2f33;margin:0}.custom-theme .el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0 0;color:#5a5e66;text-align:justify}.custom-theme .el-notification__content p{margin:0}.custom-theme .el-notification__icon{height:24px;width:24px;font-size:24px;-webkit-transform:translateY(4px);transform:translateY(4px)}.custom-theme .el-notification__closeBtn{position:absolute;top:15px;right:15px;cursor:pointer;color:#878d99;font-size:16px}.custom-theme .el-notification__closeBtn:hover{color:#5a5e66}.custom-theme .el-notification .el-icon-success{color:#409167}.custom-theme .el-notification .el-icon-error{color:#b3450e}.custom-theme .el-notification .el-icon-info{color:#0a76a4}.custom-theme .el-notification .el-icon-warning{color:#9da408}.custom-theme .el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.custom-theme .el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.custom-theme .el-notification-fade-leave-active{opacity:0}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.custom-theme .el-input-number .el-input{display:block}.custom-theme .el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.custom-theme .el-input-number__decrease,.custom-theme .el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#5a5e66;cursor:pointer;font-size:13px}.custom-theme .el-input-number__decrease:hover,.custom-theme .el-input-number__increase:hover{color:#262729}.custom-theme .el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.custom-theme .el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#262729}.custom-theme .el-input-number__decrease.is-disabled,.custom-theme .el-input-number__increase.is-disabled{color:#b4bccc;cursor:not-allowed}.custom-theme .el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #d8dce5}.custom-theme .el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #d8dce5}.custom-theme .el-input-number.is-disabled .el-input-number__decrease,.custom-theme .el-input-number.is-disabled .el-input-number__increase{border-color:#dfe4ed;color:#dfe4ed}.custom-theme .el-input-number.is-disabled .el-input-number__decrease:hover,.custom-theme .el-input-number.is-disabled .el-input-number__increase:hover{color:#dfe4ed;cursor:not-allowed}.custom-theme .el-input-number--medium{width:200px;line-height:34px}.custom-theme .el-input-number--medium .el-input-number__decrease,.custom-theme .el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.custom-theme .el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.custom-theme .el-input-number--small{width:130px;line-height:30px}.custom-theme .el-input-number--small .el-input-number__decrease,.custom-theme .el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.custom-theme .el-input-number--small .el-input-number__decrease [class*=el-icon],.custom-theme .el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.custom-theme .el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.custom-theme .el-input-number--mini{width:130px;line-height:26px}.custom-theme .el-input-number--mini .el-input-number__decrease,.custom-theme .el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.custom-theme .el-input-number--mini .el-input-number__decrease [class*=el-icon],.custom-theme .el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.custom-theme .el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.custom-theme .el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.custom-theme .el-input-number.is-controls-right .el-input-number__decrease,.custom-theme .el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.custom-theme .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.custom-theme .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.custom-theme .el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #d8dce5}.custom-theme .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 #d8dce5;border-radius:0 0 4px 0}.custom-theme .el-input-number.is-controls-right[class*=medium] [class*=decrease],.custom-theme .el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.custom-theme .el-input-number.is-controls-right[class*=small] [class*=decrease],.custom-theme .el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.custom-theme .el-input-number.is-controls-right[class*=mini] [class*=decrease],.custom-theme .el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.custom-theme .el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.custom-theme .el-tooltip__popper .popper__arrow,.custom-theme .el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .el-tooltip__popper .popper__arrow{border-width:6px}.custom-theme .el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.custom-theme .el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#2d2f33;border-bottom-width:0}.custom-theme .el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#2d2f33;border-bottom-width:0}.custom-theme .el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#2d2f33}.custom-theme .el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#2d2f33}.custom-theme .el-tooltip__popper[x-placement^=right]{margin-left:12px}.custom-theme .el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#2d2f33;border-left-width:0}.custom-theme .el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#2d2f33;border-left-width:0}.custom-theme .el-tooltip__popper[x-placement^=left]{margin-right:12px}.custom-theme .el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#2d2f33}.custom-theme .el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#2d2f33}.custom-theme .el-tooltip__popper.is-dark{background:#2d2f33;color:#fff}.custom-theme .el-tooltip__popper.is-light{background:#fff;border:1px solid #2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.custom-theme .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.custom-theme .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.custom-theme .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#2d2f33}.custom-theme .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.custom-theme .el-slider::after,.custom-theme .el-slider::before{display:table;content:""}.custom-theme .el-slider::after{clear:both}.custom-theme .el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#dfe4ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.custom-theme .el-slider__runway.show-input{margin-right:160px;width:auto}.custom-theme .el-slider__runway.disabled{cursor:default}.custom-theme .el-slider__runway.disabled .el-slider__bar{background-color:#b4bccc}.custom-theme .el-slider__runway.disabled .el-slider__button{border-color:#b4bccc}.custom-theme .el-slider__runway.disabled .el-slider__button-wrapper.hover,.custom-theme .el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.custom-theme .el-slider__runway.disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.custom-theme .el-slider__runway.disabled .el-slider__button.dragging,.custom-theme .el-slider__runway.disabled .el-slider__button.hover,.custom-theme .el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1)}.custom-theme .el-slider__runway.disabled .el-slider__button.hover,.custom-theme .el-slider__runway.disabled .el-slider__button:hover{cursor:not-allowed}.custom-theme .el-slider__runway.disabled .el-slider__button.dragging{cursor:not-allowed}.custom-theme .el-slider__input{float:right;margin-top:3px}.custom-theme .el-slider__bar{height:6px;background-color:#262729;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.custom-theme .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}.custom-theme .el-slider__button-wrapper::after{display:inline-block;content:"";height:100%;vertical-align:middle}.custom-theme .el-slider__button-wrapper .el-tooltip{vertical-align:middle;display:inline-block}.custom-theme .el-slider__button-wrapper.hover,.custom-theme .el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.custom-theme .el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.custom-theme .el-slider__button{width:16px;height:16px;border:solid 2px #262729;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.custom-theme .el-slider__button.dragging,.custom-theme .el-slider__button.hover,.custom-theme .el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.custom-theme .el-slider__button.hover,.custom-theme .el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.custom-theme .el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.custom-theme .el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.custom-theme .el-slider.is-vertical{position:relative}.custom-theme .el-slider.is-vertical .el-slider__runway{width:4px;height:100%;margin:0 16px}.custom-theme .el-slider.is-vertical .el-slider__bar{width:4px;height:auto;border-radius:0 0 3px 3px}.custom-theme .el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.custom-theme .el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.custom-theme .el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #d8dce5;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)}.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.custom-theme .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}.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#b4bccc}.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.custom-theme .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#262729}.custom-theme .el-loading-parent--relative{position:relative!important}.custom-theme .el-loading-parent--hidden{overflow:hidden!important}.custom-theme .el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.custom-theme .el-loading-mask.is-fullscreen{position:fixed}.custom-theme .el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.custom-theme .el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.custom-theme .el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.custom-theme .el-loading-spinner .el-loading-text{color:#262729;margin:3px 0;font-size:14px}.custom-theme .el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.custom-theme .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:#262729;stroke-linecap:round}.custom-theme .el-loading-spinner i{color:#262729}.custom-theme .el-loading-fade-enter,.custom-theme .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}}.custom-theme .el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-row::after,.custom-theme .el-row::before{display:table;content:""}.custom-theme .el-row::after{clear:both}.custom-theme .el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.custom-theme .el-row--flex:after,.custom-theme .el-row--flex:before{display:none}.custom-theme .el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.custom-theme .el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.custom-theme .el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.custom-theme .el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.custom-theme .el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.custom-theme .el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.custom-theme [class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-col-0{display:none}.custom-theme .el-col-1{width:4.16667%}.custom-theme .el-col-offset-1{margin-left:4.16667%}.custom-theme .el-col-pull-1{position:relative;right:4.16667%}.custom-theme .el-col-push-1{position:relative;left:4.16667%}.custom-theme .el-col-2{width:8.33333%}.custom-theme .el-col-offset-2{margin-left:8.33333%}.custom-theme .el-col-pull-2{position:relative;right:8.33333%}.custom-theme .el-col-push-2{position:relative;left:8.33333%}.custom-theme .el-col-3{width:12.5%}.custom-theme .el-col-offset-3{margin-left:12.5%}.custom-theme .el-col-pull-3{position:relative;right:12.5%}.custom-theme .el-col-push-3{position:relative;left:12.5%}.custom-theme .el-col-4{width:16.66667%}.custom-theme .el-col-offset-4{margin-left:16.66667%}.custom-theme .el-col-pull-4{position:relative;right:16.66667%}.custom-theme .el-col-push-4{position:relative;left:16.66667%}.custom-theme .el-col-5{width:20.83333%}.custom-theme .el-col-offset-5{margin-left:20.83333%}.custom-theme .el-col-pull-5{position:relative;right:20.83333%}.custom-theme .el-col-push-5{position:relative;left:20.83333%}.custom-theme .el-col-6{width:25%}.custom-theme .el-col-offset-6{margin-left:25%}.custom-theme .el-col-pull-6{position:relative;right:25%}.custom-theme .el-col-push-6{position:relative;left:25%}.custom-theme .el-col-7{width:29.16667%}.custom-theme .el-col-offset-7{margin-left:29.16667%}.custom-theme .el-col-pull-7{position:relative;right:29.16667%}.custom-theme .el-col-push-7{position:relative;left:29.16667%}.custom-theme .el-col-8{width:33.33333%}.custom-theme .el-col-offset-8{margin-left:33.33333%}.custom-theme .el-col-pull-8{position:relative;right:33.33333%}.custom-theme .el-col-push-8{position:relative;left:33.33333%}.custom-theme .el-col-9{width:37.5%}.custom-theme .el-col-offset-9{margin-left:37.5%}.custom-theme .el-col-pull-9{position:relative;right:37.5%}.custom-theme .el-col-push-9{position:relative;left:37.5%}.custom-theme .el-col-10{width:41.66667%}.custom-theme .el-col-offset-10{margin-left:41.66667%}.custom-theme .el-col-pull-10{position:relative;right:41.66667%}.custom-theme .el-col-push-10{position:relative;left:41.66667%}.custom-theme .el-col-11{width:45.83333%}.custom-theme .el-col-offset-11{margin-left:45.83333%}.custom-theme .el-col-pull-11{position:relative;right:45.83333%}.custom-theme .el-col-push-11{position:relative;left:45.83333%}.custom-theme .el-col-12{width:50%}.custom-theme .el-col-offset-12{margin-left:50%}.custom-theme .el-col-pull-12{position:relative;right:50%}.custom-theme .el-col-push-12{position:relative;left:50%}.custom-theme .el-col-13{width:54.16667%}.custom-theme .el-col-offset-13{margin-left:54.16667%}.custom-theme .el-col-pull-13{position:relative;right:54.16667%}.custom-theme .el-col-push-13{position:relative;left:54.16667%}.custom-theme .el-col-14{width:58.33333%}.custom-theme .el-col-offset-14{margin-left:58.33333%}.custom-theme .el-col-pull-14{position:relative;right:58.33333%}.custom-theme .el-col-push-14{position:relative;left:58.33333%}.custom-theme .el-col-15{width:62.5%}.custom-theme .el-col-offset-15{margin-left:62.5%}.custom-theme .el-col-pull-15{position:relative;right:62.5%}.custom-theme .el-col-push-15{position:relative;left:62.5%}.custom-theme .el-col-16{width:66.66667%}.custom-theme .el-col-offset-16{margin-left:66.66667%}.custom-theme .el-col-pull-16{position:relative;right:66.66667%}.custom-theme .el-col-push-16{position:relative;left:66.66667%}.custom-theme .el-col-17{width:70.83333%}.custom-theme .el-col-offset-17{margin-left:70.83333%}.custom-theme .el-col-pull-17{position:relative;right:70.83333%}.custom-theme .el-col-push-17{position:relative;left:70.83333%}.custom-theme .el-col-18{width:75%}.custom-theme .el-col-offset-18{margin-left:75%}.custom-theme .el-col-pull-18{position:relative;right:75%}.custom-theme .el-col-push-18{position:relative;left:75%}.custom-theme .el-col-19{width:79.16667%}.custom-theme .el-col-offset-19{margin-left:79.16667%}.custom-theme .el-col-pull-19{position:relative;right:79.16667%}.custom-theme .el-col-push-19{position:relative;left:79.16667%}.custom-theme .el-col-20{width:83.33333%}.custom-theme .el-col-offset-20{margin-left:83.33333%}.custom-theme .el-col-pull-20{position:relative;right:83.33333%}.custom-theme .el-col-push-20{position:relative;left:83.33333%}.custom-theme .el-col-21{width:87.5%}.custom-theme .el-col-offset-21{margin-left:87.5%}.custom-theme .el-col-pull-21{position:relative;right:87.5%}.custom-theme .el-col-push-21{position:relative;left:87.5%}.custom-theme .el-col-22{width:91.66667%}.custom-theme .el-col-offset-22{margin-left:91.66667%}.custom-theme .el-col-pull-22{position:relative;right:91.66667%}.custom-theme .el-col-push-22{position:relative;left:91.66667%}.custom-theme .el-col-23{width:95.83333%}.custom-theme .el-col-offset-23{margin-left:95.83333%}.custom-theme .el-col-pull-23{position:relative;right:95.83333%}.custom-theme .el-col-push-23{position:relative;left:95.83333%}.custom-theme .el-col-24{width:100%}.custom-theme .el-col-offset-24{margin-left:100%}.custom-theme .el-col-pull-24{position:relative;right:100%}.custom-theme .el-col-push-24{position:relative;left:100%}@media only screen and (max-width:768px){.custom-theme .el-col-xs-0{display:none}.custom-theme .el-col-xs-1{width:4.16667%}.custom-theme .el-col-xs-offset-1{margin-left:4.16667%}.custom-theme .el-col-xs-pull-1{position:relative;right:4.16667%}.custom-theme .el-col-xs-push-1{position:relative;left:4.16667%}.custom-theme .el-col-xs-2{width:8.33333%}.custom-theme .el-col-xs-offset-2{margin-left:8.33333%}.custom-theme .el-col-xs-pull-2{position:relative;right:8.33333%}.custom-theme .el-col-xs-push-2{position:relative;left:8.33333%}.custom-theme .el-col-xs-3{width:12.5%}.custom-theme .el-col-xs-offset-3{margin-left:12.5%}.custom-theme .el-col-xs-pull-3{position:relative;right:12.5%}.custom-theme .el-col-xs-push-3{position:relative;left:12.5%}.custom-theme .el-col-xs-4{width:16.66667%}.custom-theme .el-col-xs-offset-4{margin-left:16.66667%}.custom-theme .el-col-xs-pull-4{position:relative;right:16.66667%}.custom-theme .el-col-xs-push-4{position:relative;left:16.66667%}.custom-theme .el-col-xs-5{width:20.83333%}.custom-theme .el-col-xs-offset-5{margin-left:20.83333%}.custom-theme .el-col-xs-pull-5{position:relative;right:20.83333%}.custom-theme .el-col-xs-push-5{position:relative;left:20.83333%}.custom-theme .el-col-xs-6{width:25%}.custom-theme .el-col-xs-offset-6{margin-left:25%}.custom-theme .el-col-xs-pull-6{position:relative;right:25%}.custom-theme .el-col-xs-push-6{position:relative;left:25%}.custom-theme .el-col-xs-7{width:29.16667%}.custom-theme .el-col-xs-offset-7{margin-left:29.16667%}.custom-theme .el-col-xs-pull-7{position:relative;right:29.16667%}.custom-theme .el-col-xs-push-7{position:relative;left:29.16667%}.custom-theme .el-col-xs-8{width:33.33333%}.custom-theme .el-col-xs-offset-8{margin-left:33.33333%}.custom-theme .el-col-xs-pull-8{position:relative;right:33.33333%}.custom-theme .el-col-xs-push-8{position:relative;left:33.33333%}.custom-theme .el-col-xs-9{width:37.5%}.custom-theme .el-col-xs-offset-9{margin-left:37.5%}.custom-theme .el-col-xs-pull-9{position:relative;right:37.5%}.custom-theme .el-col-xs-push-9{position:relative;left:37.5%}.custom-theme .el-col-xs-10{width:41.66667%}.custom-theme .el-col-xs-offset-10{margin-left:41.66667%}.custom-theme .el-col-xs-pull-10{position:relative;right:41.66667%}.custom-theme .el-col-xs-push-10{position:relative;left:41.66667%}.custom-theme .el-col-xs-11{width:45.83333%}.custom-theme .el-col-xs-offset-11{margin-left:45.83333%}.custom-theme .el-col-xs-pull-11{position:relative;right:45.83333%}.custom-theme .el-col-xs-push-11{position:relative;left:45.83333%}.custom-theme .el-col-xs-12{width:50%}.custom-theme .el-col-xs-offset-12{margin-left:50%}.custom-theme .el-col-xs-pull-12{position:relative;right:50%}.custom-theme .el-col-xs-push-12{position:relative;left:50%}.custom-theme .el-col-xs-13{width:54.16667%}.custom-theme .el-col-xs-offset-13{margin-left:54.16667%}.custom-theme .el-col-xs-pull-13{position:relative;right:54.16667%}.custom-theme .el-col-xs-push-13{position:relative;left:54.16667%}.custom-theme .el-col-xs-14{width:58.33333%}.custom-theme .el-col-xs-offset-14{margin-left:58.33333%}.custom-theme .el-col-xs-pull-14{position:relative;right:58.33333%}.custom-theme .el-col-xs-push-14{position:relative;left:58.33333%}.custom-theme .el-col-xs-15{width:62.5%}.custom-theme .el-col-xs-offset-15{margin-left:62.5%}.custom-theme .el-col-xs-pull-15{position:relative;right:62.5%}.custom-theme .el-col-xs-push-15{position:relative;left:62.5%}.custom-theme .el-col-xs-16{width:66.66667%}.custom-theme .el-col-xs-offset-16{margin-left:66.66667%}.custom-theme .el-col-xs-pull-16{position:relative;right:66.66667%}.custom-theme .el-col-xs-push-16{position:relative;left:66.66667%}.custom-theme .el-col-xs-17{width:70.83333%}.custom-theme .el-col-xs-offset-17{margin-left:70.83333%}.custom-theme .el-col-xs-pull-17{position:relative;right:70.83333%}.custom-theme .el-col-xs-push-17{position:relative;left:70.83333%}.custom-theme .el-col-xs-18{width:75%}.custom-theme .el-col-xs-offset-18{margin-left:75%}.custom-theme .el-col-xs-pull-18{position:relative;right:75%}.custom-theme .el-col-xs-push-18{position:relative;left:75%}.custom-theme .el-col-xs-19{width:79.16667%}.custom-theme .el-col-xs-offset-19{margin-left:79.16667%}.custom-theme .el-col-xs-pull-19{position:relative;right:79.16667%}.custom-theme .el-col-xs-push-19{position:relative;left:79.16667%}.custom-theme .el-col-xs-20{width:83.33333%}.custom-theme .el-col-xs-offset-20{margin-left:83.33333%}.custom-theme .el-col-xs-pull-20{position:relative;right:83.33333%}.custom-theme .el-col-xs-push-20{position:relative;left:83.33333%}.custom-theme .el-col-xs-21{width:87.5%}.custom-theme .el-col-xs-offset-21{margin-left:87.5%}.custom-theme .el-col-xs-pull-21{position:relative;right:87.5%}.custom-theme .el-col-xs-push-21{position:relative;left:87.5%}.custom-theme .el-col-xs-22{width:91.66667%}.custom-theme .el-col-xs-offset-22{margin-left:91.66667%}.custom-theme .el-col-xs-pull-22{position:relative;right:91.66667%}.custom-theme .el-col-xs-push-22{position:relative;left:91.66667%}.custom-theme .el-col-xs-23{width:95.83333%}.custom-theme .el-col-xs-offset-23{margin-left:95.83333%}.custom-theme .el-col-xs-pull-23{position:relative;right:95.83333%}.custom-theme .el-col-xs-push-23{position:relative;left:95.83333%}.custom-theme .el-col-xs-24{width:100%}.custom-theme .el-col-xs-offset-24{margin-left:100%}.custom-theme .el-col-xs-pull-24{position:relative;right:100%}.custom-theme .el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.custom-theme .el-col-sm-0{display:none}.custom-theme .el-col-sm-1{width:4.16667%}.custom-theme .el-col-sm-offset-1{margin-left:4.16667%}.custom-theme .el-col-sm-pull-1{position:relative;right:4.16667%}.custom-theme .el-col-sm-push-1{position:relative;left:4.16667%}.custom-theme .el-col-sm-2{width:8.33333%}.custom-theme .el-col-sm-offset-2{margin-left:8.33333%}.custom-theme .el-col-sm-pull-2{position:relative;right:8.33333%}.custom-theme .el-col-sm-push-2{position:relative;left:8.33333%}.custom-theme .el-col-sm-3{width:12.5%}.custom-theme .el-col-sm-offset-3{margin-left:12.5%}.custom-theme .el-col-sm-pull-3{position:relative;right:12.5%}.custom-theme .el-col-sm-push-3{position:relative;left:12.5%}.custom-theme .el-col-sm-4{width:16.66667%}.custom-theme .el-col-sm-offset-4{margin-left:16.66667%}.custom-theme .el-col-sm-pull-4{position:relative;right:16.66667%}.custom-theme .el-col-sm-push-4{position:relative;left:16.66667%}.custom-theme .el-col-sm-5{width:20.83333%}.custom-theme .el-col-sm-offset-5{margin-left:20.83333%}.custom-theme .el-col-sm-pull-5{position:relative;right:20.83333%}.custom-theme .el-col-sm-push-5{position:relative;left:20.83333%}.custom-theme .el-col-sm-6{width:25%}.custom-theme .el-col-sm-offset-6{margin-left:25%}.custom-theme .el-col-sm-pull-6{position:relative;right:25%}.custom-theme .el-col-sm-push-6{position:relative;left:25%}.custom-theme .el-col-sm-7{width:29.16667%}.custom-theme .el-col-sm-offset-7{margin-left:29.16667%}.custom-theme .el-col-sm-pull-7{position:relative;right:29.16667%}.custom-theme .el-col-sm-push-7{position:relative;left:29.16667%}.custom-theme .el-col-sm-8{width:33.33333%}.custom-theme .el-col-sm-offset-8{margin-left:33.33333%}.custom-theme .el-col-sm-pull-8{position:relative;right:33.33333%}.custom-theme .el-col-sm-push-8{position:relative;left:33.33333%}.custom-theme .el-col-sm-9{width:37.5%}.custom-theme .el-col-sm-offset-9{margin-left:37.5%}.custom-theme .el-col-sm-pull-9{position:relative;right:37.5%}.custom-theme .el-col-sm-push-9{position:relative;left:37.5%}.custom-theme .el-col-sm-10{width:41.66667%}.custom-theme .el-col-sm-offset-10{margin-left:41.66667%}.custom-theme .el-col-sm-pull-10{position:relative;right:41.66667%}.custom-theme .el-col-sm-push-10{position:relative;left:41.66667%}.custom-theme .el-col-sm-11{width:45.83333%}.custom-theme .el-col-sm-offset-11{margin-left:45.83333%}.custom-theme .el-col-sm-pull-11{position:relative;right:45.83333%}.custom-theme .el-col-sm-push-11{position:relative;left:45.83333%}.custom-theme .el-col-sm-12{width:50%}.custom-theme .el-col-sm-offset-12{margin-left:50%}.custom-theme .el-col-sm-pull-12{position:relative;right:50%}.custom-theme .el-col-sm-push-12{position:relative;left:50%}.custom-theme .el-col-sm-13{width:54.16667%}.custom-theme .el-col-sm-offset-13{margin-left:54.16667%}.custom-theme .el-col-sm-pull-13{position:relative;right:54.16667%}.custom-theme .el-col-sm-push-13{position:relative;left:54.16667%}.custom-theme .el-col-sm-14{width:58.33333%}.custom-theme .el-col-sm-offset-14{margin-left:58.33333%}.custom-theme .el-col-sm-pull-14{position:relative;right:58.33333%}.custom-theme .el-col-sm-push-14{position:relative;left:58.33333%}.custom-theme .el-col-sm-15{width:62.5%}.custom-theme .el-col-sm-offset-15{margin-left:62.5%}.custom-theme .el-col-sm-pull-15{position:relative;right:62.5%}.custom-theme .el-col-sm-push-15{position:relative;left:62.5%}.custom-theme .el-col-sm-16{width:66.66667%}.custom-theme .el-col-sm-offset-16{margin-left:66.66667%}.custom-theme .el-col-sm-pull-16{position:relative;right:66.66667%}.custom-theme .el-col-sm-push-16{position:relative;left:66.66667%}.custom-theme .el-col-sm-17{width:70.83333%}.custom-theme .el-col-sm-offset-17{margin-left:70.83333%}.custom-theme .el-col-sm-pull-17{position:relative;right:70.83333%}.custom-theme .el-col-sm-push-17{position:relative;left:70.83333%}.custom-theme .el-col-sm-18{width:75%}.custom-theme .el-col-sm-offset-18{margin-left:75%}.custom-theme .el-col-sm-pull-18{position:relative;right:75%}.custom-theme .el-col-sm-push-18{position:relative;left:75%}.custom-theme .el-col-sm-19{width:79.16667%}.custom-theme .el-col-sm-offset-19{margin-left:79.16667%}.custom-theme .el-col-sm-pull-19{position:relative;right:79.16667%}.custom-theme .el-col-sm-push-19{position:relative;left:79.16667%}.custom-theme .el-col-sm-20{width:83.33333%}.custom-theme .el-col-sm-offset-20{margin-left:83.33333%}.custom-theme .el-col-sm-pull-20{position:relative;right:83.33333%}.custom-theme .el-col-sm-push-20{position:relative;left:83.33333%}.custom-theme .el-col-sm-21{width:87.5%}.custom-theme .el-col-sm-offset-21{margin-left:87.5%}.custom-theme .el-col-sm-pull-21{position:relative;right:87.5%}.custom-theme .el-col-sm-push-21{position:relative;left:87.5%}.custom-theme .el-col-sm-22{width:91.66667%}.custom-theme .el-col-sm-offset-22{margin-left:91.66667%}.custom-theme .el-col-sm-pull-22{position:relative;right:91.66667%}.custom-theme .el-col-sm-push-22{position:relative;left:91.66667%}.custom-theme .el-col-sm-23{width:95.83333%}.custom-theme .el-col-sm-offset-23{margin-left:95.83333%}.custom-theme .el-col-sm-pull-23{position:relative;right:95.83333%}.custom-theme .el-col-sm-push-23{position:relative;left:95.83333%}.custom-theme .el-col-sm-24{width:100%}.custom-theme .el-col-sm-offset-24{margin-left:100%}.custom-theme .el-col-sm-pull-24{position:relative;right:100%}.custom-theme .el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.custom-theme .el-col-md-0{display:none}.custom-theme .el-col-md-1{width:4.16667%}.custom-theme .el-col-md-offset-1{margin-left:4.16667%}.custom-theme .el-col-md-pull-1{position:relative;right:4.16667%}.custom-theme .el-col-md-push-1{position:relative;left:4.16667%}.custom-theme .el-col-md-2{width:8.33333%}.custom-theme .el-col-md-offset-2{margin-left:8.33333%}.custom-theme .el-col-md-pull-2{position:relative;right:8.33333%}.custom-theme .el-col-md-push-2{position:relative;left:8.33333%}.custom-theme .el-col-md-3{width:12.5%}.custom-theme .el-col-md-offset-3{margin-left:12.5%}.custom-theme .el-col-md-pull-3{position:relative;right:12.5%}.custom-theme .el-col-md-push-3{position:relative;left:12.5%}.custom-theme .el-col-md-4{width:16.66667%}.custom-theme .el-col-md-offset-4{margin-left:16.66667%}.custom-theme .el-col-md-pull-4{position:relative;right:16.66667%}.custom-theme .el-col-md-push-4{position:relative;left:16.66667%}.custom-theme .el-col-md-5{width:20.83333%}.custom-theme .el-col-md-offset-5{margin-left:20.83333%}.custom-theme .el-col-md-pull-5{position:relative;right:20.83333%}.custom-theme .el-col-md-push-5{position:relative;left:20.83333%}.custom-theme .el-col-md-6{width:25%}.custom-theme .el-col-md-offset-6{margin-left:25%}.custom-theme .el-col-md-pull-6{position:relative;right:25%}.custom-theme .el-col-md-push-6{position:relative;left:25%}.custom-theme .el-col-md-7{width:29.16667%}.custom-theme .el-col-md-offset-7{margin-left:29.16667%}.custom-theme .el-col-md-pull-7{position:relative;right:29.16667%}.custom-theme .el-col-md-push-7{position:relative;left:29.16667%}.custom-theme .el-col-md-8{width:33.33333%}.custom-theme .el-col-md-offset-8{margin-left:33.33333%}.custom-theme .el-col-md-pull-8{position:relative;right:33.33333%}.custom-theme .el-col-md-push-8{position:relative;left:33.33333%}.custom-theme .el-col-md-9{width:37.5%}.custom-theme .el-col-md-offset-9{margin-left:37.5%}.custom-theme .el-col-md-pull-9{position:relative;right:37.5%}.custom-theme .el-col-md-push-9{position:relative;left:37.5%}.custom-theme .el-col-md-10{width:41.66667%}.custom-theme .el-col-md-offset-10{margin-left:41.66667%}.custom-theme .el-col-md-pull-10{position:relative;right:41.66667%}.custom-theme .el-col-md-push-10{position:relative;left:41.66667%}.custom-theme .el-col-md-11{width:45.83333%}.custom-theme .el-col-md-offset-11{margin-left:45.83333%}.custom-theme .el-col-md-pull-11{position:relative;right:45.83333%}.custom-theme .el-col-md-push-11{position:relative;left:45.83333%}.custom-theme .el-col-md-12{width:50%}.custom-theme .el-col-md-offset-12{margin-left:50%}.custom-theme .el-col-md-pull-12{position:relative;right:50%}.custom-theme .el-col-md-push-12{position:relative;left:50%}.custom-theme .el-col-md-13{width:54.16667%}.custom-theme .el-col-md-offset-13{margin-left:54.16667%}.custom-theme .el-col-md-pull-13{position:relative;right:54.16667%}.custom-theme .el-col-md-push-13{position:relative;left:54.16667%}.custom-theme .el-col-md-14{width:58.33333%}.custom-theme .el-col-md-offset-14{margin-left:58.33333%}.custom-theme .el-col-md-pull-14{position:relative;right:58.33333%}.custom-theme .el-col-md-push-14{position:relative;left:58.33333%}.custom-theme .el-col-md-15{width:62.5%}.custom-theme .el-col-md-offset-15{margin-left:62.5%}.custom-theme .el-col-md-pull-15{position:relative;right:62.5%}.custom-theme .el-col-md-push-15{position:relative;left:62.5%}.custom-theme .el-col-md-16{width:66.66667%}.custom-theme .el-col-md-offset-16{margin-left:66.66667%}.custom-theme .el-col-md-pull-16{position:relative;right:66.66667%}.custom-theme .el-col-md-push-16{position:relative;left:66.66667%}.custom-theme .el-col-md-17{width:70.83333%}.custom-theme .el-col-md-offset-17{margin-left:70.83333%}.custom-theme .el-col-md-pull-17{position:relative;right:70.83333%}.custom-theme .el-col-md-push-17{position:relative;left:70.83333%}.custom-theme .el-col-md-18{width:75%}.custom-theme .el-col-md-offset-18{margin-left:75%}.custom-theme .el-col-md-pull-18{position:relative;right:75%}.custom-theme .el-col-md-push-18{position:relative;left:75%}.custom-theme .el-col-md-19{width:79.16667%}.custom-theme .el-col-md-offset-19{margin-left:79.16667%}.custom-theme .el-col-md-pull-19{position:relative;right:79.16667%}.custom-theme .el-col-md-push-19{position:relative;left:79.16667%}.custom-theme .el-col-md-20{width:83.33333%}.custom-theme .el-col-md-offset-20{margin-left:83.33333%}.custom-theme .el-col-md-pull-20{position:relative;right:83.33333%}.custom-theme .el-col-md-push-20{position:relative;left:83.33333%}.custom-theme .el-col-md-21{width:87.5%}.custom-theme .el-col-md-offset-21{margin-left:87.5%}.custom-theme .el-col-md-pull-21{position:relative;right:87.5%}.custom-theme .el-col-md-push-21{position:relative;left:87.5%}.custom-theme .el-col-md-22{width:91.66667%}.custom-theme .el-col-md-offset-22{margin-left:91.66667%}.custom-theme .el-col-md-pull-22{position:relative;right:91.66667%}.custom-theme .el-col-md-push-22{position:relative;left:91.66667%}.custom-theme .el-col-md-23{width:95.83333%}.custom-theme .el-col-md-offset-23{margin-left:95.83333%}.custom-theme .el-col-md-pull-23{position:relative;right:95.83333%}.custom-theme .el-col-md-push-23{position:relative;left:95.83333%}.custom-theme .el-col-md-24{width:100%}.custom-theme .el-col-md-offset-24{margin-left:100%}.custom-theme .el-col-md-pull-24{position:relative;right:100%}.custom-theme .el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.custom-theme .el-col-lg-0{display:none}.custom-theme .el-col-lg-1{width:4.16667%}.custom-theme .el-col-lg-offset-1{margin-left:4.16667%}.custom-theme .el-col-lg-pull-1{position:relative;right:4.16667%}.custom-theme .el-col-lg-push-1{position:relative;left:4.16667%}.custom-theme .el-col-lg-2{width:8.33333%}.custom-theme .el-col-lg-offset-2{margin-left:8.33333%}.custom-theme .el-col-lg-pull-2{position:relative;right:8.33333%}.custom-theme .el-col-lg-push-2{position:relative;left:8.33333%}.custom-theme .el-col-lg-3{width:12.5%}.custom-theme .el-col-lg-offset-3{margin-left:12.5%}.custom-theme .el-col-lg-pull-3{position:relative;right:12.5%}.custom-theme .el-col-lg-push-3{position:relative;left:12.5%}.custom-theme .el-col-lg-4{width:16.66667%}.custom-theme .el-col-lg-offset-4{margin-left:16.66667%}.custom-theme .el-col-lg-pull-4{position:relative;right:16.66667%}.custom-theme .el-col-lg-push-4{position:relative;left:16.66667%}.custom-theme .el-col-lg-5{width:20.83333%}.custom-theme .el-col-lg-offset-5{margin-left:20.83333%}.custom-theme .el-col-lg-pull-5{position:relative;right:20.83333%}.custom-theme .el-col-lg-push-5{position:relative;left:20.83333%}.custom-theme .el-col-lg-6{width:25%}.custom-theme .el-col-lg-offset-6{margin-left:25%}.custom-theme .el-col-lg-pull-6{position:relative;right:25%}.custom-theme .el-col-lg-push-6{position:relative;left:25%}.custom-theme .el-col-lg-7{width:29.16667%}.custom-theme .el-col-lg-offset-7{margin-left:29.16667%}.custom-theme .el-col-lg-pull-7{position:relative;right:29.16667%}.custom-theme .el-col-lg-push-7{position:relative;left:29.16667%}.custom-theme .el-col-lg-8{width:33.33333%}.custom-theme .el-col-lg-offset-8{margin-left:33.33333%}.custom-theme .el-col-lg-pull-8{position:relative;right:33.33333%}.custom-theme .el-col-lg-push-8{position:relative;left:33.33333%}.custom-theme .el-col-lg-9{width:37.5%}.custom-theme .el-col-lg-offset-9{margin-left:37.5%}.custom-theme .el-col-lg-pull-9{position:relative;right:37.5%}.custom-theme .el-col-lg-push-9{position:relative;left:37.5%}.custom-theme .el-col-lg-10{width:41.66667%}.custom-theme .el-col-lg-offset-10{margin-left:41.66667%}.custom-theme .el-col-lg-pull-10{position:relative;right:41.66667%}.custom-theme .el-col-lg-push-10{position:relative;left:41.66667%}.custom-theme .el-col-lg-11{width:45.83333%}.custom-theme .el-col-lg-offset-11{margin-left:45.83333%}.custom-theme .el-col-lg-pull-11{position:relative;right:45.83333%}.custom-theme .el-col-lg-push-11{position:relative;left:45.83333%}.custom-theme .el-col-lg-12{width:50%}.custom-theme .el-col-lg-offset-12{margin-left:50%}.custom-theme .el-col-lg-pull-12{position:relative;right:50%}.custom-theme .el-col-lg-push-12{position:relative;left:50%}.custom-theme .el-col-lg-13{width:54.16667%}.custom-theme .el-col-lg-offset-13{margin-left:54.16667%}.custom-theme .el-col-lg-pull-13{position:relative;right:54.16667%}.custom-theme .el-col-lg-push-13{position:relative;left:54.16667%}.custom-theme .el-col-lg-14{width:58.33333%}.custom-theme .el-col-lg-offset-14{margin-left:58.33333%}.custom-theme .el-col-lg-pull-14{position:relative;right:58.33333%}.custom-theme .el-col-lg-push-14{position:relative;left:58.33333%}.custom-theme .el-col-lg-15{width:62.5%}.custom-theme .el-col-lg-offset-15{margin-left:62.5%}.custom-theme .el-col-lg-pull-15{position:relative;right:62.5%}.custom-theme .el-col-lg-push-15{position:relative;left:62.5%}.custom-theme .el-col-lg-16{width:66.66667%}.custom-theme .el-col-lg-offset-16{margin-left:66.66667%}.custom-theme .el-col-lg-pull-16{position:relative;right:66.66667%}.custom-theme .el-col-lg-push-16{position:relative;left:66.66667%}.custom-theme .el-col-lg-17{width:70.83333%}.custom-theme .el-col-lg-offset-17{margin-left:70.83333%}.custom-theme .el-col-lg-pull-17{position:relative;right:70.83333%}.custom-theme .el-col-lg-push-17{position:relative;left:70.83333%}.custom-theme .el-col-lg-18{width:75%}.custom-theme .el-col-lg-offset-18{margin-left:75%}.custom-theme .el-col-lg-pull-18{position:relative;right:75%}.custom-theme .el-col-lg-push-18{position:relative;left:75%}.custom-theme .el-col-lg-19{width:79.16667%}.custom-theme .el-col-lg-offset-19{margin-left:79.16667%}.custom-theme .el-col-lg-pull-19{position:relative;right:79.16667%}.custom-theme .el-col-lg-push-19{position:relative;left:79.16667%}.custom-theme .el-col-lg-20{width:83.33333%}.custom-theme .el-col-lg-offset-20{margin-left:83.33333%}.custom-theme .el-col-lg-pull-20{position:relative;right:83.33333%}.custom-theme .el-col-lg-push-20{position:relative;left:83.33333%}.custom-theme .el-col-lg-21{width:87.5%}.custom-theme .el-col-lg-offset-21{margin-left:87.5%}.custom-theme .el-col-lg-pull-21{position:relative;right:87.5%}.custom-theme .el-col-lg-push-21{position:relative;left:87.5%}.custom-theme .el-col-lg-22{width:91.66667%}.custom-theme .el-col-lg-offset-22{margin-left:91.66667%}.custom-theme .el-col-lg-pull-22{position:relative;right:91.66667%}.custom-theme .el-col-lg-push-22{position:relative;left:91.66667%}.custom-theme .el-col-lg-23{width:95.83333%}.custom-theme .el-col-lg-offset-23{margin-left:95.83333%}.custom-theme .el-col-lg-pull-23{position:relative;right:95.83333%}.custom-theme .el-col-lg-push-23{position:relative;left:95.83333%}.custom-theme .el-col-lg-24{width:100%}.custom-theme .el-col-lg-offset-24{margin-left:100%}.custom-theme .el-col-lg-pull-24{position:relative;right:100%}.custom-theme .el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.custom-theme .el-col-xl-0{display:none}.custom-theme .el-col-xl-1{width:4.16667%}.custom-theme .el-col-xl-offset-1{margin-left:4.16667%}.custom-theme .el-col-xl-pull-1{position:relative;right:4.16667%}.custom-theme .el-col-xl-push-1{position:relative;left:4.16667%}.custom-theme .el-col-xl-2{width:8.33333%}.custom-theme .el-col-xl-offset-2{margin-left:8.33333%}.custom-theme .el-col-xl-pull-2{position:relative;right:8.33333%}.custom-theme .el-col-xl-push-2{position:relative;left:8.33333%}.custom-theme .el-col-xl-3{width:12.5%}.custom-theme .el-col-xl-offset-3{margin-left:12.5%}.custom-theme .el-col-xl-pull-3{position:relative;right:12.5%}.custom-theme .el-col-xl-push-3{position:relative;left:12.5%}.custom-theme .el-col-xl-4{width:16.66667%}.custom-theme .el-col-xl-offset-4{margin-left:16.66667%}.custom-theme .el-col-xl-pull-4{position:relative;right:16.66667%}.custom-theme .el-col-xl-push-4{position:relative;left:16.66667%}.custom-theme .el-col-xl-5{width:20.83333%}.custom-theme .el-col-xl-offset-5{margin-left:20.83333%}.custom-theme .el-col-xl-pull-5{position:relative;right:20.83333%}.custom-theme .el-col-xl-push-5{position:relative;left:20.83333%}.custom-theme .el-col-xl-6{width:25%}.custom-theme .el-col-xl-offset-6{margin-left:25%}.custom-theme .el-col-xl-pull-6{position:relative;right:25%}.custom-theme .el-col-xl-push-6{position:relative;left:25%}.custom-theme .el-col-xl-7{width:29.16667%}.custom-theme .el-col-xl-offset-7{margin-left:29.16667%}.custom-theme .el-col-xl-pull-7{position:relative;right:29.16667%}.custom-theme .el-col-xl-push-7{position:relative;left:29.16667%}.custom-theme .el-col-xl-8{width:33.33333%}.custom-theme .el-col-xl-offset-8{margin-left:33.33333%}.custom-theme .el-col-xl-pull-8{position:relative;right:33.33333%}.custom-theme .el-col-xl-push-8{position:relative;left:33.33333%}.custom-theme .el-col-xl-9{width:37.5%}.custom-theme .el-col-xl-offset-9{margin-left:37.5%}.custom-theme .el-col-xl-pull-9{position:relative;right:37.5%}.custom-theme .el-col-xl-push-9{position:relative;left:37.5%}.custom-theme .el-col-xl-10{width:41.66667%}.custom-theme .el-col-xl-offset-10{margin-left:41.66667%}.custom-theme .el-col-xl-pull-10{position:relative;right:41.66667%}.custom-theme .el-col-xl-push-10{position:relative;left:41.66667%}.custom-theme .el-col-xl-11{width:45.83333%}.custom-theme .el-col-xl-offset-11{margin-left:45.83333%}.custom-theme .el-col-xl-pull-11{position:relative;right:45.83333%}.custom-theme .el-col-xl-push-11{position:relative;left:45.83333%}.custom-theme .el-col-xl-12{width:50%}.custom-theme .el-col-xl-offset-12{margin-left:50%}.custom-theme .el-col-xl-pull-12{position:relative;right:50%}.custom-theme .el-col-xl-push-12{position:relative;left:50%}.custom-theme .el-col-xl-13{width:54.16667%}.custom-theme .el-col-xl-offset-13{margin-left:54.16667%}.custom-theme .el-col-xl-pull-13{position:relative;right:54.16667%}.custom-theme .el-col-xl-push-13{position:relative;left:54.16667%}.custom-theme .el-col-xl-14{width:58.33333%}.custom-theme .el-col-xl-offset-14{margin-left:58.33333%}.custom-theme .el-col-xl-pull-14{position:relative;right:58.33333%}.custom-theme .el-col-xl-push-14{position:relative;left:58.33333%}.custom-theme .el-col-xl-15{width:62.5%}.custom-theme .el-col-xl-offset-15{margin-left:62.5%}.custom-theme .el-col-xl-pull-15{position:relative;right:62.5%}.custom-theme .el-col-xl-push-15{position:relative;left:62.5%}.custom-theme .el-col-xl-16{width:66.66667%}.custom-theme .el-col-xl-offset-16{margin-left:66.66667%}.custom-theme .el-col-xl-pull-16{position:relative;right:66.66667%}.custom-theme .el-col-xl-push-16{position:relative;left:66.66667%}.custom-theme .el-col-xl-17{width:70.83333%}.custom-theme .el-col-xl-offset-17{margin-left:70.83333%}.custom-theme .el-col-xl-pull-17{position:relative;right:70.83333%}.custom-theme .el-col-xl-push-17{position:relative;left:70.83333%}.custom-theme .el-col-xl-18{width:75%}.custom-theme .el-col-xl-offset-18{margin-left:75%}.custom-theme .el-col-xl-pull-18{position:relative;right:75%}.custom-theme .el-col-xl-push-18{position:relative;left:75%}.custom-theme .el-col-xl-19{width:79.16667%}.custom-theme .el-col-xl-offset-19{margin-left:79.16667%}.custom-theme .el-col-xl-pull-19{position:relative;right:79.16667%}.custom-theme .el-col-xl-push-19{position:relative;left:79.16667%}.custom-theme .el-col-xl-20{width:83.33333%}.custom-theme .el-col-xl-offset-20{margin-left:83.33333%}.custom-theme .el-col-xl-pull-20{position:relative;right:83.33333%}.custom-theme .el-col-xl-push-20{position:relative;left:83.33333%}.custom-theme .el-col-xl-21{width:87.5%}.custom-theme .el-col-xl-offset-21{margin-left:87.5%}.custom-theme .el-col-xl-pull-21{position:relative;right:87.5%}.custom-theme .el-col-xl-push-21{position:relative;left:87.5%}.custom-theme .el-col-xl-22{width:91.66667%}.custom-theme .el-col-xl-offset-22{margin-left:91.66667%}.custom-theme .el-col-xl-pull-22{position:relative;right:91.66667%}.custom-theme .el-col-xl-push-22{position:relative;left:91.66667%}.custom-theme .el-col-xl-23{width:95.83333%}.custom-theme .el-col-xl-offset-23{margin-left:95.83333%}.custom-theme .el-col-xl-pull-23{position:relative;right:95.83333%}.custom-theme .el-col-xl-push-23{position:relative;left:95.83333%}.custom-theme .el-col-xl-24{width:100%}.custom-theme .el-col-xl-offset-24{margin-left:100%}.custom-theme .el-col-xl-pull-24{position:relative;right:100%}.custom-theme .el-col-xl-push-24{position:relative;left:100%}}.custom-theme .el-progress{position:relative;line-height:1}.custom-theme .el-progress__text{font-size:14px;color:#5a5e66;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.custom-theme .el-progress__text i{vertical-align:middle;display:block}.custom-theme .el-progress--circle{display:inline-block}.custom-theme .el-progress--circle .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%)}.custom-theme .el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.custom-theme .el-progress--without-text .el-progress__text{display:none}.custom-theme .el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.custom-theme .el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.custom-theme .el-progress.is-success .el-progress-bar__inner{background-color:#409167}.custom-theme .el-progress.is-success .el-progress__text{color:#409167}.custom-theme .el-progress.is-exception .el-progress-bar__inner{background-color:#b3450e}.custom-theme .el-progress.is-exception .el-progress__text{color:#b3450e}.custom-theme .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}.custom-theme .el-progress-bar__outer{height:6px;border-radius:100px;background-color:#e6ebf5;overflow:hidden;position:relative;vertical-align:middle}.custom-theme .el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#262729;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.custom-theme .el-progress-bar__inner::after{display:inline-block;content:"";height:100%;vertical-align:middle}.custom-theme .el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;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}}.custom-theme .el-upload{display:inline-block;text-align:center;cursor:pointer}.custom-theme .el-upload__input{display:none}.custom-theme .el-upload__tip{font-size:12px;color:#5a5e66;margin-top:7px}.custom-theme .el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.custom-theme .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}.custom-theme .el-upload--picture-card i{font-size:28px;color:#8c939d}.custom-theme .el-upload--picture-card:hover{border-color:#262729;color:#262729}.custom-theme .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}.custom-theme .el-upload-dragger .el-icon-upload{font-size:67px;color:#b4bccc;margin:40px 0 16px;line-height:50px}.custom-theme .el-upload-dragger+.el-upload__tip{text-align:center}.custom-theme .el-upload-dragger~.el-upload__files{border-top:1px solid #d8dce5;margin-top:7px;padding-top:5px}.custom-theme .el-upload-dragger .el-upload__text{color:#5a5e66;font-size:14px;text-align:center}.custom-theme .el-upload-dragger .el-upload__text em{color:#262729;font-style:normal}.custom-theme .el-upload-dragger:hover{border-color:#262729}.custom-theme .el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #262729}.custom-theme .el-upload-list{margin:0;padding:0;list-style:none}.custom-theme .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:#5a5e66;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.custom-theme .el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.custom-theme .el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.custom-theme .el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.custom-theme .el-upload-list__item:first-child{margin-top:10px}.custom-theme .el-upload-list__item .el-icon-upload-success{color:#409167}.custom-theme .el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#5a5e66}.custom-theme .el-upload-list__item .el-icon-close:hover{opacity:1}.custom-theme .el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:0;cursor:pointer;opacity:1;color:#262729;-webkit-transform:translate(15%,0);transform:translate(15%,0)}.custom-theme .el-upload-list__item:hover{background-color:#f5f7fa}.custom-theme .el-upload-list__item:hover .el-icon-close{display:inline-block}.custom-theme .el-upload-list__item:hover .el-progress__text{display:none}.custom-theme .el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.custom-theme .el-upload-list__item.is-success .el-upload-list__item-name:focus,.custom-theme .el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#262729;cursor:pointer}.custom-theme .el-upload-list__item.is-success:focus .el-icon-close-tip{display:inline-block}.custom-theme .el-upload-list__item.is-success:active,.custom-theme .el-upload-list__item.is-success:focus:not(.focusing){outline-width:0}.custom-theme .el-upload-list__item.is-success:active .el-icon-close-tip,.custom-theme .el-upload-list__item.is-success:focus:not(.focusing) .el-icon-close-tip{display:none}.custom-theme .el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.custom-theme .el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none}.custom-theme .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.custom-theme .el-upload-list__item-name{color:#5a5e66;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.custom-theme .el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#878d99;line-height:inherit}.custom-theme .el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.custom-theme .el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#5a5e66;display:none}.custom-theme .el-upload-list__item-delete:hover{color:#262729}.custom-theme .el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.custom-theme .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}.custom-theme .el-upload-list--picture-card .el-upload-list__item .el-icon-check,.custom-theme .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.custom-theme .el-upload-list--picture-card .el-upload-list__item .el-icon-close{display:none}.custom-theme .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.custom-theme .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.custom-theme .el-upload-list--picture-card .el-upload-list__item-name{display:none}.custom-theme .el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.custom-theme .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)}.custom-theme .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)}.custom-theme .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}.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:"";height:100%;vertical-align:middle}.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.custom-theme .el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.custom-theme .el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.custom-theme .el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.custom-theme .el-upload-list--picture .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;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.custom-theme .el-upload-list--picture .el-upload-list__item .el-icon-check,.custom-theme .el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.custom-theme .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}.custom-theme .el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.custom-theme .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.custom-theme .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.custom-theme .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}.custom-theme .el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.custom-theme .el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.custom-theme .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}.custom-theme .el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.custom-theme .el-upload-list--picture .el-progress{position:relative;top:-7px}.custom-theme .el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.custom-theme .el-upload-cover::after{display:inline-block;content:"";height:100%;vertical-align:middle}.custom-theme .el-upload-cover img{display:block;width:100%;height:100%}.custom-theme .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)}.custom-theme .el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.custom-theme .el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.custom-theme .el-upload-cover__progress+.el-upload__inner{opacity:0}.custom-theme .el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.custom-theme .el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.custom-theme .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) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s,-webkit-transform .3s cubic-bezier(.23,1,.32,1) .1s;margin-top:60px}.custom-theme .el-upload-cover__interact .btn i{margin-top:0}.custom-theme .el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.custom-theme .el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.custom-theme .el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.custom-theme .el-upload-cover__interact .btn:hover span{opacity:1}.custom-theme .el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.custom-theme .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:#2d2f33}.custom-theme .el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.custom-theme .el-progress{position:relative;line-height:1}.custom-theme .el-progress__text{font-size:14px;color:#5a5e66;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.custom-theme .el-progress__text i{vertical-align:middle;display:block}.custom-theme .el-progress--circle{display:inline-block}.custom-theme .el-progress--circle .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%)}.custom-theme .el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.custom-theme .el-progress--without-text .el-progress__text{display:none}.custom-theme .el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.custom-theme .el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.custom-theme .el-progress.is-success .el-progress-bar__inner{background-color:#409167}.custom-theme .el-progress.is-success .el-progress__text{color:#409167}.custom-theme .el-progress.is-exception .el-progress-bar__inner{background-color:#b3450e}.custom-theme .el-progress.is-exception .el-progress__text{color:#b3450e}.custom-theme .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}.custom-theme .el-progress-bar__outer{height:6px;border-radius:100px;background-color:#e6ebf5;overflow:hidden;position:relative;vertical-align:middle}.custom-theme .el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#262729;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.custom-theme .el-progress-bar__inner::after{display:inline-block;content:"";height:100%;vertical-align:middle}.custom-theme .el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.custom-theme .el-time-spinner{width:100%;white-space:nowrap}.custom-theme .el-spinner{display:inline-block;vertical-align:middle}.custom-theme .el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.custom-theme .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}}.custom-theme .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:#e6ebf5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .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}.custom-theme .el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.custom-theme .el-message p{margin:0}.custom-theme .el-message--info .el-message__content{color:#0a76a4}.custom-theme .el-message--success{background-color:#ecf4f0;border-color:#d9e9e1}.custom-theme .el-message--success .el-message__content{color:#409167}.custom-theme .el-message--warning{background-color:#f5f6e6;border-color:#ebedce}.custom-theme .el-message--warning .el-message__content{color:#9da408}.custom-theme .el-message--error{background-color:#f7ece7;border-color:#f0dacf}.custom-theme .el-message--error .el-message__content{color:#b3450e}.custom-theme .el-message__icon{margin-right:10px}.custom-theme .el-message__content{padding:0;font-size:14px;line-height:1}.custom-theme .el-message__content:focus{outline-width:0}.custom-theme .el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#b4bccc;font-size:16px}.custom-theme .el-message__closeBtn:focus{outline-width:0}.custom-theme .el-message__closeBtn:hover{color:#878d99}.custom-theme .el-message .el-icon-success{color:#409167}.custom-theme .el-message .el-icon-error{color:#b3450e}.custom-theme .el-message .el-icon-info{color:#0a76a4}.custom-theme .el-message .el-icon-warning{color:#9da408}.custom-theme .el-message-fade-enter,.custom-theme .el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.custom-theme .el-badge{position:relative;vertical-align:middle;display:inline-block}.custom-theme .el-badge__content{background-color:#b3450e;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}.custom-theme .el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.custom-theme .el-badge__content.is-fixed.is-dot{right:5px}.custom-theme .el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.custom-theme .el-card{border-radius:4px;border:1px solid #e6ebf5;background-color:#fff;overflow:hidden;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);color:#2d2f33}.custom-theme .el-card__header{padding:18px 20px;border-bottom:1px solid #e6ebf5;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-card__body{padding:20px}.custom-theme .el-rate{height:20px;line-height:1}.custom-theme .el-rate:active,.custom-theme .el-rate:focus{outline-width:0}.custom-theme .el-rate__item{display:inline-block;position:relative;font-size:0;vertical-align:middle}.custom-theme .el-rate__icon{position:relative;display:inline-block;font-size:18px;margin-right:6px;color:#b4bccc;-webkit-transition:.3s;transition:.3s}.custom-theme .el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.custom-theme .el-rate__icon .path2{position:absolute;left:0;top:0}.custom-theme .el-rate__decimal{position:absolute;top:0;left:0;display:inline-block;overflow:hidden}.custom-theme .el-rate__text{font-size:14px;vertical-align:middle}.custom-theme .el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.custom-theme .el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.custom-theme .el-steps--horizontal{white-space:nowrap}.custom-theme .el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.custom-theme .el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.custom-theme .el-step:last-of-type .el-step__line{display:none}.custom-theme .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}.custom-theme .el-step:last-of-type .el-step__description,.custom-theme .el-step:last-of-type .el-step__main{padding-right:0}.custom-theme .el-step__head{position:relative;width:100%}.custom-theme .el-step__head.is-process{color:#2d2f33;border-color:#2d2f33}.custom-theme .el-step__head.is-wait{color:#b4bccc;border-color:#b4bccc}.custom-theme .el-step__head.is-success{color:#409167;border-color:#409167}.custom-theme .el-step__head.is-error{color:#b3450e;border-color:#b3450e}.custom-theme .el-step__head.is-finish{color:#262729;border-color:#262729}.custom-theme .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}.custom-theme .el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.custom-theme .el-step__icon.is-icon{width:40px}.custom-theme .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:700;line-height:1;color:inherit}.custom-theme .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.custom-theme .el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.custom-theme .el-step__line{position:absolute;border-color:inherit;background-color:#b4bccc}.custom-theme .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}.custom-theme .el-step__main{white-space:normal;text-align:left}.custom-theme .el-step__title{font-size:16px;line-height:38px}.custom-theme .el-step__title.is-process{font-weight:700;color:#2d2f33}.custom-theme .el-step__title.is-wait{color:#b4bccc}.custom-theme .el-step__title.is-success{color:#409167}.custom-theme .el-step__title.is-error{color:#b3450e}.custom-theme .el-step__title.is-finish{color:#262729}.custom-theme .el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.custom-theme .el-step__description.is-process{color:#2d2f33}.custom-theme .el-step__description.is-wait{color:#b4bccc}.custom-theme .el-step__description.is-success{color:#409167}.custom-theme .el-step__description.is-error{color:#b3450e}.custom-theme .el-step__description.is-finish{color:#262729}.custom-theme .el-step.is-horizontal{display:inline-block}.custom-theme .el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.custom-theme .el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.custom-theme .el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.custom-theme .el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.custom-theme .el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.custom-theme .el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.custom-theme .el-step.is-vertical .el-step__icon.is-icon{width:24px}.custom-theme .el-step.is-center .el-step__head{text-align:center}.custom-theme .el-step.is-center .el-step__main{text-align:center}.custom-theme .el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.custom-theme .el-step.is-center .el-step__line{left:50%;right:-50%}.custom-theme .el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.custom-theme .el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.custom-theme .el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.custom-theme .el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.custom-theme .el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.custom-theme .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}.custom-theme .el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.custom-theme .el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.custom-theme .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}.custom-theme .el-step.is-simple .el-step__arrow::after,.custom-theme .el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#b4bccc}.custom-theme .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}.custom-theme .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%}.custom-theme .el-step.is-simple:last-of-type .el-step__arrow{display:none}.custom-theme .el-carousel{overflow-x:hidden;position:relative}.custom-theme .el-carousel__container{position:relative;height:300px}.custom-theme .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}.custom-theme .el-carousel__arrow--left{left:16px}.custom-theme .el-carousel__arrow--right{right:16px}.custom-theme .el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.custom-theme .el-carousel__arrow i{cursor:pointer}.custom-theme .el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.custom-theme .el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.custom-theme .el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.custom-theme .el-carousel__indicators--outside button{background-color:#b4bccc;opacity:.24}.custom-theme .el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.custom-theme .el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.custom-theme .el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.custom-theme .el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.custom-theme .el-carousel__indicator:hover button{opacity:.72}.custom-theme .el-carousel__indicator.is-active button{opacity:1}.custom-theme .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}.custom-theme .carousel-arrow-left-enter,.custom-theme .carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.custom-theme .carousel-arrow-right-enter,.custom-theme .carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.custom-theme .el-scrollbar{overflow:hidden;position:relative}.custom-theme .el-scrollbar:active>.el-scrollbar__bar,.custom-theme .el-scrollbar:focus>.el-scrollbar__bar,.custom-theme .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.custom-theme .el-scrollbar__wrap{overflow:scroll;height:100%}.custom-theme .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.custom-theme .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(135,141,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.custom-theme .el-scrollbar__thumb:hover{background-color:rgba(135,141,153,.5)}.custom-theme .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}.custom-theme .el-scrollbar__bar.is-vertical{width:6px;top:2px}.custom-theme .el-scrollbar__bar.is-vertical>div{width:100%}.custom-theme .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.custom-theme .el-scrollbar__bar.is-horizontal>div{height:100%}.custom-theme .el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.custom-theme .el-carousel__item.is-active{z-index:2}.custom-theme .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}.custom-theme .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}.custom-theme .el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.custom-theme .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.custom-theme .el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.custom-theme .el-carousel__item--card.is-active{z-index:2}.custom-theme .el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.custom-theme .el-collapse{border-top:1px solid #e6ebf5;border-bottom:1px solid #e6ebf5}.custom-theme .el-collapse-item__header{height:48px;line-height:48px;background-color:#fff;color:#2d2f33;cursor:pointer;border-bottom:1px solid #e6ebf5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s}.custom-theme .el-collapse-item__header:active,.custom-theme .el-collapse-item__header:focus:not(.focusing){outline-width:0}.custom-theme .el-collapse-item__arrow{margin-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;font-weight:300}.custom-theme .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 #e6ebf5}.custom-theme .el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#2d2f33;line-height:1.769230769230769}.custom-theme .el-collapse-item.is-active .el-collapse-item__header{border-bottom-color:transparent}.custom-theme .el-collapse-item.is-active .el-collapse-item__header .el-collapse-item__arrow{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.custom-theme .el-collapse-item:last-child{margin-bottom:-1px}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-popper .popper__arrow,.custom-theme .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.custom-theme .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))}.custom-theme .el-popper .popper__arrow::after{content:" ";border-width:6px}.custom-theme .el-popper[x-placement^=top]{margin-bottom:12px}.custom-theme .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.custom-theme .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.custom-theme .el-popper[x-placement^=bottom]{margin-top:12px}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.custom-theme .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.custom-theme .el-popper[x-placement^=right]{margin-left:12px}.custom-theme .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.custom-theme .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.custom-theme .el-popper[x-placement^=left]{margin-right:12px}.custom-theme .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.custom-theme .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.custom-theme .el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.custom-theme .el-cascader .el-input,.custom-theme .el-cascader .el-input__inner{cursor:pointer}.custom-theme .el-cascader .el-input__icon{-webkit-transition:none;transition:none}.custom-theme .el-cascader .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}.custom-theme .el-cascader .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.custom-theme .el-cascader .el-icon-circle-close{z-index:2;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-cascader .el-icon-circle-close:hover{color:#878d99}.custom-theme .el-cascader__clearIcon{z-index:2;position:relative}.custom-theme .el-cascader__label{position:absolute;left:0;top:0;height:100%;padding:0 25px 0 15px;color:#5a5e66;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-align:left;font-size:inherit}.custom-theme .el-cascader__label span{color:#000}.custom-theme .el-cascader--medium{font-size:14px;line-height:36px}.custom-theme .el-cascader--small{font-size:13px;line-height:32px}.custom-theme .el-cascader--mini{font-size:12px;line-height:28px}.custom-theme .el-cascader.is-disabled .el-cascader__label{z-index:2;color:#b4bccc}.custom-theme .el-cascader-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;z-index:2;border:solid 1px #dfe4ed;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)}.custom-theme .el-cascader-menus .popper__arrow{-webkit-transform:translateX(-400%);transform:translateX(-400%)}.custom-theme .el-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #dfe4ed;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.custom-theme .el-cascader-menu:last-child{border-right:0}.custom-theme .el-cascader-menu__item{font-size:14px;padding:8px 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#5a5e66;height:34px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.custom-theme .el-cascader-menu__item--extensible:after{font-family:element-icons;content:"\e604";font-size:14px;color:#bfcbd9;position:absolute;right:15px}.custom-theme .el-cascader-menu__item.is-disabled{color:#b4bccc;background-color:#fff;cursor:not-allowed}.custom-theme .el-cascader-menu__item.is-disabled:hover{background-color:#fff}.custom-theme .el-cascader-menu__item.is-active{color:#262729}.custom-theme .el-cascader-menu__item:hover{background-color:#f5f7fa}.custom-theme .el-cascader-menu__item.selected{color:#fff;background-color:#f5f7fa}.custom-theme .el-cascader-menu__item__keyword{font-weight:700}.custom-theme .el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.custom-theme .el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.custom-theme .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}.custom-theme .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%}.custom-theme .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}.custom-theme .el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.custom-theme .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%)}.custom-theme .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.custom-theme .el-color-svpanel{position:relative;width:280px;height:180px}.custom-theme .el-color-svpanel__black,.custom-theme .el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.custom-theme .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))}.custom-theme .el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(transparent));background:linear-gradient(to top,#000,transparent)}.custom-theme .el-color-svpanel__cursor{position:absolute}.custom-theme .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)}.custom-theme .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==)}.custom-theme .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%}.custom-theme .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}.custom-theme .el-color-alpha-slider.is-vertical{width:20px;height:180px}.custom-theme .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%)}.custom-theme .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.custom-theme .el-color-dropdown{width:300px}.custom-theme .el-color-dropdown__main-wrapper{margin-bottom:6px}.custom-theme .el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.custom-theme .el-color-dropdown__btns{margin-top:6px;text-align:right}.custom-theme .el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.custom-theme .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}.custom-theme .el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.custom-theme .el-color-dropdown__btn:hover{color:#262729;border-color:#262729}.custom-theme .el-color-dropdown__link-btn{cursor:pointer;color:#262729;text-decoration:none;padding:15px;font-size:12px}.custom-theme .el-color-dropdown__link-btn:hover{color:tint(#262729,20%)}.custom-theme .el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.custom-theme .el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.custom-theme .el-color-picker--medium{height:36px}.custom-theme .el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.custom-theme .el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.custom-theme .el-color-picker--small{height:32px}.custom-theme .el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.custom-theme .el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.custom-theme .el-color-picker--small .el-color-picker__empty,.custom-theme .el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.custom-theme .el-color-picker--mini{height:28px}.custom-theme .el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.custom-theme .el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.custom-theme .el-color-picker--mini .el-color-picker__empty,.custom-theme .el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.custom-theme .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)}.custom-theme .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}.custom-theme .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}.custom-theme .el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.custom-theme .el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.custom-theme .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)}.custom-theme .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:#fff;text-align:center;font-size:12px}.custom-theme .el-color-picker__panel{position:absolute;z-index:10;padding:6px;background-color:#fff;border:1px solid #e6ebf5;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)}.custom-theme .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.custom-theme .el-input::-webkit-scrollbar{z-index:11;width:6px}.custom-theme .el-input::-webkit-scrollbar:horizontal{height:6px}.custom-theme .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.custom-theme .el-input::-webkit-scrollbar-corner{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track{background:#fff}.custom-theme .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.custom-theme .el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #d8dce5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#5a5e66;display:inline-block;font-size:inherit;height:40px;line-height:1;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%}.custom-theme .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input__inner:hover{border-color:#b4bccc}.custom-theme .el-input__inner:focus{outline:0;border-color:#262729}.custom-theme .el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.custom-theme .el-input__suffix-inner{pointer-events:all}.custom-theme .el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#b4bccc;-webkit-transition:all .3s;transition:all .3s}.custom-theme .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.custom-theme .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.custom-theme .el-input__validateIcon{pointer-events:none}.custom-theme .el-input.is-active .el-input__inner{outline:0;border-color:#262729}.custom-theme .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__inner::placeholder{color:#b4bccc}.custom-theme .el-input.is-disabled .el-input__icon{cursor:not-allowed}.custom-theme .el-input--suffix .el-input__inner{padding-right:30px}.custom-theme .el-input--prefix .el-input__inner{padding-left:30px}.custom-theme .el-input--medium{font-size:14px}.custom-theme .el-input--medium .el-input__inner{height:36px}.custom-theme .el-input--medium .el-input__icon{line-height:36px}.custom-theme .el-input--small{font-size:13px}.custom-theme .el-input--small .el-input__inner{height:32px}.custom-theme .el-input--small .el-input__icon{line-height:32px}.custom-theme .el-input--mini{font-size:12px}.custom-theme .el-input--mini .el-input__inner{height:28px}.custom-theme .el-input--mini .el-input__icon{line-height:28px}.custom-theme .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.custom-theme .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.custom-theme .el-input-group__append,.custom-theme .el-input-group__prepend{background-color:#f5f7fa;color:#0a76a4;vertical-align:middle;display:table-cell;position:relative;border:1px solid #d8dce5;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.custom-theme .el-input-group__append:focus,.custom-theme .el-input-group__prepend:focus{outline:0}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-select,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-select{display:inline-block;margin:-20px}.custom-theme .el-input-group__append button.el-button,.custom-theme .el-input-group__append div.el-select .el-input__inner,.custom-theme .el-input-group__append div.el-select:hover .el-input__inner,.custom-theme .el-input-group__prepend button.el-button,.custom-theme .el-input-group__prepend div.el-select .el-input__inner,.custom-theme .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}.custom-theme .el-input-group__append .el-button,.custom-theme .el-input-group__append .el-input,.custom-theme .el-input-group__prepend .el-button,.custom-theme .el-input-group__prepend .el-input{font-size:inherit}.custom-theme .el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-textarea{display:inline-block;width:100%;vertical-align:bottom}.custom-theme .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:14px;color:#5a5e66;background-color:#fff;background-image:none;border:1px solid #d8dce5;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.custom-theme .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-textarea__inner:hover{border-color:#b4bccc}.custom-theme .el-textarea__inner:focus{outline:0;border-color:#262729}.custom-theme .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#b4bccc;cursor:not-allowed}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#b4bccc}.custom-theme .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#b4bccc}.custom-theme .el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-color:#d8dce5;color:#5a5e66;-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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button+.el-button{margin-left:10px}.custom-theme .el-button.is-round{padding:12px 20px}.custom-theme .el-button:focus,.custom-theme .el-button:hover{color:#262729;border-color:#bebebf;background-color:#e9e9ea}.custom-theme .el-button:active{color:#222325;border-color:#222325;outline:0}.custom-theme .el-button::-moz-focus-inner{border:0}.custom-theme .el-button [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-button.is-plain:focus,.custom-theme .el-button.is-plain:hover{background:#fff;border-color:#262729;color:#262729}.custom-theme .el-button.is-plain:active{background:#fff;border-color:#222325;color:#222325;outline:0}.custom-theme .el-button.is-active{color:#222325;border-color:#222325}.custom-theme .el-button.is-disabled,.custom-theme .el-button.is-disabled:focus,.custom-theme .el-button.is-disabled:hover{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5}.custom-theme .el-button.is-disabled.el-button--text{background-color:transparent}.custom-theme .el-button.is-disabled.is-plain,.custom-theme .el-button.is-disabled.is-plain:focus,.custom-theme .el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#e6ebf5;color:#b4bccc}.custom-theme .el-button.is-loading{position:relative;pointer-events:none}.custom-theme .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)}.custom-theme .el-button.is-round{border-radius:20px;padding:12px 23px}.custom-theme .el-button--primary{color:#fff;background-color:#262729;border-color:#262729}.custom-theme .el-button--primary:focus,.custom-theme .el-button--primary:hover{background:#515254;border-color:#515254;color:#fff}.custom-theme .el-button--primary:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-active{background:#222325;border-color:#222325;color:#fff}.custom-theme .el-button--primary.is-disabled,.custom-theme .el-button--primary.is-disabled:active,.custom-theme .el-button--primary.is-disabled:focus,.custom-theme .el-button--primary.is-disabled:hover{color:#fff;background-color:#939394;border-color:#939394}.custom-theme .el-button--primary.is-plain{color:#262729;background:#e9e9ea;border-color:#a8a9a9}.custom-theme .el-button--primary.is-plain:focus,.custom-theme .el-button--primary.is-plain:hover{background:#262729;border-color:#262729;color:#fff}.custom-theme .el-button--primary.is-plain:active{background:#222325;border-color:#222325;color:#fff;outline:0}.custom-theme .el-button--primary.is-plain.is-disabled,.custom-theme .el-button--primary.is-plain.is-disabled:active,.custom-theme .el-button--primary.is-plain.is-disabled:focus,.custom-theme .el-button--primary.is-plain.is-disabled:hover{color:#7d7d7f;background-color:#e9e9ea;border-color:#d4d4d4}.custom-theme .el-button--success{color:#fff;background-color:#409167;border-color:#409167}.custom-theme .el-button--success:focus,.custom-theme .el-button--success:hover{background:#66a785;border-color:#66a785;color:#fff}.custom-theme .el-button--success:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-active{background:#3a835d;border-color:#3a835d;color:#fff}.custom-theme .el-button--success.is-disabled,.custom-theme .el-button--success.is-disabled:active,.custom-theme .el-button--success.is-disabled:focus,.custom-theme .el-button--success.is-disabled:hover{color:#fff;background-color:#a0c8b3;border-color:#a0c8b3}.custom-theme .el-button--success.is-plain{color:#409167;background:#ecf4f0;border-color:#b3d3c2}.custom-theme .el-button--success.is-plain:focus,.custom-theme .el-button--success.is-plain:hover{background:#409167;border-color:#409167;color:#fff}.custom-theme .el-button--success.is-plain:active{background:#3a835d;border-color:#3a835d;color:#fff;outline:0}.custom-theme .el-button--success.is-plain.is-disabled,.custom-theme .el-button--success.is-plain.is-disabled:active,.custom-theme .el-button--success.is-plain.is-disabled:focus,.custom-theme .el-button--success.is-plain.is-disabled:hover{color:#8cbda4;background-color:#ecf4f0;border-color:#d9e9e1}.custom-theme .el-button--warning{color:#fff;background-color:#9da408;border-color:#9da408}.custom-theme .el-button--warning:focus,.custom-theme .el-button--warning:hover{background:#b1b639;border-color:#b1b639;color:#fff}.custom-theme .el-button--warning:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-active{background:#8d9407;border-color:#8d9407;color:#fff}.custom-theme .el-button--warning.is-disabled,.custom-theme .el-button--warning.is-disabled:active,.custom-theme .el-button--warning.is-disabled:focus,.custom-theme .el-button--warning.is-disabled:hover{color:#fff;background-color:#ced284;border-color:#ced284}.custom-theme .el-button--warning.is-plain{color:#9da408;background:#f5f6e6;border-color:#d8db9c}.custom-theme .el-button--warning.is-plain:focus,.custom-theme .el-button--warning.is-plain:hover{background:#9da408;border-color:#9da408;color:#fff}.custom-theme .el-button--warning.is-plain:active{background:#8d9407;border-color:#8d9407;color:#fff;outline:0}.custom-theme .el-button--warning.is-plain.is-disabled,.custom-theme .el-button--warning.is-plain.is-disabled:active,.custom-theme .el-button--warning.is-plain.is-disabled:focus,.custom-theme .el-button--warning.is-plain.is-disabled:hover{color:#c4c86b;background-color:#f5f6e6;border-color:#ebedce}.custom-theme .el-button--danger{color:#fff;background-color:#b3450e;border-color:#b3450e}.custom-theme .el-button--danger:focus,.custom-theme .el-button--danger:hover{background:#c26a3e;border-color:#c26a3e;color:#fff}.custom-theme .el-button--danger:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-active{background:#a13e0d;border-color:#a13e0d;color:#fff}.custom-theme .el-button--danger.is-disabled,.custom-theme .el-button--danger.is-disabled:active,.custom-theme .el-button--danger.is-disabled:focus,.custom-theme .el-button--danger.is-disabled:hover{color:#fff;background-color:#d9a287;border-color:#d9a287}.custom-theme .el-button--danger.is-plain{color:#b3450e;background:#f7ece7;border-color:#e1b59f}.custom-theme .el-button--danger.is-plain:focus,.custom-theme .el-button--danger.is-plain:hover{background:#b3450e;border-color:#b3450e;color:#fff}.custom-theme .el-button--danger.is-plain:active{background:#a13e0d;border-color:#a13e0d;color:#fff;outline:0}.custom-theme .el-button--danger.is-plain.is-disabled,.custom-theme .el-button--danger.is-plain.is-disabled:active,.custom-theme .el-button--danger.is-plain.is-disabled:focus,.custom-theme .el-button--danger.is-plain.is-disabled:hover{color:#d18f6e;background-color:#f7ece7;border-color:#f0dacf}.custom-theme .el-button--info{color:#fff;background-color:#0a76a4;border-color:#0a76a4}.custom-theme .el-button--info:focus,.custom-theme .el-button--info:hover{background:#3b91b6;border-color:#3b91b6;color:#fff}.custom-theme .el-button--info:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-active{background:#096a94;border-color:#096a94;color:#fff}.custom-theme .el-button--info.is-disabled,.custom-theme .el-button--info.is-disabled:active,.custom-theme .el-button--info.is-disabled:focus,.custom-theme .el-button--info.is-disabled:hover{color:#fff;background-color:#85bbd2;border-color:#85bbd2}.custom-theme .el-button--info.is-plain{color:#0a76a4;background:#e7f1f6;border-color:#9dc8db}.custom-theme .el-button--info.is-plain:focus,.custom-theme .el-button--info.is-plain:hover{background:#0a76a4;border-color:#0a76a4;color:#fff}.custom-theme .el-button--info.is-plain:active{background:#096a94;border-color:#096a94;color:#fff;outline:0}.custom-theme .el-button--info.is-plain.is-disabled,.custom-theme .el-button--info.is-plain.is-disabled:active,.custom-theme .el-button--info.is-plain.is-disabled:focus,.custom-theme .el-button--info.is-plain.is-disabled:hover{color:#6cadc8;background-color:#e7f1f6;border-color:#cee4ed}.custom-theme .el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.custom-theme .el-button--medium.is-round{padding:10px 20px}.custom-theme .el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--small.is-round{padding:9px 15px}.custom-theme .el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.custom-theme .el-button--mini.is-round{padding:7px 15px}.custom-theme .el-button--text{border:none;color:#262729;background:0 0;padding-left:0;padding-right:0}.custom-theme .el-button--text:focus,.custom-theme .el-button--text:hover{color:#515254;border-color:transparent;background-color:transparent}.custom-theme .el-button--text:active{color:#222325;border-color:transparent;background-color:transparent}.custom-theme .el-button-group{display:inline-block;vertical-align:middle}.custom-theme .el-button-group::after,.custom-theme .el-button-group::before{display:table;content:""}.custom-theme .el-button-group::after{clear:both}.custom-theme .el-button-group .el-button{float:left;position:relative}.custom-theme .el-button-group .el-button+.el-button{margin-left:0}.custom-theme .el-button-group .el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.custom-theme .el-button-group .el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.custom-theme .el-button-group .el-button:not(:first-child):not(:last-child){border-radius:0}.custom-theme .el-button-group .el-button:not(:last-child){margin-right:-1px}.custom-theme .el-button-group .el-button:active,.custom-theme .el-button-group .el-button:focus,.custom-theme .el-button-group .el-button:hover{z-index:1}.custom-theme .el-button-group .el-button.is-active{z-index:1}.custom-theme .el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.custom-theme .el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.custom-theme .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)}.custom-theme .el-checkbox{color:#5a5e66;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}.custom-theme .el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #d8dce5}.custom-theme .el-checkbox.is-bordered.is-checked{border-color:#262729}.custom-theme .el-checkbox.is-bordered.is-disabled{border-color:#e6ebf5;cursor:not-allowed}.custom-theme .el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small{padding:3px 15px 7px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini{padding:1px 15px 5px 10px;border-radius:3px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.custom-theme .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.custom-theme .el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5;cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#edf2fc;border-color:#d8dce5}.custom-theme .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#b4bccc;border-color:#b4bccc}.custom-theme .el-checkbox__input.is-disabled+span.el-checkbox__label{color:#b4bccc;cursor:not-allowed}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.custom-theme .el-checkbox__input.is-checked+.el-checkbox__label{color:#262729}.custom-theme .el-checkbox__input.is-focus .el-checkbox__inner{border-color:#262729}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#262729;border-color:#262729}.custom-theme .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}.custom-theme .el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.custom-theme .el-checkbox__inner{display:inline-block;position:relative;border:1px solid #d8dce5;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)}.custom-theme .el-checkbox__inner:hover{border-color:#262729}.custom-theme .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 cubic-bezier(.71,-.46,.88,.6) 50ms;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) 50ms;-webkit-transform-origin:center;transform-origin:center}.custom-theme .el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;left:-999px}.custom-theme .el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.custom-theme .el-checkbox+.el-checkbox{margin-left:30px}.custom-theme .el-checkbox-button{position:relative;display:inline-block}.custom-theme .el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #d8dce5;border-left:0;color:#5a5e66;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button__inner.is-round{padding:12px 20px}.custom-theme .el-checkbox-button__inner:hover{color:#262729}.custom-theme .el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.custom-theme .el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.custom-theme .el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.custom-theme .el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#262729;border-color:#262729;-webkit-box-shadow:-1px 0 0 0 #7d7d7f;box-shadow:-1px 0 0 0 #7d7d7f}.custom-theme .el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#b4bccc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.custom-theme .el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #d8dce5;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.custom-theme .el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#262729}.custom-theme .el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.custom-theme .el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.custom-theme .el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.custom-theme .el-checkbox-group{font-size:0}.custom-theme .el-transfer{font-size:14px}.custom-theme .el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.custom-theme .el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#262729;font-size:0}.custom-theme .el-transfer__button.is-with-texts{border-radius:4px}.custom-theme .el-transfer__button.is-disabled{border:1px solid #d8dce5;background-color:#f5f7fa;color:#b4bccc}.custom-theme .el-transfer__button.is-disabled:hover{border:1px solid #d8dce5;background-color:#f5f7fa;color:#b4bccc}.custom-theme .el-transfer__button:first-child{margin-bottom:10px}.custom-theme .el-transfer__button:nth-child(2){margin:0}.custom-theme .el-transfer__button i,.custom-theme .el-transfer__button span{font-size:14px}.custom-theme .el-transfer__button [class*=el-icon-]+span{margin-left:0}.custom-theme .el-transfer-panel{border:1px solid #e6ebf5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.custom-theme .el-transfer-panel__body{height:246px}.custom-theme .el-transfer-panel__body.is-with-footer{padding-bottom:40px}.custom-theme .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}.custom-theme .el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.custom-theme .el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block}.custom-theme .el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.custom-theme .el-transfer-panel__item.el-checkbox{color:#5a5e66}.custom-theme .el-transfer-panel__item:hover{color:#262729}.custom-theme .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}.custom-theme .el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.custom-theme .el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.custom-theme .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}.custom-theme .el-transfer-panel__filter .el-input__icon{margin-left:5px}.custom-theme .el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.custom-theme .el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #e6ebf5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.custom-theme .el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.custom-theme .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#2d2f33;font-weight:400}.custom-theme .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#878d99;font-size:12px;font-weight:400}.custom-theme .el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #e6ebf5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.custom-theme .el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:"";height:100%;vertical-align:middle}.custom-theme .el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#5a5e66}.custom-theme .el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#878d99}.custom-theme .el-transfer-panel .el-checkbox__label{padding-left:8px}.custom-theme .el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.custom-theme .el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.custom-theme .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;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.custom-theme .el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.custom-theme .el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px}.custom-theme .el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}
src/common/Header.vue
1 <template> File was deleted
2 <div class="header">
3 <!-- 折叠按钮 -->
4 <div class="collapse-btn" @click="collapseChage">
5 <i v-if="!collapse" class="el-icon-s-fold"></i>
6 <i v-else class="el-icon-s-unfold"></i>
7 </div>
8 <div class="logo">后台管理系统</div>
9 <div class="header-right">
10 <div class="header-user-con">
11 <!-- 全屏显示 -->
12 <div class="btn-fullscreen" @click="handleFullScreen">
13 <el-tooltip effect="dark" :content="fullscreen?`取消全屏`:`全屏`" placement="bottom">
14 <i class="el-icon-rank"></i>
15 </el-tooltip>
16 </div>
17 <!-- 消息中心 -->
18 <div class="btn-bell">
19 <el-tooltip
20 effect="dark"
21 :content="message?`有${message}条未读消息`:`消息中心`"
22 placement="bottom"
23 >
24 <router-link to="/tabs">
25 <i class="el-icon-bell"></i>
26 </router-link>
27 </el-tooltip>
28 <span class="btn-bell-badge" v-if="message"></span>
29 </div>
30 <!-- 用户头像 -->
31 <div class="user-avator">
32 <img src="../assets/img/img.jpg" />
33 </div>
34 <!-- 用户名下拉菜单 -->
35 <el-dropdown class="user-name" trigger="click" @command="handleCommand">
36 <span class="el-dropdown-link">
37 {{username}}
38 <i class="el-icon-caret-bottom"></i>
39 </span>
40 <el-dropdown-menu slot="dropdown">
41 <a href="https://github.com/lin-xin/vue-manage-system" target="_blank">
42 <el-dropdown-item>项目仓库</el-dropdown-item>
43 </a>
44 <el-dropdown-item divided command="loginout">退出登录</el-dropdown-item>
45 </el-dropdown-menu>
46 </el-dropdown>
47 </div>
48 </div>
49 </div>
50 </template>
51 <script>
52 import bus from './bus';
53 export default {
54 data() {
55 return {
56 collapse: false,
57 fullscreen: false,
58 name: 'linxin',
59 message: 2
60 };
61 },
62 computed: {
63 username() {
64 let username = localStorage.getItem('ms_username');
65 return username ? username : this.name;
66 }
67 },
68 methods: {
69 // 用户名下拉菜单选择事件
70 handleCommand(command) {
71 if (command == 'loginout') {
72 localStorage.removeItem('ms_username');
73 this.$router.push('/login');
74 }
75 },
76 // 侧边栏折叠
77 collapseChage() {
78 this.collapse = !this.collapse;
79 bus.$emit('collapse', this.collapse);
80 },
81 // 全屏事件
82 handleFullScreen() {
83 let element = document.documentElement;
84 if (this.fullscreen) {
85 if (document.exitFullscreen) {
86 document.exitFullscreen();
87 } else if (document.webkitCancelFullScreen) {
88 document.webkitCancelFullScreen();
89 } else if (document.mozCancelFullScreen) {
90 document.mozCancelFullScreen();
91 } else if (document.msExitFullscreen) {
92 document.msExitFullscreen();
93 }
94 } else {
95 if (element.requestFullscreen) {
96 element.requestFullscreen();
97 } else if (element.webkitRequestFullScreen) {
98 element.webkitRequestFullScreen();
99 } else if (element.mozRequestFullScreen) {
100 element.mozRequestFullScreen();
101 } else if (element.msRequestFullscreen) {
102 // IE11
103 element.msRequestFullscreen();
104 }
105 }
106 this.fullscreen = !this.fullscreen;
107 }
108 },
109 mounted() {
110 if (document.body.clientWidth < 1500) {
111 this.collapseChage();
112 }
113 }
114 };
115 </script>
116 <style scoped>
117 .header {
118 position: relative;
119 box-sizing: border-box;
120 width: 100%;
121 height: 70px;
122 font-size: 22px;
123 color: #fff;
124 }
125 .collapse-btn {
126 float: left;
127 padding: 0 21px;
128 cursor: pointer;
129 line-height: 70px;
130 }
131 .header .logo {
132 float: left;
133 width: 250px;
134 line-height: 70px;
135 }
136 .header-right {
137 float: right;
138 padding-right: 50px;
139 }
140 .header-user-con {
141 display: flex;
142 height: 70px;
143 align-items: center;
144 }
145 .btn-fullscreen {
146 transform: rotate(45deg);
147 margin-right: 5px;
148 font-size: 24px;
149 }
150 .btn-bell,
151 .btn-fullscreen {
152 position: relative;
153 width: 30px;
154 height: 30px;
155 text-align: center;
156 border-radius: 15px;
157 cursor: pointer;
158 }
159 .btn-bell-badge {
160 position: absolute;
161 right: 0;
162 top: -2px;
163 width: 8px;
164 height: 8px;
165 border-radius: 4px;
166 background: #f56c6c;
167 color: #fff;
168 }
169 .btn-bell .el-icon-bell {
170 color: #fff;
171 }
172 .user-name {
173 margin-left: 10px;
174 }
175 .user-avator {
176 margin-left: 20px;
177 }
178 .user-avator img {
179 display: block;
180 width: 40px;
181 height: 40px;
182 border-radius: 50%;
183 }
184 .el-dropdown-link {
185 color: #fff;
186 cursor: pointer;
187 }
188 .el-dropdown-menu__item {
189 text-align: center;
190 }
191 </style>
src/common/Home.vue
1 <template> File was deleted
2 <div class="wrapper">
3 <v-head></v-head>
4 <v-sidebar></v-sidebar>
5 <div class="content-box" :class="{'content-collapse':collapse}">
6 <v-tags></v-tags>
7 <div class="content">
8 <transition name="move" mode="out-in">
9 <keep-alive :include="tagsList">
10 <router-view></router-view>
11 </keep-alive>
12 </transition>
13 <el-backtop target=".content"></el-backtop>
14 </div>
15 </div>
16 </div>
17 </template>
18
19 <script>
20 import vHead from './Header.vue';
21 import vSidebar from './Sidebar.vue';
22 import vTags from './Tags.vue';
23 import bus from './bus';
24 export default {
25 data() {
26 return {
27 tagsList: [],
28 collapse: false
29 };
30 },
31 components: {
32 vHead,
33 vSidebar,
34 vTags
35 },
36 created() {
37 bus.$on('collapse-content', msg => {
38 this.collapse = msg;
39 });
40 // 只有在标签页列表里的页面才使用keep-alive,即关闭标签之后就不保存到内存中了。
41 bus.$on('tags', msg => {
42 let arr = [];
43 for (let i = 0, len = msg.length; i < len; i++) {
44 msg[i].name && arr.push(msg[i].name);
45 }
46 this.tagsList = arr;
47 });
48 }
49 };
50 </script>
src/common/Sidebar.vue
1 <template> File was deleted
2 <div class="sidebar">
3 <el-menu
4 class="sidebar-el-menu"
5 :default-active="onRoutes"
6 :collapse="collapse"
7 background-color="#324157"
8 text-color="#bfcbd9"
9 active-text-color="#20a0ff"
10 unique-opened
11 router
12 >
13 <template v-for="item in items">
14 <template v-if="item.subs">
15 <el-submenu :index="item.index" :key="item.index">
16 <template slot="title">
17 <i :class="item.icon"></i>
18 <span slot="title">{{ item.title }}</span>
19 </template>
20 <template v-for="subItem in item.subs">
21 <el-submenu
22 v-if="subItem.subs"
23 :index="subItem.index"
24 :key="subItem.index"
25 >
26 <template slot="title">{{ subItem.title }}</template>
27 <el-menu-item
28 v-for="(threeItem,i) in subItem.subs"
29 :key="i"
30 :index="threeItem.index"
31 >{{ threeItem.title }}</el-menu-item>
32 </el-submenu>
33 <el-menu-item
34 v-else
35 :index="subItem.index"
36 :key="subItem.index"
37 >{{ subItem.title }}</el-menu-item>
38 </template>
39 </el-submenu>
40 </template>
41 <template v-else>
42 <el-menu-item :index="item.index" :key="item.index">
43 <i :class="item.icon"></i>
44 <span slot="title">{{ item.title }}</span>
45 </el-menu-item>
46 </template>
47 </template>
48 </el-menu>
49 </div>
50 </template>
51
52 <script>
53 import bus from './bus';
54 export default {
55 data() {
56 return {
57 collapse: false,
58 items: [
59 {
60 icon: 'el-icon-lx-home',
61 index: 'dashboard',
62 title: '系统首页'
63 },
64 {
65 icon: 'el-icon-lx-cascades',
66 index: 'table',
67 title: '基础表格'
68 },
69 {
70 icon: 'el-icon-lx-copy',
71 index: 'tabs',
72 title: 'tab选项卡'
73 },
74 {
75 icon: 'el-icon-lx-calendar',
76 index: '3',
77 title: '表单相关',
78 subs: [
79 {
80 index: 'form',
81 title: '基本表单'
82 },
83 {
84 index: '3-2',
85 title: '三级菜单',
86 subs: [
87 {
88 index: 'editor',
89 title: '富文本编辑器'
90 },
91 {
92 index: 'markdown',
93 title: 'markdown编辑器'
94 }
95 ]
96 },
97 {
98 index: 'upload',
99 title: '文件上传'
100 }
101 ]
102 },
103 {
104 icon: 'el-icon-lx-emoji',
105 index: 'icon',
106 title: '自定义图标'
107 },
108 {
109 icon: 'el-icon-pie-chart',
110 index: 'charts',
111 title: 'schart图表'
112 },
113 {
114 icon: 'el-icon-rank',
115 index: '6',
116 title: '拖拽组件',
117 subs: [
118 {
119 index: 'drag',
120 title: '拖拽列表'
121 },
122 {
123 index: 'dialog',
124 title: '拖拽弹框'
125 }
126 ]
127 },
128 {
129 icon: 'el-icon-lx-global',
130 index: 'i18n',
131 title: '国际化功能'
132 },
133 {
134 icon: 'el-icon-lx-warn',
135 index: '7',
136 title: '错误处理',
137 subs: [
138 {
139 index: 'permission',
140 title: '权限测试'
141 },
142 {
143 index: '404',
144 title: '404页面'
145 }
146 ]
147 },
148 {
149 icon: 'el-icon-lx-redpacket_fill',
150 index: '/donate',
151 title: '支持作者'
152 }
153 ]
154 };
155 },
156 computed: {
157 onRoutes() {
158 return this.$route.path.replace('/', '');
159 }
160 },
161 created() {
162 // 通过 Event Bus 进行组件间通信,来折叠侧边栏
163 bus.$on('collapse', msg => {
164 this.collapse = msg;
165 bus.$emit('collapse-content', msg);
166 });
167 }
168 };
169 </script>
170
171 <style scoped>
172 .sidebar {
173 display: block;
174 position: absolute;
175 left: 0;
176 top: 70px;
177 bottom: 0;
178 overflow-y: scroll;
179 }
180 .sidebar::-webkit-scrollbar {
181 width: 0;
182 }
183 .sidebar-el-menu:not(.el-menu--collapse) {
184 width: 250px;
185 }
186 .sidebar > ul {
187 height: 100%;
188 }
189 </style>
src/common/Tags.vue
1 <template> File was deleted
2 <div class="tags" v-if="showTags">
3 <ul>
4 <li class="tags-li" v-for="(item,index) in tagsList" :class="{'active': isActive(item.path)}" :key="index">
5 <router-link :to="item.path" class="tags-li-title">
6 {{item.title}}
7 </router-link>
8 <span class="tags-li-icon" @click="closeTags(index)"><i class="el-icon-close"></i></span>
9 </li>
10 </ul>
11 <div class="tags-close-box">
12 <el-dropdown @command="handleTags">
13 <el-button size="mini" type="primary">
14 标签选项<i class="el-icon-arrow-down el-icon--right"></i>
15 </el-button>
16 <el-dropdown-menu size="small" slot="dropdown">
17 <el-dropdown-item command="other">关闭其他</el-dropdown-item>
18 <el-dropdown-item command="all">关闭所有</el-dropdown-item>
19 </el-dropdown-menu>
20 </el-dropdown>
21 </div>
22 </div>
23 </template>
24
25 <script>
26 import bus from './bus';
27 export default {
28 data() {
29 return {
30 tagsList: []
31 }
32 },
33 methods: {
34 isActive(path) {
35 return path === this.$route.fullPath;
36 },
37 // 关闭单个标签
38 closeTags(index) {
39 const delItem = this.tagsList.splice(index, 1)[0];
40 const item = this.tagsList[index] ? this.tagsList[index] : this.tagsList[index - 1];
41 if (item) {
42 delItem.path === this.$route.fullPath && this.$router.push(item.path);
43 }else{
44 this.$router.push('/');
45 }
46 },
47 // 关闭全部标签
48 closeAll(){
49 this.tagsList = [];
50 this.$router.push('/');
51 },
52 // 关闭其他标签
53 closeOther(){
54 const curItem = this.tagsList.filter(item => {
55 return item.path === this.$route.fullPath;
56 })
57 this.tagsList = curItem;
58 },
59 // 设置标签
60 setTags(route){
61 const isExist = this.tagsList.some(item => {
62 return item.path === route.fullPath;
63 })
64 if(!isExist){
65 if(this.tagsList.length >= 8){
66 this.tagsList.shift();
67 }
68 this.tagsList.push({
69 title: route.meta.title,
70 path: route.fullPath,
71 name: route.matched[1].components.default.name
72 })
73 }
74 bus.$emit('tags', this.tagsList);
75 },
76 handleTags(command){
77 command === 'other' ? this.closeOther() : this.closeAll();
78 }
79 },
80 computed: {
81 showTags() {
82 return this.tagsList.length > 0;
83 }
84 },
85 watch:{
86 $route(newValue, oldValue){
87 this.setTags(newValue);
88 }
89 },
90 created(){
91 this.setTags(this.$route);
92 // 监听关闭当前页面的标签页
93 bus.$on('close_current_tags', () => {
94 for (let i = 0, len = this.tagsList.length; i < len; i++) {
95 const item = this.tagsList[i];
96 if(item.path === this.$route.fullPath){
97 if(i < len - 1){
98 this.$router.push(this.tagsList[i+1].path);
99 }else if(i > 0){
100 this.$router.push(this.tagsList[i-1].path);
101 }else{
102 this.$router.push('/');
103 }
104 this.tagsList.splice(i, 1);
105 break;
106 }
107 }
108 })
109 }
110 }
111 </script>
112
113
114 <style>
115 .tags {
116 position: relative;
117 height: 30px;
118 overflow: hidden;
119 background: #fff;
120 padding-right: 120px;
121 box-shadow: 0 5px 10px #ddd;
122 }
123 .tags ul {
124 box-sizing: border-box;
125 width: 100%;
126 height: 100%;
127 }
128 .tags-li {
129 float: left;
130 margin: 3px 5px 2px 3px;
131 border-radius: 3px;
132 font-size: 12px;
133 overflow: hidden;
134 cursor: pointer;
135 height: 23px;
136 line-height: 23px;
137 border: 1px solid #e9eaec;
138 background: #fff;
139 padding: 0 5px 0 12px;
140 vertical-align: middle;
141 color: #666;
142 -webkit-transition: all .3s ease-in;
143 -moz-transition: all .3s ease-in;
144 transition: all .3s ease-in;
145 }
146 .tags-li:not(.active):hover {
147 background: #f8f8f8;
148 }
149 .tags-li.active {
150 color: #fff;
151 }
152 .tags-li-title {
153 float: left;
154 max-width: 80px;
155 overflow: hidden;
156 white-space: nowrap;
157 text-overflow: ellipsis;
158 margin-right: 5px;
159 color: #666;
160 }
161 .tags-li.active .tags-li-title {
162 color: #fff;
163 }
164 .tags-close-box {
165 position: absolute;
166 right: 0;
167 top: 0;
168 box-sizing: border-box;
169 padding-top: 1px;
170 text-align: center;
171 width: 110px;
172 height: 30px;
173 background: #fff;
174 box-shadow: -3px 0 15px 3px rgba(0, 0, 0, .1);
175 z-index: 10;
176 }
177 </style>
src/common/bus.js
1 import Vue from 'vue'; File was deleted
2
3 // 使用 Event Bus
4 const bus = new Vue();
5
6 export default bus;
7 1 import Vue from 'vue';
src/common/directives.js
1 import Vue from 'vue'; File was deleted
2
3 // v-dialogDrag: 弹窗拖拽属性
4 Vue.directive('dialogDrag', {
5 bind(el, binding, vnode, oldVnode) {
6 const dialogHeaderEl = el.querySelector('.el-dialog__header');
7 const dragDom = el.querySelector('.el-dialog');
8
9 dialogHeaderEl.style.cssText += ';cursor:move;'
10 dragDom.style.cssText += ';top:0px;'
11
12 // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
13 const sty = (() => {
14 if (window.document.currentStyle) {
15 return (dom, attr) => dom.currentStyle[attr];
16 } else {
17 return (dom, attr) => getComputedStyle(dom, false)[attr];
18 }
19 })()
20
21 dialogHeaderEl.onmousedown = (e) => {
22 // 鼠标按下,计算当前元素距离可视区的距离
23 const disX = e.clientX - dialogHeaderEl.offsetLeft;
24 const disY = e.clientY - dialogHeaderEl.offsetTop;
25
26 const screenWidth = document.body.clientWidth; // body当前宽度
27 const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取)
28
29 const dragDomWidth = dragDom.offsetWidth; // 对话框宽度
30 const dragDomheight = dragDom.offsetHeight; // 对话框高度
31
32 const minDragDomLeft = dragDom.offsetLeft;
33 const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
34
35 const minDragDomTop = dragDom.offsetTop;
36 const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
37
38
39 // 获取到的值带px 正则匹配替换
40 let styL = sty(dragDom, 'left');
41 let styT = sty(dragDom, 'top');
42
43 // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
44 if (styL.includes('%')) {
45 styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100);
46 styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100);
47 } else {
48 styL = +styL.replace(/\px/g, '');
49 styT = +styT.replace(/\px/g, '');
50 };
51
52 document.onmousemove = function (e) {
53 // 通过事件委托,计算移动的距离
54 let left = e.clientX - disX;
55 let top = e.clientY - disY;
56
57 // 边界处理
58 if (-(left) > minDragDomLeft) {
59 left = -(minDragDomLeft);
60 } else if (left > maxDragDomLeft) {
61 left = maxDragDomLeft;
62 }
63
64 if (-(top) > minDragDomTop) {
65 top = -(minDragDomTop);
66 } else if (top > maxDragDomTop) {
67 top = maxDragDomTop;
68 }
69
70 // 移动当前元素
71 dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
72 };
73
74 document.onmouseup = function (e) {
75 document.onmousemove = null;
76 document.onmouseup = null;
77 };
78 }
79 }
80 })
src/common/i18n.js
1 export const messages = { File was deleted
2 'zh': {
3 i18n: {
4 breadcrumb: '国际化产品',
5 tips: '通过切换语言按钮,来改变当前内容的语言。',
6 btn: '切换英文',
7 title1: '常用用法',
8 p1: '要是你把你的秘密告诉了风,那就别怪风把它带给树。',
9 p2: '没有什么比信念更能支撑我们度过艰难的时光了。',
10 p3: '只要能把自己的事做好,并让自己快乐,你就领先于大多数人了。',
11 title2: '组件插值',
12 info: 'Element组件需要国际化,请参考 {action}。',
13 value: '文档'
14 }
15 },
16 'en': {
17 i18n: {
18 breadcrumb: 'International Products',
19 tips: 'Click on the button to change the current language. ',
20 btn: 'Switch Chinese',
21 title1: 'Common usage',
22 p1: "If you reveal your secrets to the wind you should not blame the wind for revealing them to the trees.",
23 p2: "Nothing can help us endure dark times better than our faith. ",
24 p3: "If you can do what you do best and be happy, you're further along in life than most people.",
25 title2: 'Component interpolation',
26 info: 'The default language of Element is Chinese. If you wish to use another language, please refer to the {action}.',
27 value: 'documentation'
28 }
29 }
30 }
src/components/BackToTop/index.vue
File was created 1 <template>
2 <transition :name="transitionName">
3 <div v-show="visible" :style="customStyle" class="back-to-ceiling" @click="backToTop">
4 <svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg" class="Icon Icon--backToTopArrow" aria-hidden="true" style="height:16px;width:16px"><path d="M12.036 15.59a1 1 0 0 1-.997.995H5.032a.996.996 0 0 1-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29a1.003 1.003 0 0 1 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" /></svg>
5 </div>
6 </transition>
7 </template>
8
9 <script>
10 export default {
11 name: 'BackToTop',
12 props: {
13 visibilityHeight: {
14 type: Number,
15 default: 400
16 },
17 backPosition: {
18 type: Number,
19 default: 0
20 },
21 customStyle: {
22 type: Object,
23 default: function() {
24 return {
25 right: '50px',
26 bottom: '50px',
27 width: '40px',
28 height: '40px',
29 'border-radius': '4px',
30 'line-height': '45px',
31 background: '#e7eaf1'
32 }
33 }
34 },
35 transitionName: {
36 type: String,
37 default: 'fade'
38 }
39 },
40 data() {
41 return {
42 visible: false,
43 interval: null,
44 isMoving: false
45 }
46 },
47 mounted() {
48 window.addEventListener('scroll', this.handleScroll)
49 },
50 beforeDestroy() {
51 window.removeEventListener('scroll', this.handleScroll)
52 if (this.interval) {
53 clearInterval(this.interval)
54 }
55 },
56 methods: {
57 handleScroll() {
58 this.visible = window.pageYOffset > this.visibilityHeight
59 },
60 backToTop() {
61 if (this.isMoving) return
62 const start = window.pageYOffset
63 let i = 0
64 this.isMoving = true
65 this.interval = setInterval(() => {
66 const next = Math.floor(this.easeInOutQuad(10 * i, start, -start, 500))
67 if (next <= this.backPosition) {
68 window.scrollTo(0, this.backPosition)
69 clearInterval(this.interval)
70 this.isMoving = false
71 } else {
72 window.scrollTo(0, next)
73 }
74 i++
75 }, 16.7)
76 },
77 easeInOutQuad(t, b, c, d) {
78 if ((t /= d / 2) < 1) return c / 2 * t * t + b
79 return -c / 2 * (--t * (t - 2) - 1) + b
80 }
81 }
82 }
83 </script>
84
85 <style scoped>
86 .back-to-ceiling {
87 position: fixed;
88 display: inline-block;
89 text-align: center;
90 cursor: pointer;
91 }
92
93 .back-to-ceiling:hover {
94 background: #d5dbe7;
95 }
96
97 .fade-enter-active,
98 .fade-leave-active {
99 transition: opacity .5s;
100 }
101
102 .fade-enter,
103 .fade-leave-to {
104 opacity: 0
105 }
106
107 .back-to-ceiling .Icon {
108 fill: #9aaabf;
109 background: none;
110 }
111 </style>
112
src/components/Breadcrumb/index.vue
1 <template> 1 <template>
2 <el-breadcrumb class="app-breadcrumb" separator="/"> 2 <el-breadcrumb class="app-breadcrumb" separator="/">
3 <transition-group name="breadcrumb"> 3 <transition-group name="breadcrumb">
4 <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path"> 4 <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
5 <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span> 5 <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">
6 <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a> 6 {{ generateTitle(item.meta.title) }}
7 </span>
8 <a v-else @click.prevent="handleLink(item)">{{ generateTitle(item.meta.title) }}</a>
7 </el-breadcrumb-item> 9 </el-breadcrumb-item>
8 </transition-group> 10 </transition-group>
9 </el-breadcrumb> 11 </el-breadcrumb>
10 </template> 12 </template>
11 13
12 <script> 14 <script>
15 import { generateTitle } from '@/utils/i18n'
13 import pathToRegexp from 'path-to-regexp' 16 import pathToRegexp from 'path-to-regexp'
14 17
15 export default { 18 export default {
16 data() { 19 data() {
17 return { 20 return {
18 levelList: null 21 levelList: null
19 } 22 }
20 }, 23 },
21 watch: { 24 watch: {
22 $route() { 25 $route(route) {
26 // if you go to the redirect page, do not update the breadcrumbs
27 if (route.path.startsWith('/redirect/')) {
28 return
29 }
23 this.getBreadcrumb() 30 this.getBreadcrumb()
24 } 31 }
25 }, 32 },
26 created() { 33 created() {
27 this.getBreadcrumb() 34 this.getBreadcrumb()
28 }, 35 },
29 methods: { 36 methods: {
37 generateTitle,
30 getBreadcrumb() { 38 getBreadcrumb() {
31 // only show routes with meta.title 39 // only show routes with meta.title
32 let matched = this.$route.matched.filter(item => item.meta && item.meta.title) 40 let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
33 const first = matched[0] 41 const first = matched[0]
34 42
35 if (!this.isDashboard(first)) { 43 if (!this.isDashboard(first)) {
36 matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched) 44 matched = [{ path: '/dashboard', meta: { title: 'dashboard' }}].concat(matched)
37 } 45 }
38 46
39 this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) 47 this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
40 }, 48 },
41 isDashboard(route) { 49 isDashboard(route) {
42 const name = route && route.name 50 const name = route && route.name
43 if (!name) { 51 if (!name) {
44 return false 52 return false
45 } 53 }
46 return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase() 54 return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()
47 }, 55 },
48 pathCompile(path) { 56 pathCompile(path) {
49 // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561 57 // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
50 const { params } = this.$route 58 const { params } = this.$route
51 var toPath = pathToRegexp.compile(path) 59 var toPath = pathToRegexp.compile(path)
52 return toPath(params) 60 return toPath(params)
53 }, 61 },
54 handleLink(item) { 62 handleLink(item) {
55 const { redirect, path } = item 63 const { redirect, path } = item
56 if (redirect) { 64 if (redirect) {
57 this.$router.push(redirect) 65 this.$router.push(redirect)
58 return 66 return
59 } 67 }
60 this.$router.push(this.pathCompile(path)) 68 this.$router.push(this.pathCompile(path))
61 } 69 }
62 } 70 }
63 } 71 }
64 </script> 72 </script>
65 73
66 <style lang="scss" scoped> 74 <style lang="scss" scoped>
67 .app-breadcrumb.el-breadcrumb { 75 .app-breadcrumb.el-breadcrumb {
68 display: inline-block; 76 display: inline-block;
69 font-size: 14px; 77 font-size: 14px;
70 line-height: 50px; 78 line-height: 50px;
71 margin-left: 8px; 79 margin-left: 8px;
72 80
73 .no-redirect { 81 .no-redirect {
74 color: #97a8be; 82 color: #97a8be;
75 cursor: text; 83 cursor: text;
76 } 84 }
77 } 85 }
78 </style> 86 </style>
79 87
src/components/Charts/Keyboard.vue
File was created 1 <template>
2 <div :id="id" :class="className" :style="{height:height,width:width}" />
3 </template>
4
5 <script>
6 import echarts from 'echarts'
7 import resize from './mixins/resize'
8
9 export default {
10 mixins: [resize],
11 props: {
12 className: {
13 type: String,
14 default: 'chart'
15 },
16 id: {
17 type: String,
18 default: 'chart'
19 },
20 width: {
21 type: String,
22 default: '200px'
23 },
24 height: {
25 type: String,
26 default: '200px'
27 }
28 },
29 data() {
30 return {
31 chart: null
32 }
33 },
34 mounted() {
35 this.initChart()
36 },
37 beforeDestroy() {
38 if (!this.chart) {
39 return
40 }
41 this.chart.dispose()
42 this.chart = null
43 },
44 methods: {
45 initChart() {
46 this.chart = echarts.init(document.getElementById(this.id))
47
48 const xAxisData = []
49 const data = []
50 const data2 = []
51 for (let i = 0; i < 50; i++) {
52 xAxisData.push(i)
53 data.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5)
54 data2.push((Math.sin(i / 5) * (i / 5 + 10) + i / 6) * 3)
55 }
56 this.chart.setOption({
57 backgroundColor: '#08263a',
58 grid: {
59 left: '5%',
60 right: '5%'
61 },
62 xAxis: [{
63 show: false,
64 data: xAxisData
65 }, {
66 show: false,
67 data: xAxisData
68 }],
69 visualMap: {
70 show: false,
71 min: 0,
72 max: 50,
73 dimension: 0,
74 inRange: {
75 color: ['#4a657a', '#308e92', '#b1cfa5', '#f5d69f', '#f5898b', '#ef5055']
76 }
77 },
78 yAxis: {
79 axisLine: {
80 show: false
81 },
82 axisLabel: {
83 textStyle: {
84 color: '#4a657a'
85 }
86 },
87 splitLine: {
88 show: true,
89 lineStyle: {
90 color: '#08263f'
91 }
92 },
93 axisTick: {
94 show: false
95 }
96 },
97 series: [{
98 name: 'back',
99 type: 'bar',
100 data: data2,
101 z: 1,
102 itemStyle: {
103 normal: {
104 opacity: 0.4,
105 barBorderRadius: 5,
106 shadowBlur: 3,
107 shadowColor: '#111'
108 }
109 }
110 }, {
111 name: 'Simulate Shadow',
112 type: 'line',
113 data,
114 z: 2,
115 showSymbol: false,
116 animationDelay: 0,
117 animationEasing: 'linear',
118 animationDuration: 1200,
119 lineStyle: {
120 normal: {
121 color: 'transparent'
122 }
123 },
124 areaStyle: {
125 normal: {
126 color: '#08263a',
127 shadowBlur: 50,
128 shadowColor: '#000'
129 }
130 }
131 }, {
132 name: 'front',
133 type: 'bar',
134 data,
135 xAxisIndex: 1,
136 z: 3,
137 itemStyle: {
138 normal: {
139 barBorderRadius: 5
140 }
141 }
142 }],
143 animationEasing: 'elasticOut',
144 animationEasingUpdate: 'elasticOut',
145 animationDelay(idx) {
146 return idx * 20
147 },
148 animationDelayUpdate(idx) {
149 return idx * 20
150 }
151 })
152 }
153 }
154 }
155 </script>
156
src/components/Charts/LineMarker.vue
File was created 1 <template>
2 <div :id="id" :class="className" :style="{height:height,width:width}" />
3 </template>
4
5 <script>
6 import echarts from 'echarts'
7 import resize from './mixins/resize'
8
9 export default {
10 mixins: [resize],
11 props: {
12 className: {
13 type: String,
14 default: 'chart'
15 },
16 id: {
17 type: String,
18 default: 'chart'
19 },
20 width: {
21 type: String,
22 default: '200px'
23 },
24 height: {
25 type: String,
26 default: '200px'
27 }
28 },
29 data() {
30 return {
31 chart: null
32 }
33 },
34 mounted() {
35 this.initChart()
36 },
37 beforeDestroy() {
38 if (!this.chart) {
39 return
40 }
41 this.chart.dispose()
42 this.chart = null
43 },
44 methods: {
45 initChart() {
46 this.chart = echarts.init(document.getElementById(this.id))
47
48 this.chart.setOption({
49 backgroundColor: '#394056',
50 title: {
51 top: 20,
52 text: 'Requests',
53 textStyle: {
54 fontWeight: 'normal',
55 fontSize: 16,
56 color: '#F1F1F3'
57 },
58 left: '1%'
59 },
60 tooltip: {
61 trigger: 'axis',
62 axisPointer: {
63 lineStyle: {
64 color: '#57617B'
65 }
66 }
67 },
68 legend: {
69 top: 20,
70 icon: 'rect',
71 itemWidth: 14,
72 itemHeight: 5,
73 itemGap: 13,
74 data: ['CMCC', 'CTCC', 'CUCC'],
75 right: '4%',
76 textStyle: {
77 fontSize: 12,
78 color: '#F1F1F3'
79 }
80 },
81 grid: {
82 top: 100,
83 left: '2%',
84 right: '2%',
85 bottom: '2%',
86 containLabel: true
87 },
88 xAxis: [{
89 type: 'category',
90 boundaryGap: false,
91 axisLine: {
92 lineStyle: {
93 color: '#57617B'
94 }
95 },
96 data: ['13:00', '13:05', '13:10', '13:15', '13:20', '13:25', '13:30', '13:35', '13:40', '13:45', '13:50', '13:55']
97 }],
98 yAxis: [{
99 type: 'value',
100 name: '(%)',
101 axisTick: {
102 show: false
103 },
104 axisLine: {
105 lineStyle: {
106 color: '#57617B'
107 }
108 },
109 axisLabel: {
110 margin: 10,
111 textStyle: {
112 fontSize: 14
113 }
114 },
115 splitLine: {
116 lineStyle: {
117 color: '#57617B'
118 }
119 }
120 }],
121 series: [{
122 name: 'CMCC',
123 type: 'line',
124 smooth: true,
125 symbol: 'circle',
126 symbolSize: 5,
127 showSymbol: false,
128 lineStyle: {
129 normal: {
130 width: 1
131 }
132 },
133 areaStyle: {
134 normal: {
135 color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
136 offset: 0,
137 color: 'rgba(137, 189, 27, 0.3)'
138 }, {
139 offset: 0.8,
140 color: 'rgba(137, 189, 27, 0)'
141 }], false),
142 shadowColor: 'rgba(0, 0, 0, 0.1)',
143 shadowBlur: 10
144 }
145 },
146 itemStyle: {
147 normal: {
148 color: 'rgb(137,189,27)',
149 borderColor: 'rgba(137,189,2,0.27)',
150 borderWidth: 12
151
152 }
153 },
154 data: [220, 182, 191, 134, 150, 120, 110, 125, 145, 122, 165, 122]
155 }, {
156 name: 'CTCC',
157 type: 'line',
158 smooth: true,
159 symbol: 'circle',
160 symbolSize: 5,
161 showSymbol: false,
162 lineStyle: {
163 normal: {
164 width: 1
165 }
166 },
167 areaStyle: {
168 normal: {
169 color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
170 offset: 0,
171 color: 'rgba(0, 136, 212, 0.3)'
172 }, {
173 offset: 0.8,
174 color: 'rgba(0, 136, 212, 0)'
175 }], false),
176 shadowColor: 'rgba(0, 0, 0, 0.1)',
177 shadowBlur: 10
178 }
179 },
180 itemStyle: {
181 normal: {
182 color: 'rgb(0,136,212)',
183 borderColor: 'rgba(0,136,212,0.2)',
184 borderWidth: 12
185
186 }
187 },
188 data: [120, 110, 125, 145, 122, 165, 122, 220, 182, 191, 134, 150]
189 }, {
190 name: 'CUCC',
191 type: 'line',
192 smooth: true,
193 symbol: 'circle',
194 symbolSize: 5,
195 showSymbol: false,
196 lineStyle: {
197 normal: {
198 width: 1
199 }
200 },
201 areaStyle: {
202 normal: {
203 color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
204 offset: 0,
205 color: 'rgba(219, 50, 51, 0.3)'
206 }, {
207 offset: 0.8,
208 color: 'rgba(219, 50, 51, 0)'
209 }], false),
210 shadowColor: 'rgba(0, 0, 0, 0.1)',
211 shadowBlur: 10
212 }
213 },
214 itemStyle: {
215 normal: {
216 color: 'rgb(219,50,51)',
217 borderColor: 'rgba(219,50,51,0.2)',
218 borderWidth: 12
219 }
220 },
221 data: [220, 182, 125, 145, 122, 191, 134, 150, 120, 110, 165, 122]
222 }]
223 })
224 }
225 }
226 }
227 </script>
228
src/components/Charts/MixChart.vue
File was created 1 <template>
2 <div :id="id" :class="className" :style="{height:height,width:width}" />
3 </template>
4
5 <script>
6 import echarts from 'echarts'
7 import resize from './mixins/resize'
8
9 export default {
10 mixins: [resize],
11 props: {
12 className: {
13 type: String,
14 default: 'chart'
15 },
16 id: {
17 type: String,
18 default: 'chart'
19 },
20 width: {
21 type: String,
22 default: '200px'
23 },
24 height: {
25 type: String,
26 default: '200px'
27 }
28 },
29 data() {
30 return {
31 chart: null
32 }
33 },
34 mounted() {
35 this.initChart()
36 },
37 beforeDestroy() {
38 if (!this.chart) {
39 return
40 }
41 this.chart.dispose()
42 this.chart = null
43 },
44 methods: {
45 initChart() {
46 this.chart = echarts.init(document.getElementById(this.id))
47 const xData = (function() {
48 const data = []
49 for (let i = 1; i < 13; i++) {
50 data.push(i + 'month')
51 }
52 return data
53 }())
54 this.chart.setOption({
55 backgroundColor: '#344b58',
56 title: {
57 text: 'statistics',
58 x: '20',
59 top: '20',
60 textStyle: {
61 color: '#fff',
62 fontSize: '22'
63 },
64 subtextStyle: {
65 color: '#90979c',
66 fontSize: '16'
67 }
68 },
69 tooltip: {
70 trigger: 'axis',
71 axisPointer: {
72 textStyle: {
73 color: '#fff'
74 }
75 }
76 },
77 grid: {
78 left: '5%',
79 right: '5%',
80 borderWidth: 0,
81 top: 150,
82 bottom: 95,
83 textStyle: {
84 color: '#fff'
85 }
86 },
87 legend: {
88 x: '5%',
89 top: '10%',
90 textStyle: {
91 color: '#90979c'
92 },
93 data: ['female', 'male', 'average']
94 },
95 calculable: true,
96 xAxis: [{
97 type: 'category',
98 axisLine: {
99 lineStyle: {
100 color: '#90979c'
101 }
102 },
103 splitLine: {
104 show: false
105 },
106 axisTick: {
107 show: false
108 },
109 splitArea: {
110 show: false
111 },
112 axisLabel: {
113 interval: 0
114
115 },
116 data: xData
117 }],
118 yAxis: [{
119 type: 'value',
120 splitLine: {
121 show: false
122 },
123 axisLine: {
124 lineStyle: {
125 color: '#90979c'
126 }
127 },
128 axisTick: {
129 show: false
130 },
131 axisLabel: {
132 interval: 0
133 },
134 splitArea: {
135 show: false
136 }
137 }],
138 dataZoom: [{
139 show: true,
140 height: 30,
141 xAxisIndex: [
142 0
143 ],
144 bottom: 30,
145 start: 10,
146 end: 80,
147 handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
148 handleSize: '110%',
149 handleStyle: {
150 color: '#d3dee5'
151
152 },
153 textStyle: {
154 color: '#fff' },
155 borderColor: '#90979c'
156
157 }, {
158 type: 'inside',
159 show: true,
160 height: 15,
161 start: 1,
162 end: 35
163 }],
164 series: [{
165 name: 'female',
166 type: 'bar',
167 stack: 'total',
168 barMaxWidth: 35,
169 barGap: '10%',
170 itemStyle: {
171 normal: {
172 color: 'rgba(255,144,128,1)',
173 label: {
174 show: true,
175 textStyle: {
176 color: '#fff'
177 },
178 position: 'insideTop',
179 formatter(p) {
180 return p.value > 0 ? p.value : ''
181 }
182 }
183 }
184 },
185 data: [
186 709,
187 1917,
188 2455,
189 2610,
190 1719,
191 1433,
192 1544,
193 3285,
194 5208,
195 3372,
196 2484,
197 4078
198 ]
199 },
200
201 {
202 name: 'male',
203 type: 'bar',
204 stack: 'total',
205 itemStyle: {
206 normal: {
207 color: 'rgba(0,191,183,1)',
208 barBorderRadius: 0,
209 label: {
210 show: true,
211 position: 'top',
212 formatter(p) {
213 return p.value > 0 ? p.value : ''
214 }
215 }
216 }
217 },
218 data: [
219 327,
220 1776,
221 507,
222 1200,
223 800,
224 482,
225 204,
226 1390,
227 1001,
228 951,
229 381,
230 220
231 ]
232 }, {
233 name: 'average',
234 type: 'line',
235 stack: 'total',
236 symbolSize: 10,
237 symbol: 'circle',
238 itemStyle: {
239 normal: {
240 color: 'rgba(252,230,48,1)',
241 barBorderRadius: 0,
242 label: {
243 show: true,
244 position: 'top',
245 formatter(p) {
246 return p.value > 0 ? p.value : ''
247 }
248 }
249 }
250 },
251 data: [
252 1036,
253 3693,
254 2962,
255 3810,
256 2519,
257 1915,
258 1748,
259 4675,
260 6209,
261 4323,
262 2865,
263 4298
264 ]
265 }
266 ]
267 })
268 }
269 }
270 }
271 </script>
272
src/components/Charts/mixins/resize.js
File was created 1 import { debounce } from '@/utils'
2
3 export default {
4 data() {
5 return {
6 $_sidebarElm: null,
7 $_resizeHandler: null
8 }
9 },
10 mounted() {
11 this.initListener()
12 },
13 activated() {
14 if (!this.$_resizeHandler) {
15 // avoid duplication init
16 this.initListener()
17 }
18
19 // when keep-alive chart activated, auto resize
20 this.resize()
21 },
22 beforeDestroy() {
23 this.destroyListener()
24 },
25 deactivated() {
26 this.destroyListener()
27 },
28 methods: {
29 // use $_ for mixins properties
30 // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
31 $_sidebarResizeHandler(e) {
32 if (e.propertyName === 'width') {
33 this.$_resizeHandler()
34 }
35 },
36 initListener() {
37 this.$_resizeHandler = debounce(() => {
38 this.resize()
39 }, 100)
40 window.addEventListener('resize', this.$_resizeHandler)
41
42 this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
43 this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
44 },
45 destroyListener() {
46 window.removeEventListener('resize', this.$_resizeHandler)
47 this.$_resizeHandler = null
48
49 this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
50 },
51 resize() {
52 const { chart } = this
53 chart && chart.resize()
54 }
55 }
56 }
57
src/components/DndList/index.vue
File was created 1 <template>
2 <div class="dndList">
3 <div :style="{width:width1}" class="dndList-list">
4 <h3>{{ list1Title }}</h3>
5 <draggable :set-data="setData" :list="list1" group="article" class="dragArea">
6 <div v-for="element in list1" :key="element.id" class="list-complete-item">
7 <div class="list-complete-item-handle">
8 {{ element.id }}[{{ element.author }}] {{ element.title }}
9 </div>
10 <div style="position:absolute;right:0px;">
11 <span style="float: right ;margin-top: -20px;margin-right:5px;" @click="deleteEle(element)">
12 <i style="color:#ff4949" class="el-icon-delete" />
13 </span>
14 </div>
15 </div>
16 </draggable>
17 </div>
18 <div :style="{width:width2}" class="dndList-list">
19 <h3>{{ list2Title }}</h3>
20 <draggable :list="list2" group="article" class="dragArea">
21 <div v-for="element in list2" :key="element.id" class="list-complete-item">
22 <div class="list-complete-item-handle2" @click="pushEle(element)">
23 {{ element.id }} [{{ element.author }}] {{ element.title }}
24 </div>
25 </div>
26 </draggable>
27 </div>
28 </div>
29 </template>
30
31 <script>
32 import draggable from 'vuedraggable'
33
34 export default {
35 name: 'DndList',
36 components: { draggable },
37 props: {
38 list1: {
39 type: Array,
40 default() {
41 return []
42 }
43 },
44 list2: {
45 type: Array,
46 default() {
47 return []
48 }
49 },
50 list1Title: {
51 type: String,
52 default: 'list1'
53 },
54 list2Title: {
55 type: String,
56 default: 'list2'
57 },
58 width1: {
59 type: String,
60 default: '48%'
61 },
62 width2: {
63 type: String,
64 default: '48%'
65 }
66 },
67 methods: {
68 isNotInList1(v) {
69 return this.list1.every(k => v.id !== k.id)
70 },
71 isNotInList2(v) {
72 return this.list2.every(k => v.id !== k.id)
73 },
74 deleteEle(ele) {
75 for (const item of this.list1) {
76 if (item.id === ele.id) {
77 const index = this.list1.indexOf(item)
78 this.list1.splice(index, 1)
79 break
80 }
81 }
82 if (this.isNotInList2(ele)) {
83 this.list2.unshift(ele)
84 }
85 },
86 pushEle(ele) {
87 for (const item of this.list2) {
88 if (item.id === ele.id) {
89 const index = this.list2.indexOf(item)
90 this.list2.splice(index, 1)
91 break
92 }
93 }
94 if (this.isNotInList1(ele)) {
95 this.list1.push(ele)
96 }
97 },
98 setData(dataTransfer) {
99 // to avoid Firefox bug
100 // Detail see : https://github.com/RubaXa/Sortable/issues/1012
101 dataTransfer.setData('Text', '')
102 }
103 }
104 }
105 </script>
106
107 <style lang="scss" scoped>
108 .dndList {
109 background: #fff;
110 padding-bottom: 40px;
111 &:after {
112 content: "";
113 display: table;
114 clear: both;
115 }
116 .dndList-list {
117 float: left;
118 padding-bottom: 30px;
119 &:first-of-type {
120 margin-right: 2%;
121 }
122 .dragArea {
123 margin-top: 15px;
124 min-height: 50px;
125 padding-bottom: 30px;
126 }
127 }
128 }
129
130 .list-complete-item {
131 cursor: pointer;
132 position: relative;
133 font-size: 14px;
134 padding: 5px 12px;
135 margin-top: 4px;
136 border: 1px solid #bfcbd9;
137 transition: all 1s;
138 }
139
140 .list-complete-item-handle {
141 overflow: hidden;
142 text-overflow: ellipsis;
143 white-space: nowrap;
144 margin-right: 50px;
145 }
146
147 .list-complete-item-handle2 {
148 overflow: hidden;
149 text-overflow: ellipsis;
150 white-space: nowrap;
151 margin-right: 20px;
152 }
153
154 .list-complete-item.sortable-chosen {
155 background: #4AB7BD;
156 }
157
158 .list-complete-item.sortable-ghost {
159 background: #30B08F;
160 }
161
162 .list-complete-enter,
163 .list-complete-leave-active {
164 opacity: 0;
165 }
166 </style>
167
src/components/DragSelect/index.vue
File was created 1 <template>
2 <el-select ref="dragSelect" v-model="selectVal" v-bind="$attrs" class="drag-select" multiple v-on="$listeners">
3 <slot />
4 </el-select>
5 </template>
6
7 <script>
8 import Sortable from 'sortablejs'
9
10 export default {
11 name: 'DragSelect',
12 props: {
13 value: {
14 type: Array,
15 required: true
16 }
17 },
18 computed: {
19 selectVal: {
20 get() {
21 return [...this.value]
22 },
23 set(val) {
24 this.$emit('input', [...val])
25 }
26 }
27 },
28 mounted() {
29 this.setSort()
30 },
31 methods: {
32 setSort() {
33 const el = this.$refs.dragSelect.$el.querySelectorAll('.el-select__tags > span')[0]
34 this.sortable = Sortable.create(el, {
35 ghostClass: 'sortable-ghost', // Class name for the drop placeholder,
36 setData: function(dataTransfer) {
37 dataTransfer.setData('Text', '')
38 // to avoid Firefox bug
39 // Detail see : https://github.com/RubaXa/Sortable/issues/1012
40 },
41 onEnd: evt => {
42 const targetRow = this.value.splice(evt.oldIndex, 1)[0]
43 this.value.splice(evt.newIndex, 0, targetRow)
44 }
45 })
46 }
47 }
48 }
49 </script>
50
51 <style scoped>
52 .drag-select >>> .sortable-ghost {
53 opacity: .8;
54 color: #fff!important;
55 background: #42b983!important;
56 }
57
58 .drag-select >>> .el-tag {
59 cursor: pointer;
60 }
61 </style>
62
src/components/Dropzone/index.vue
File was created 1 <template>
2 <div :id="id" :ref="id" :action="url" class="dropzone">
3 <input type="file" name="file">
4 </div>
5 </template>
6
7 <script>
8 import Dropzone from 'dropzone'
9 import 'dropzone/dist/dropzone.css'
10 // import { getToken } from 'api/qiniu';
11
12 Dropzone.autoDiscover = false
13
14 export default {
15 props: {
16 id: {
17 type: String,
18 required: true
19 },
20 url: {
21 type: String,
22 required: true
23 },
24 clickable: {
25 type: Boolean,
26 default: true
27 },
28 defaultMsg: {
29 type: String,
30 default: '上传图片'
31 },
32 acceptedFiles: {
33 type: String,
34 default: ''
35 },
36 thumbnailHeight: {
37 type: Number,
38 default: 200
39 },
40 thumbnailWidth: {
41 type: Number,
42 default: 200
43 },
44 showRemoveLink: {
45 type: Boolean,
46 default: true
47 },
48 maxFilesize: {
49 type: Number,
50 default: 2
51 },
52 maxFiles: {
53 type: Number,
54 default: 3
55 },
56 autoProcessQueue: {
57 type: Boolean,
58 default: true
59 },
60 useCustomDropzoneOptions: {
61 type: Boolean,
62 default: false
63 },
64 defaultImg: {
65 default: '',
66 type: [String, Array]
67 },
68 couldPaste: {
69 type: Boolean,
70 default: false
71 }
72 },
73 data() {
74 return {
75 dropzone: '',
76 initOnce: true
77 }
78 },
79 watch: {
80 defaultImg(val) {
81 if (val.length === 0) {
82 this.initOnce = false
83 return
84 }
85 if (!this.initOnce) return
86 this.initImages(val)
87 this.initOnce = false
88 }
89 },
90 mounted() {
91 const element = document.getElementById(this.id)
92 const vm = this
93 this.dropzone = new Dropzone(element, {
94 clickable: this.clickable,
95 thumbnailWidth: this.thumbnailWidth,
96 thumbnailHeight: this.thumbnailHeight,
97 maxFiles: this.maxFiles,
98 maxFilesize: this.maxFilesize,
99 dictRemoveFile: 'Remove',
100 addRemoveLinks: this.showRemoveLink,
101 acceptedFiles: this.acceptedFiles,
102 autoProcessQueue: this.autoProcessQueue,
103 dictDefaultMessage: '<i style="margin-top: 3em;display: inline-block" class="material-icons">' + this.defaultMsg + '</i><br>Drop files here to upload',
104 dictMaxFilesExceeded: '只能一个图',
105 previewTemplate: '<div class="dz-preview dz-file-preview"> <div class="dz-image" style="width:' + this.thumbnailWidth + 'px;height:' + this.thumbnailHeight + 'px" ><img style="width:' + this.thumbnailWidth + 'px;height:' + this.thumbnailHeight + 'px" data-dz-thumbnail /></div> <div class="dz-details"><div class="dz-size"><span data-dz-size></span></div> <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div> <div class="dz-error-message"><span data-dz-errormessage></span></div> <div class="dz-success-mark"> <i class="material-icons">done</i> </div> <div class="dz-error-mark"><i class="material-icons">error</i></div></div>',
106 init() {
107 const val = vm.defaultImg
108 if (!val) return
109 if (Array.isArray(val)) {
110 if (val.length === 0) return
111 val.map((v, i) => {
112 const mockFile = { name: 'name' + i, size: 12345, url: v }
113 this.options.addedfile.call(this, mockFile)
114 this.options.thumbnail.call(this, mockFile, v)
115 mockFile.previewElement.classList.add('dz-success')
116 mockFile.previewElement.classList.add('dz-complete')
117 vm.initOnce = false
118 return true
119 })
120 } else {
121 const mockFile = { name: 'name', size: 12345, url: val }
122 this.options.addedfile.call(this, mockFile)
123 this.options.thumbnail.call(this, mockFile, val)
124 mockFile.previewElement.classList.add('dz-success')
125 mockFile.previewElement.classList.add('dz-complete')
126 vm.initOnce = false
127 }
128 },
129 accept: (file, done) => {
130 /* 七牛*/
131 // const token = this.$store.getters.token;
132 // getToken(token).then(response => {
133 // file.token = response.data.qiniu_token;
134 // file.key = response.data.qiniu_key;
135 // file.url = response.data.qiniu_url;
136 // done();
137 // })
138 done()
139 },
140 sending: (file, xhr, formData) => {
141 // formData.append('token', file.token);
142 // formData.append('key', file.key);
143 vm.initOnce = false
144 }
145 })
146
147 if (this.couldPaste) {
148 document.addEventListener('paste', this.pasteImg)
149 }
150
151 this.dropzone.on('success', file => {
152 vm.$emit('dropzone-success', file, vm.dropzone.element)
153 })
154 this.dropzone.on('addedfile', file => {
155 vm.$emit('dropzone-fileAdded', file)
156 })
157 this.dropzone.on('removedfile', file => {
158 vm.$emit('dropzone-removedFile', file)
159 })
160 this.dropzone.on('error', (file, error, xhr) => {
161 vm.$emit('dropzone-error', file, error, xhr)
162 })
163 this.dropzone.on('successmultiple', (file, error, xhr) => {
164 vm.$emit('dropzone-successmultiple', file, error, xhr)
165 })
166 },
167 destroyed() {
168 document.removeEventListener('paste', this.pasteImg)
169 this.dropzone.destroy()
170 },
171 methods: {
172 removeAllFiles() {
173 this.dropzone.removeAllFiles(true)
174 },
175 processQueue() {
176 this.dropzone.processQueue()
177 },
178 pasteImg(event) {
179 const items = (event.clipboardData || event.originalEvent.clipboardData).items
180 if (items[0].kind === 'file') {
181 this.dropzone.addFile(items[0].getAsFile())
182 }
183 },
184 initImages(val) {
185 if (!val) return
186 if (Array.isArray(val)) {
187 val.map((v, i) => {
188 const mockFile = { name: 'name' + i, size: 12345, url: v }
189 this.dropzone.options.addedfile.call(this.dropzone, mockFile)
190 this.dropzone.options.thumbnail.call(this.dropzone, mockFile, v)
191 mockFile.previewElement.classList.add('dz-success')
192 mockFile.previewElement.classList.add('dz-complete')
193 return true
194 })
195 } else {
196 const mockFile = { name: 'name', size: 12345, url: val }
197 this.dropzone.options.addedfile.call(this.dropzone, mockFile)
198 this.dropzone.options.thumbnail.call(this.dropzone, mockFile, val)
199 mockFile.previewElement.classList.add('dz-success')
200 mockFile.previewElement.classList.add('dz-complete')
201 }
202 }
203
204 }
205 }
206 </script>
207
208 <style scoped>
209 .dropzone {
210 border: 2px solid #E5E5E5;
211 font-family: 'Roboto', sans-serif;
212 color: #777;
213 transition: background-color .2s linear;
214 padding: 5px;
215 }
216
217 .dropzone:hover {
218 background-color: #F6F6F6;
219 }
220
221 i {
222 color: #CCC;
223 }
224
225 .dropzone .dz-image img {
226 width: 100%;
227 height: 100%;
228 }
229
230 .dropzone input[name='file'] {
231 display: none;
232 }
233
234 .dropzone .dz-preview .dz-image {
235 border-radius: 0px;
236 }
237
238 .dropzone .dz-preview:hover .dz-image img {
239 transform: none;
240 filter: none;
241 width: 100%;
242 height: 100%;
243 }
244
245 .dropzone .dz-preview .dz-details {
246 bottom: 0px;
247 top: 0px;
248 color: white;
249 background-color: rgba(33, 150, 243, 0.8);
250 transition: opacity .2s linear;
251 text-align: left;
252 }
253
254 .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
255 background-color: transparent;
256 }
257
258 .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
259 border: none;
260 }
261
262 .dropzone .dz-preview .dz-details .dz-filename:hover span {
263 background-color: transparent;
264 border: none;
265 }
266
267 .dropzone .dz-preview .dz-remove {
268 position: absolute;
269 z-index: 30;
270 color: white;
271 margin-left: 15px;
272 padding: 10px;
273 top: inherit;
274 bottom: 15px;
275 border: 2px white solid;
276 text-decoration: none;
277 text-transform: uppercase;
278 font-size: 0.8rem;
279 font-weight: 800;
280 letter-spacing: 1.1px;
281 opacity: 0;
282 }
283
284 .dropzone .dz-preview:hover .dz-remove {
285 opacity: 1;
286 }
287
288 .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
289 margin-left: -40px;
290 margin-top: -50px;
291 }
292
293 .dropzone .dz-preview .dz-success-mark i, .dropzone .dz-preview .dz-error-mark i {
294 color: white;
295 font-size: 5rem;
296 }
297 </style>
298
src/components/ErrorLog/index.vue
File was created 1 <template>
2 <div v-if="errorLogs.length>0">
3 <el-badge :is-dot="true" style="line-height: 25px;margin-top: -5px;" @click.native="dialogTableVisible=true">
4 <el-button style="padding: 8px 10px;" size="small" type="danger">
5 <svg-icon icon-class="bug" />
6 </el-button>
7 </el-badge>
8
9 <el-dialog :visible.sync="dialogTableVisible" width="80%" append-to-body>
10 <div slot="title">
11 <span style="padding-right: 10px;">Error Log</span>
12 <el-button size="mini" type="primary" icon="el-icon-delete" @click="clearAll">Clear All</el-button>
13 </div>
14 <el-table :data="errorLogs" border>
15 <el-table-column label="Message">
16 <template slot-scope="{row}">
17 <div>
18 <span class="message-title">Msg:</span>
19 <el-tag type="danger">
20 {{ row.err.message }}
21 </el-tag>
22 </div>
23 <br>
24 <div>
25 <span class="message-title" style="padding-right: 10px;">Info: </span>
26 <el-tag type="warning">
27 {{ row.vm.$vnode.tag }} error in {{ row.info }}
28 </el-tag>
29 </div>
30 <br>
31 <div>
32 <span class="message-title" style="padding-right: 16px;">Url: </span>
33 <el-tag type="success">
34 {{ row.url }}
35 </el-tag>
36 </div>
37 </template>
38 </el-table-column>
39 <el-table-column label="Stack">
40 <template slot-scope="scope">
41 {{ scope.row.err.stack }}
42 </template>
43 </el-table-column>
44 </el-table>
45 </el-dialog>
46 </div>
47 </template>
48
49 <script>
50 export default {
51 name: 'ErrorLog',
52 data() {
53 return {
54 dialogTableVisible: false
55 }
56 },
57 computed: {
58 errorLogs() {
59 return this.$store.getters.errorLogs
60 }
61 },
62 methods: {
63 clearAll() {
64 this.dialogTableVisible = false
65 this.$store.dispatch('errorLog/clearErrorLog')
66 }
67 }
68 }
69 </script>
70
71 <style scoped>
72 .message-title {
73 font-size: 16px;
74 color: #333;
75 font-weight: bold;
76 padding-right: 8px;
77 }
78 </style>
79
src/components/GithubCorner/index.vue
File was created 1 <template>
2 <a href="https://github.com/PanJiaChen/vue-element-admin" target="_blank" class="github-corner" aria-label="View source on Github">
3 <svg
4 width="80"
5 height="80"
6 viewBox="0 0 250 250"
7 style="fill:#40c9c6; color:#fff;"
8 aria-hidden="true"
9 >
10 <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" />
11 <path
12 d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
13 fill="currentColor"
14 style="transform-origin: 130px 106px;"
15 class="octo-arm"
16 />
17 <path
18 d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
19 fill="currentColor"
20 class="octo-body"
21 />
22 </svg>
23 </a>
24 </template>
25
26 <style scoped>
27 .github-corner:hover .octo-arm {
28 animation: octocat-wave 560ms ease-in-out
29 }
30
31 @keyframes octocat-wave {
32 0%,
33 100% {
34 transform: rotate(0)
35 }
36 20%,
37 60% {
38 transform: rotate(-25deg)
39 }
40 40%,
41 80% {
42 transform: rotate(10deg)
43 }
44 }
45
46 @media (max-width:500px) {
47 .github-corner:hover .octo-arm {
48 animation: none
49 }
50 .github-corner .octo-arm {
51 animation: octocat-wave 560ms ease-in-out
52 }
53 }
54 </style>
55
src/components/Hamburger/index.vue 100644 → 100755
1 <template> 1 <template>
2 <div style="padding: 0 15px;" @click="toggleClick"> 2 <div style="padding: 0 15px;" @click="toggleClick">
3 <svg 3 <svg
4 :class="{'is-active':isActive}" 4 :class="{'is-active':isActive}"
5 class="hamburger" 5 class="hamburger"
6 viewBox="0 0 1024 1024" 6 viewBox="0 0 1024 1024"
7 xmlns="http://www.w3.org/2000/svg" 7 xmlns="http://www.w3.org/2000/svg"
8 width="64" 8 width="64"
9 height="64" 9 height="64"
10 > 10 >
11 <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" /> 11 <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
12 </svg> 12 </svg>
13 </div> 13 </div>
14 </template> 14 </template>
15 15
16 <script> 16 <script>
17 export default { 17 export default {
18 name: 'Hamburger', 18 name: 'Hamburger',
19 props: { 19 props: {
20 isActive: { 20 isActive: {
21 type: Boolean, 21 type: Boolean,
22 default: false 22 default: false
23 } 23 }
24 }, 24 },
25 methods: { 25 methods: {
26 toggleClick() { 26 toggleClick() {
27 this.$emit('toggleClick') 27 this.$emit('toggleClick')
28 } 28 }
29 } 29 }
30 } 30 }
31 </script> 31 </script>
32 32
33 <style scoped> 33 <style scoped>
34 .hamburger { 34 .hamburger {
35 display: inline-block; 35 display: inline-block;
36 vertical-align: middle; 36 vertical-align: middle;
37 width: 20px; 37 width: 20px;
38 height: 20px; 38 height: 20px;
39 } 39 }
40 40
41 .hamburger.is-active { 41 .hamburger.is-active {
42 transform: rotate(180deg); 42 transform: rotate(180deg);
43 } 43 }
44 </style> 44 </style>
45 45
src/components/HeaderSearch/index.vue
File was created 1 <template>
2 <div :class="{'show':show}" class="header-search">
3 <svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
4 <el-select
5 ref="headerSearchSelect"
6 v-model="search"
7 :remote-method="querySearch"
8 filterable
9 default-first-option
10 remote
11 placeholder="Search"
12 class="header-search-select"
13 @change="change"
14 >
15 <el-option v-for="item in options" :key="item.path" :value="item" :label="item.title.join(' > ')" />
16 </el-select>
17 </div>
18 </template>
19
20 <script>
21 // fuse is a lightweight fuzzy-search module
22 // make search results more in line with expectations
23 import Fuse from 'fuse.js'
24 import path from 'path'
25 import i18n from '@/lang'
26
27 export default {
28 name: 'HeaderSearch',
29 data() {
30 return {
31 search: '',
32 options: [],
33 searchPool: [],
34 show: false,
35 fuse: undefined
36 }
37 },
38 computed: {
39 routes() {
40 return this.$store.getters.permission_routes
41 },
42 lang() {
43 return this.$store.getters.language
44 },
45 supportPinyinSearch() {
46 return this.$store.state.settings.supportPinyinSearch
47 }
48 },
49 watch: {
50 lang() {
51 this.searchPool = this.generateRoutes(this.routes)
52 },
53 routes() {
54 this.searchPool = this.generateRoutes(this.routes)
55 },
56 searchPool(list) {
57 // Support pinyin search
58 if (this.lang === 'zh' && this.supportPinyinSearch) {
59 this.addPinyinField(list)
60 }
61 this.initFuse(list)
62 },
63 show(value) {
64 if (value) {
65 document.body.addEventListener('click', this.close)
66 } else {
67 document.body.removeEventListener('click', this.close)
68 }
69 }
70 },
71 mounted() {
72 this.searchPool = this.generateRoutes(this.routes)
73 },
74 methods: {
75 async addPinyinField(list) {
76 const { default: pinyin } = await import('pinyin')
77 if (Array.isArray(list)) {
78 list.forEach(element => {
79 const title = element.title
80 if (Array.isArray(title)) {
81 title.forEach(v => {
82 v = pinyin(v, {
83 style: pinyin.STYLE_NORMAL
84 }).join('')
85 element.pinyinTitle = v
86 })
87 }
88 })
89 return list
90 }
91 },
92 click() {
93 this.show = !this.show
94 if (this.show) {
95 this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()
96 }
97 },
98 close() {
99 this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()
100 this.options = []
101 this.show = false
102 },
103 change(val) {
104 this.$router.push(val.path)
105 this.search = ''
106 this.options = []
107 this.$nextTick(() => {
108 this.show = false
109 })
110 },
111 initFuse(list) {
112 this.fuse = new Fuse(list, {
113 shouldSort: true,
114 threshold: 0.4,
115 location: 0,
116 distance: 100,
117 maxPatternLength: 32,
118 minMatchCharLength: 1,
119 keys: [{
120 name: 'title',
121 weight: 0.7
122 }, {
123 name: 'pinyinTitle',
124 weight: 0.3
125 }, {
126 name: 'path',
127 weight: 0.3
128 }]
129 })
130 },
131 // Filter out the routes that can be displayed in the sidebar
132 // And generate the internationalized title
133 generateRoutes(routes, basePath = '/', prefixTitle = []) {
134 let res = []
135 for (const router of routes) {
136 // skip hidden router
137 if (router.hidden) { continue }
138 const data = {
139 path: path.resolve(basePath, router.path),
140 title: [...prefixTitle]
141 }
142 if (router.meta && router.meta.title) {
143 // generate internationalized title
144 const i18ntitle = i18n.t(`route.${router.meta.title}`)
145 data.title = [...data.title, i18ntitle]
146 if (router.redirect !== 'noRedirect') {
147 // only push the routes with title
148 // special case: need to exclude parent router without redirect
149 res.push(data)
150 }
151 }
152 // recursive child routes
153 if (router.children) {
154 const tempRoutes = this.generateRoutes(router.children, data.path, data.title)
155 if (tempRoutes.length >= 1) {
156 res = [...res, ...tempRoutes]
157 }
158 }
159 }
160 return res
161 },
162 querySearch(query) {
163 if (query !== '') {
164 this.options = this.fuse.search(query)
165 } else {
166 this.options = []
167 }
168 }
169 }
170 }
171 </script>
172
173 <style lang="scss" scoped>
174 .header-search {
175 font-size: 0 !important;
176 .search-icon {
177 cursor: pointer;
178 font-size: 18px;
179 vertical-align: middle;
180 }
181 .header-search-select {
182 font-size: 18px;
183 transition: width 0.2s;
184 width: 0;
185 overflow: hidden;
186 background: transparent;
187 border-radius: 0;
188 display: inline-block;
189 vertical-align: middle;
190 /deep/ .el-input__inner {
191 border-radius: 0;
192 border: 0;
193 padding-left: 0;
194 padding-right: 0;
195 box-shadow: none !important;
196 border-bottom: 1px solid #d9d9d9;
197 vertical-align: middle;
198 }
199 }
200 &.show {
201 .header-search-select {
202 width: 210px;
203 margin-left: 10px;
204 }
205 }
206 }
207 </style>
208
src/components/ImageCropper/index.vue
File was created 1 <template>
2 <div v-show="value" class="vue-image-crop-upload">
3 <div class="vicp-wrap">
4 <div class="vicp-close" @click="off">
5 <i class="vicp-icon4" />
6 </div>
7
8 <div v-show="step == 1" class="vicp-step1">
9 <div
10 class="vicp-drop-area"
11 @dragleave="preventDefault"
12 @dragover="preventDefault"
13 @dragenter="preventDefault"
14 @click="handleClick"
15 @drop="handleChange"
16 >
17 <i v-show="loading != 1" class="vicp-icon1">
18 <i class="vicp-icon1-arrow" />
19 <i class="vicp-icon1-body" />
20 <i class="vicp-icon1-bottom" />
21 </i>
22 <span v-show="loading !== 1" class="vicp-hint">{{ lang.hint }}</span>
23 <span v-show="!isSupported" class="vicp-no-supported-hint">{{ lang.noSupported }}</span>
24 <input v-show="false" v-if="step == 1" ref="fileinput" type="file" @change="handleChange">
25 </div>
26 <div v-show="hasError" class="vicp-error">
27 <i class="vicp-icon2" />
28 {{ errorMsg }}
29 </div>
30 <div class="vicp-operate">
31 <a @click="off" @mousedown="ripple">{{ lang.btn.off }}</a>
32 </div>
33 </div>
34
35 <div v-if="step == 2" class="vicp-step2">
36 <div class="vicp-crop">
37 <div v-show="true" class="vicp-crop-left">
38 <div class="vicp-img-container">
39 <img
40 ref="img"
41 :src="sourceImgUrl"
42 :style="sourceImgStyle"
43 class="vicp-img"
44 draggable="false"
45 @drag="preventDefault"
46 @dragstart="preventDefault"
47 @dragend="preventDefault"
48 @dragleave="preventDefault"
49 @dragover="preventDefault"
50 @dragenter="preventDefault"
51 @drop="preventDefault"
52 @touchstart="imgStartMove"
53 @touchmove="imgMove"
54 @touchend="createImg"
55 @touchcancel="createImg"
56 @mousedown="imgStartMove"
57 @mousemove="imgMove"
58 @mouseup="createImg"
59 @mouseout="createImg"
60 >
61 <div :style="sourceImgShadeStyle" class="vicp-img-shade vicp-img-shade-1" />
62 <div :style="sourceImgShadeStyle" class="vicp-img-shade vicp-img-shade-2" />
63 </div>
64
65 <div class="vicp-range">
66 <input
67 :value="scale.range"
68 type="range"
69 step="1"
70 min="0"
71 max="100"
72 @input="zoomChange"
73 >
74 <i
75 class="vicp-icon5"
76 @mousedown="startZoomSub"
77 @mouseout="endZoomSub"
78 @mouseup="endZoomSub"
79 />
80 <i
81 class="vicp-icon6"
82 @mousedown="startZoomAdd"
83 @mouseout="endZoomAdd"
84 @mouseup="endZoomAdd"
85 />
86 </div>
87
88 <div v-if="!noRotate" class="vicp-rotate">
89 <i @mousedown="startRotateLeft" @mouseout="endRotate" @mouseup="endRotate">↺</i>
90 <i @mousedown="startRotateRight" @mouseout="endRotate" @mouseup="endRotate">↻</i>
91 </div>
92 </div>
93 <div v-show="true" class="vicp-crop-right">
94 <div class="vicp-preview">
95 <div v-if="!noSquare" class="vicp-preview-item">
96 <img :src="createImgUrl" :style="previewStyle">
97 <span>{{ lang.preview }}</span>
98 </div>
99 <div v-if="!noCircle" class="vicp-preview-item vicp-preview-item-circle">
100 <img :src="createImgUrl" :style="previewStyle">
101 <span>{{ lang.preview }}</span>
102 </div>
103 </div>
104 </div>
105 </div>
106 <div class="vicp-operate">
107 <a @click="setStep(1)" @mousedown="ripple">{{ lang.btn.back }}</a>
108 <a class="vicp-operate-btn" @click="prepareUpload" @mousedown="ripple">{{ lang.btn.save }}</a>
109 </div>
110 </div>
111
112 <div v-if="step == 3" class="vicp-step3">
113 <div class="vicp-upload">
114 <span v-show="loading === 1" class="vicp-loading">{{ lang.loading }}</span>
115 <div class="vicp-progress-wrap">
116 <span v-show="loading === 1" :style="progressStyle" class="vicp-progress" />
117 </div>
118 <div v-show="hasError" class="vicp-error">
119 <i class="vicp-icon2" />
120 {{ errorMsg }}
121 </div>
122 <div v-show="loading === 2" class="vicp-success">
123 <i class="vicp-icon3" />
124 {{ lang.success }}
125 </div>
126 </div>
127 <div class="vicp-operate">
128 <a @click="setStep(2)" @mousedown="ripple">{{ lang.btn.back }}</a>
129 <a @click="off" @mousedown="ripple">{{ lang.btn.close }}</a>
130 </div>
131 </div>
132 <canvas v-show="false" ref="canvas" :width="width" :height="height" />
133 </div>
134 </div>
135 </template>
136
137 <script>
138 'use strict'
139 import request from '@/utils/request'
140 import language from './utils/language.js'
141 import mimes from './utils/mimes.js'
142 import data2blob from './utils/data2blob.js'
143 import effectRipple from './utils/effectRipple.js'
144 export default {
145 props: {
146 // 域,上传文件name,触发事件会带上(如果一个页面多个图片上传控件,可以做区分
147 field: {
148 type: String,
149 default: 'avatar'
150 },
151 // 原名key,类似于id,触发事件会带上(如果一个页面多个图片上传控件,可以做区分
152 ki: {
153 type: Number,
154 default: 0
155 },
156 // 显示该控件与否
157 value: {
158 type: Boolean,
159 default: true
160 },
161 // 上传地址
162 url: {
163 type: String,
164 default: ''
165 },
166 // 其他要上传文件附带的数据,对象格式
167 params: {
168 type: Object,
169 default: null
170 },
171 // Add custom headers
172 headers: {
173 type: Object,
174 default: null
175 },
176 // 剪裁图片的宽
177 width: {
178 type: Number,
179 default: 200
180 },
181 // 剪裁图片的高
182 height: {
183 type: Number,
184 default: 200
185 },
186 // 不显示旋转功能
187 noRotate: {
188 type: Boolean,
189 default: true
190 },
191 // 不预览圆形图片
192 noCircle: {
193 type: Boolean,
194 default: false
195 },
196 // 不预览方形图片
197 noSquare: {
198 type: Boolean,
199 default: false
200 },
201 // 单文件大小限制
202 maxSize: {
203 type: Number,
204 default: 10240
205 },
206 // 语言类型
207 langType: {
208 type: String,
209 default: 'zh'
210 },
211 // 语言包
212 langExt: {
213 type: Object,
214 default: null
215 },
216 // 图片上传格式
217 imgFormat: {
218 type: String,
219 default: 'png'
220 },
221 // 是否支持跨域
222 withCredentials: {
223 type: Boolean,
224 default: false
225 }
226 },
227 data() {
228 const { imgFormat, langType, langExt, width, height } = this
229 let isSupported = true
230 const allowImgFormat = ['jpg', 'png']
231 const tempImgFormat =
232 allowImgFormat.indexOf(imgFormat) === -1 ? 'jpg' : imgFormat
233 const lang = language[langType] ? language[langType] : language['en']
234 const mime = mimes[tempImgFormat]
235 // 规范图片格式
236 this.imgFormat = tempImgFormat
237 if (langExt) {
238 Object.assign(lang, langExt)
239 }
240 if (typeof FormData !== 'function') {
241 isSupported = false
242 }
243 return {
244 // 图片的mime
245 mime,
246 // 语言包
247 lang,
248 // 浏览器是否支持该控件
249 isSupported,
250 // 浏览器是否支持触屏事件
251 isSupportTouch: document.hasOwnProperty('ontouchstart'),
252 // 步骤
253 step: 1, // 1选择文件 2剪裁 3上传
254 // 上传状态及进度
255 loading: 0, // 0未开始 1正在 2成功 3错误
256 progress: 0,
257 // 是否有错误及错误信息
258 hasError: false,
259 errorMsg: '',
260 // 需求图宽高比
261 ratio: width / height,
262 // 原图地址、生成图片地址
263 sourceImg: null,
264 sourceImgUrl: '',
265 createImgUrl: '',
266 // 原图片拖动事件初始值
267 sourceImgMouseDown: {
268 on: false,
269 mX: 0, // 鼠标按下的坐标
270 mY: 0,
271 x: 0, // scale原图坐标
272 y: 0
273 },
274 // 生成图片预览的容器大小
275 previewContainer: {
276 width: 100,
277 height: 100
278 },
279 // 原图容器宽高
280 sourceImgContainer: {
281 // sic
282 width: 240,
283 height: 184 // 如果生成图比例与此一致会出现bug,先改成特殊的格式吧,哈哈哈
284 },
285 // 原图展示属性
286 scale: {
287 zoomAddOn: false, // 按钮缩放事件开启
288 zoomSubOn: false, // 按钮缩放事件开启
289 range: 1, // 最大100
290 rotateLeft: false, // 按钮向左旋转事件开启
291 rotateRight: false, // 按钮向右旋转事件开启
292 degree: 0, // 旋转度数
293 x: 0,
294 y: 0,
295 width: 0,
296 height: 0,
297 maxWidth: 0,
298 maxHeight: 0,
299 minWidth: 0, // 最宽
300 minHeight: 0,
301 naturalWidth: 0, // 原宽
302 naturalHeight: 0
303 }
304 }
305 },
306 computed: {
307 // 进度条样式
308 progressStyle() {
309 const { progress } = this
310 return {
311 width: progress + '%'
312 }
313 },
314 // 原图样式
315 sourceImgStyle() {
316 const { scale, sourceImgMasking } = this
317 const top = scale.y + sourceImgMasking.y + 'px'
318 const left = scale.x + sourceImgMasking.x + 'px'
319 return {
320 top,
321 left,
322 width: scale.width + 'px',
323 height: scale.height + 'px',
324 transform: 'rotate(' + scale.degree + 'deg)', // 旋转时 左侧原始图旋转样式
325 '-ms-transform': 'rotate(' + scale.degree + 'deg)', // 兼容IE9
326 '-moz-transform': 'rotate(' + scale.degree + 'deg)', // 兼容FireFox
327 '-webkit-transform': 'rotate(' + scale.degree + 'deg)', // 兼容Safari 和 chrome
328 '-o-transform': 'rotate(' + scale.degree + 'deg)' // 兼容 Opera
329 }
330 },
331 // 原图蒙版属性
332 sourceImgMasking() {
333 const { width, height, ratio, sourceImgContainer } = this
334 const sic = sourceImgContainer
335 const sicRatio = sic.width / sic.height // 原图容器宽高比
336 let x = 0
337 let y = 0
338 let w = sic.width
339 let h = sic.height
340 let scale = 1
341 if (ratio < sicRatio) {
342 scale = sic.height / height
343 w = sic.height * ratio
344 x = (sic.width - w) / 2
345 }
346 if (ratio > sicRatio) {
347 scale = sic.width / width
348 h = sic.width / ratio
349 y = (sic.height - h) / 2
350 }
351 return {
352 scale, // 蒙版相对需求宽高的缩放
353 x,
354 y,
355 width: w,
356 height: h
357 }
358 },
359 // 原图遮罩样式
360 sourceImgShadeStyle() {
361 const { sourceImgMasking, sourceImgContainer } = this
362 const sic = sourceImgContainer
363 const sim = sourceImgMasking
364 const w =
365 sim.width === sic.width ? sim.width : (sic.width - sim.width) / 2
366 const h =
367 sim.height === sic.height ? sim.height : (sic.height - sim.height) / 2
368 return {
369 width: w + 'px',
370 height: h + 'px'
371 }
372 },
373 previewStyle() {
374 const { ratio, previewContainer } = this
375 const pc = previewContainer
376 let w = pc.width
377 let h = pc.height
378 const pcRatio = w / h
379 if (ratio < pcRatio) {
380 w = pc.height * ratio
381 }
382 if (ratio > pcRatio) {
383 h = pc.width / ratio
384 }
385 return {
386 width: w + 'px',
387 height: h + 'px'
388 }
389 }
390 },
391 watch: {
392 value(newValue) {
393 if (newValue && this.loading !== 1) {
394 this.reset()
395 }
396 }
397 },
398 created() {
399 // 绑定按键esc隐藏此插件事件
400 document.addEventListener('keyup', this.closeHandler)
401 },
402 destroyed() {
403 document.removeEventListener('keyup', this.closeHandler)
404 },
405 methods: {
406 // 点击波纹效果
407 ripple(e) {
408 effectRipple(e)
409 },
410 // 关闭控件
411 off() {
412 setTimeout(() => {
413 this.$emit('input', false)
414 this.$emit('close')
415 if (this.step === 3 && this.loading === 2) {
416 this.setStep(1)
417 }
418 }, 200)
419 },
420 // 设置步骤
421 setStep(no) {
422 // 延时是为了显示动画效果呢,哈哈哈
423 setTimeout(() => {
424 this.step = no
425 }, 200)
426 },
427 /* 图片选择区域函数绑定
428 ---------------------------------------------------------------*/
429 preventDefault(e) {
430 e.preventDefault()
431 return false
432 },
433 handleClick(e) {
434 if (this.loading !== 1) {
435 if (e.target !== this.$refs.fileinput) {
436 e.preventDefault()
437 if (document.activeElement !== this.$refs) {
438 this.$refs.fileinput.click()
439 }
440 }
441 }
442 },
443 handleChange(e) {
444 e.preventDefault()
445 if (this.loading !== 1) {
446 const files = e.target.files || e.dataTransfer.files
447 this.reset()
448 if (this.checkFile(files[0])) {
449 this.setSourceImg(files[0])
450 }
451 }
452 },
453 /* ---------------------------------------------------------------*/
454 // 检测选择的文件是否合适
455 checkFile(file) {
456 const { lang, maxSize } = this
457 // 仅限图片
458 if (file.type.indexOf('image') === -1) {
459 this.hasError = true
460 this.errorMsg = lang.error.onlyImg
461 return false
462 }
463 // 超出大小
464 if (file.size / 1024 > maxSize) {
465 this.hasError = true
466 this.errorMsg = lang.error.outOfSize + maxSize + 'kb'
467 return false
468 }
469 return true
470 },
471 // 重置控件
472 reset() {
473 this.loading = 0
474 this.hasError = false
475 this.errorMsg = ''
476 this.progress = 0
477 },
478 // 设置图片源
479 setSourceImg(file) {
480 const fr = new FileReader()
481 fr.onload = e => {
482 this.sourceImgUrl = fr.result
483 this.startCrop()
484 }
485 fr.readAsDataURL(file)
486 },
487 // 剪裁前准备工作
488 startCrop() {
489 const {
490 width,
491 height,
492 ratio,
493 scale,
494 sourceImgUrl,
495 sourceImgMasking,
496 lang
497 } = this
498 const sim = sourceImgMasking
499 const img = new Image()
500 img.src = sourceImgUrl
501 img.onload = () => {
502 const nWidth = img.naturalWidth
503 const nHeight = img.naturalHeight
504 const nRatio = nWidth / nHeight
505 let w = sim.width
506 let h = sim.height
507 let x = 0
508 let y = 0
509 // 图片像素不达标
510 if (nWidth < width || nHeight < height) {
511 this.hasError = true
512 this.errorMsg = lang.error.lowestPx + width + '*' + height
513 return false
514 }
515 if (ratio > nRatio) {
516 h = w / nRatio
517 y = (sim.height - h) / 2
518 }
519 if (ratio < nRatio) {
520 w = h * nRatio
521 x = (sim.width - w) / 2
522 }
523 scale.range = 0
524 scale.x = x
525 scale.y = y
526 scale.width = w
527 scale.height = h
528 scale.degree = 0
529 scale.minWidth = w
530 scale.minHeight = h
531 scale.maxWidth = nWidth * sim.scale
532 scale.maxHeight = nHeight * sim.scale
533 scale.naturalWidth = nWidth
534 scale.naturalHeight = nHeight
535 this.sourceImg = img
536 this.createImg()
537 this.setStep(2)
538 }
539 },
540 // 鼠标按下图片准备移动
541 imgStartMove(e) {
542 e.preventDefault()
543 // 支持触摸事件,则鼠标事件无效
544 if (this.isSupportTouch && !e.targetTouches) {
545 return false
546 }
547 const et = e.targetTouches ? e.targetTouches[0] : e
548 const { sourceImgMouseDown, scale } = this
549 const simd = sourceImgMouseDown
550 simd.mX = et.screenX
551 simd.mY = et.screenY
552 simd.x = scale.x
553 simd.y = scale.y
554 simd.on = true
555 },
556 // 鼠标按下状态下移动,图片移动
557 imgMove(e) {
558 e.preventDefault()
559 // 支持触摸事件,则鼠标事件无效
560 if (this.isSupportTouch && !e.targetTouches) {
561 return false
562 }
563 const et = e.targetTouches ? e.targetTouches[0] : e
564 const {
565 sourceImgMouseDown: { on, mX, mY, x, y },
566 scale,
567 sourceImgMasking
568 } = this
569 const sim = sourceImgMasking
570 const nX = et.screenX
571 const nY = et.screenY
572 const dX = nX - mX
573 const dY = nY - mY
574 let rX = x + dX
575 let rY = y + dY
576 if (!on) return
577 if (rX > 0) {
578 rX = 0
579 }
580 if (rY > 0) {
581 rY = 0
582 }
583 if (rX < sim.width - scale.width) {
584 rX = sim.width - scale.width
585 }
586 if (rY < sim.height - scale.height) {
587 rY = sim.height - scale.height
588 }
589 scale.x = rX
590 scale.y = rY
591 },
592 // 按钮按下开始向右旋转
593 startRotateRight(e) {
594 const { scale } = this
595 scale.rotateRight = true
596 const rotate = () => {
597 if (scale.rotateRight) {
598 const degree = ++scale.degree
599 this.createImg(degree)
600 setTimeout(function() {
601 rotate()
602 }, 60)
603 }
604 }
605 rotate()
606 },
607 // 按钮按下开始向左旋转
608 startRotateLeft(e) {
609 const { scale } = this
610 scale.rotateLeft = true
611 const rotate = () => {
612 if (scale.rotateLeft) {
613 const degree = --scale.degree
614 this.createImg(degree)
615 setTimeout(function() {
616 rotate()
617 }, 60)
618 }
619 }
620 rotate()
621 },
622 // 停止旋转
623 endRotate() {
624 const { scale } = this
625 scale.rotateLeft = false
626 scale.rotateRight = false
627 },
628 // 按钮按下开始放大
629 startZoomAdd(e) {
630 const { scale } = this
631 scale.zoomAddOn = true
632 const zoom = () => {
633 if (scale.zoomAddOn) {
634 const range = scale.range >= 100 ? 100 : ++scale.range
635 this.zoomImg(range)
636 setTimeout(function() {
637 zoom()
638 }, 60)
639 }
640 }
641 zoom()
642 },
643 // 按钮松开或移开取消放大
644 endZoomAdd(e) {
645 this.scale.zoomAddOn = false
646 },
647 // 按钮按下开始缩小
648 startZoomSub(e) {
649 const { scale } = this
650 scale.zoomSubOn = true
651 const zoom = () => {
652 if (scale.zoomSubOn) {
653 const range = scale.range <= 0 ? 0 : --scale.range
654 this.zoomImg(range)
655 setTimeout(function() {
656 zoom()
657 }, 60)
658 }
659 }
660 zoom()
661 },
662 // 按钮松开或移开取消缩小
663 endZoomSub(e) {
664 const { scale } = this
665 scale.zoomSubOn = false
666 },
667 zoomChange(e) {
668 this.zoomImg(e.target.value)
669 },
670 // 缩放原图
671 zoomImg(newRange) {
672 const { sourceImgMasking, scale } = this
673 const {
674 maxWidth,
675 maxHeight,
676 minWidth,
677 minHeight,
678 width,
679 height,
680 x,
681 y
682 } = scale
683 const sim = sourceImgMasking
684 // 蒙版宽高
685 const sWidth = sim.width
686 const sHeight = sim.height
687 // 新宽高
688 const nWidth = minWidth + ((maxWidth - minWidth) * newRange) / 100
689 const nHeight = minHeight + ((maxHeight - minHeight) * newRange) / 100
690 // 新坐标(根据蒙版中心点缩放)
691 let nX = sWidth / 2 - (nWidth / width) * (sWidth / 2 - x)
692 let nY = sHeight / 2 - (nHeight / height) * (sHeight / 2 - y)
693 // 判断新坐标是否超过蒙版限制
694 if (nX > 0) {
695 nX = 0
696 }
697 if (nY > 0) {
698 nY = 0
699 }
700 if (nX < sWidth - nWidth) {
701 nX = sWidth - nWidth
702 }
703 if (nY < sHeight - nHeight) {
704 nY = sHeight - nHeight
705 }
706 // 赋值处理
707 scale.x = nX
708 scale.y = nY
709 scale.width = nWidth
710 scale.height = nHeight
711 scale.range = newRange
712 setTimeout(() => {
713 if (scale.range === newRange) {
714 this.createImg()
715 }
716 }, 300)
717 },
718 // 生成需求图片
719 createImg(e) {
720 const {
721 mime,
722 sourceImg,
723 scale: { x, y, width, height, degree },
724 sourceImgMasking: { scale }
725 } = this
726 const canvas = this.$refs.canvas
727 const ctx = canvas.getContext('2d')
728 if (e) {
729 // 取消鼠标按下移动状态
730 this.sourceImgMouseDown.on = false
731 }
732 canvas.width = this.width
733 canvas.height = this.height
734 ctx.clearRect(0, 0, this.width, this.height)
735 // 将透明区域设置为白色底边
736 ctx.fillStyle = '#fff'
737 ctx.fillRect(0, 0, this.width, this.height)
738 ctx.translate(this.width * 0.5, this.height * 0.5)
739 ctx.rotate((Math.PI * degree) / 180)
740 ctx.translate(-this.width * 0.5, -this.height * 0.5)
741 ctx.drawImage(
742 sourceImg,
743 x / scale,
744 y / scale,
745 width / scale,
746 height / scale
747 )
748 this.createImgUrl = canvas.toDataURL(mime)
749 },
750 prepareUpload() {
751 const { url, createImgUrl, field, ki } = this
752 this.$emit('crop-success', createImgUrl, field, ki)
753 if (typeof url === 'string' && url) {
754 this.upload()
755 } else {
756 this.off()
757 }
758 },
759 // 上传图片
760 upload() {
761 const {
762 lang,
763 imgFormat,
764 mime,
765 url,
766 params,
767 field,
768 ki,
769 createImgUrl
770 } = this
771 const fmData = new FormData()
772 fmData.append(
773 field,
774 data2blob(createImgUrl, mime),
775 field + '.' + imgFormat
776 )
777 // 添加其他参数
778 if (typeof params === 'object' && params) {
779 Object.keys(params).forEach(k => {
780 fmData.append(k, params[k])
781 })
782 }
783 // 监听进度回调
784 // const uploadProgress = (event) => {
785 // if (event.lengthComputable) {
786 // this.progress = 100 * Math.round(event.loaded) / event.total
787 // }
788 // }
789 // 上传文件
790 this.reset()
791 this.loading = 1
792 this.setStep(3)
793 request({
794 url,
795 method: 'post',
796 data: fmData
797 })
798 .then(resData => {
799 this.loading = 2
800 this.$emit('crop-upload-success', resData.data)
801 })
802 .catch(err => {
803 if (this.value) {
804 this.loading = 3
805 this.hasError = true
806 this.errorMsg = lang.fail
807 this.$emit('crop-upload-fail', err, field, ki)
808 }
809 })
810 },
811 closeHandler(e) {
812 if (this.value && (e.key === 'Escape' || e.keyCode === 27)) {
813 this.off()
814 }
815 }
816 }
817 }
818 </script>
819
820 <style lang="scss">
821 @charset "UTF-8";
822 @-webkit-keyframes vicp_progress {
823 0% {
824 background-position-y: 0;
825 }
826 100% {
827 background-position-y: 40px;
828 }
829 }
830 @keyframes vicp_progress {
831 0% {
832 background-position-y: 0;
833 }
834 100% {
835 background-position-y: 40px;
836 }
837 }
838 @-webkit-keyframes vicp {
839 0% {
840 opacity: 0;
841 -webkit-transform: scale(0) translatey(-60px);
842 transform: scale(0) translatey(-60px);
843 }
844 100% {
845 opacity: 1;
846 -webkit-transform: scale(1) translatey(0);
847 transform: scale(1) translatey(0);
848 }
849 }
850 @keyframes vicp {
851 0% {
852 opacity: 0;
853 -webkit-transform: scale(0) translatey(-60px);
854 transform: scale(0) translatey(-60px);
855 }
856 100% {
857 opacity: 1;
858 -webkit-transform: scale(1) translatey(0);
859 transform: scale(1) translatey(0);
860 }
861 }
862 .vue-image-crop-upload {
863 position: fixed;
864 display: block;
865 -webkit-box-sizing: border-box;
866 box-sizing: border-box;
867 z-index: 10000;
868 top: 0;
869 bottom: 0;
870 left: 0;
871 right: 0;
872 width: 100%;
873 height: 100%;
874 background-color: rgba(0, 0, 0, 0.65);
875 -webkit-tap-highlight-color: transparent;
876 -moz-tap-highlight-color: transparent;
877 }
878 .vue-image-crop-upload .vicp-wrap {
879 -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
880 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
881 position: fixed;
882 display: block;
883 -webkit-box-sizing: border-box;
884 box-sizing: border-box;
885 z-index: 10000;
886 top: 0;
887 bottom: 0;
888 left: 0;
889 right: 0;
890 margin: auto;
891 width: 600px;
892 height: 330px;
893 padding: 25px;
894 background-color: #fff;
895 border-radius: 2px;
896 -webkit-animation: vicp 0.12s ease-in;
897 animation: vicp 0.12s ease-in;
898 }
899 .vue-image-crop-upload .vicp-wrap .vicp-close {
900 position: absolute;
901 right: -30px;
902 top: -30px;
903 }
904 .vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4 {
905 position: relative;
906 display: block;
907 width: 30px;
908 height: 30px;
909 cursor: pointer;
910 -webkit-transition: -webkit-transform 0.18s;
911 transition: -webkit-transform 0.18s;
912 transition: transform 0.18s;
913 transition: transform 0.18s, -webkit-transform 0.18s;
914 -webkit-transform: rotate(0);
915 -ms-transform: rotate(0);
916 transform: rotate(0);
917 }
918 .vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after,
919 .vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::before {
920 -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
921 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
922 content: "";
923 position: absolute;
924 top: 12px;
925 left: 4px;
926 width: 20px;
927 height: 3px;
928 -webkit-transform: rotate(45deg);
929 -ms-transform: rotate(45deg);
930 transform: rotate(45deg);
931 background-color: #fff;
932 }
933 .vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after {
934 -webkit-transform: rotate(-45deg);
935 -ms-transform: rotate(-45deg);
936 transform: rotate(-45deg);
937 }
938 .vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4:hover {
939 -webkit-transform: rotate(90deg);
940 -ms-transform: rotate(90deg);
941 transform: rotate(90deg);
942 }
943 .vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area {
944 position: relative;
945 -webkit-box-sizing: border-box;
946 box-sizing: border-box;
947 padding: 35px;
948 height: 170px;
949 background-color: rgba(0, 0, 0, 0.03);
950 text-align: center;
951 border: 1px dashed rgba(0, 0, 0, 0.08);
952 overflow: hidden;
953 }
954 .vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-icon1 {
955 display: block;
956 margin: 0 auto 6px;
957 width: 42px;
958 height: 42px;
959 overflow: hidden;
960 }
961 .vue-image-crop-upload
962 .vicp-wrap
963 .vicp-step1
964 .vicp-drop-area
965 .vicp-icon1
966 .vicp-icon1-arrow {
967 display: block;
968 margin: 0 auto;
969 width: 0;
970 height: 0;
971 border-bottom: 14.7px solid rgba(0, 0, 0, 0.3);
972 border-left: 14.7px solid transparent;
973 border-right: 14.7px solid transparent;
974 }
975 .vue-image-crop-upload
976 .vicp-wrap
977 .vicp-step1
978 .vicp-drop-area
979 .vicp-icon1
980 .vicp-icon1-body {
981 display: block;
982 width: 12.6px;
983 height: 14.7px;
984 margin: 0 auto;
985 background-color: rgba(0, 0, 0, 0.3);
986 }
987 .vue-image-crop-upload
988 .vicp-wrap
989 .vicp-step1
990 .vicp-drop-area
991 .vicp-icon1
992 .vicp-icon1-bottom {
993 -webkit-box-sizing: border-box;
994 box-sizing: border-box;
995 display: block;
996 height: 12.6px;
997 border: 6px solid rgba(0, 0, 0, 0.3);
998 border-top: none;
999 }
1000 .vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-hint {
1001 display: block;
1002 padding: 15px;
1003 font-size: 14px;
1004 color: #666;
1005 line-height: 30px;
1006 }
1007 .vue-image-crop-upload
1008 .vicp-wrap
1009 .vicp-step1
1010 .vicp-drop-area
1011 .vicp-no-supported-hint {
1012 display: block;
1013 position: absolute;
1014 top: 0;
1015 left: 0;
1016 padding: 30px;
1017 width: 100%;
1018 height: 60px;
1019 line-height: 30px;
1020 background-color: #eee;
1021 text-align: center;
1022 color: #666;
1023 font-size: 14px;
1024 }
1025 .vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area:hover {
1026 cursor: pointer;
1027 border-color: rgba(0, 0, 0, 0.1);
1028 background-color: rgba(0, 0, 0, 0.05);
1029 }
1030 .vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop {
1031 overflow: hidden;
1032 }
1033 .vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left {
1034 float: left;
1035 }
1036 .vue-image-crop-upload
1037 .vicp-wrap
1038 .vicp-step2
1039 .vicp-crop
1040 .vicp-crop-left
1041 .vicp-img-container {
1042 position: relative;
1043 display: block;
1044 width: 240px;
1045 height: 180px;
1046 background-color: #e5e5e0;
1047 overflow: hidden;
1048 }
1049 .vue-image-crop-upload
1050 .vicp-wrap
1051 .vicp-step2
1052 .vicp-crop
1053 .vicp-crop-left
1054 .vicp-img-container
1055 .vicp-img {
1056 position: absolute;
1057 display: block;
1058 cursor: move;
1059 -webkit-user-select: none;
1060 -moz-user-select: none;
1061 -ms-user-select: none;
1062 user-select: none;
1063 }
1064 .vue-image-crop-upload
1065 .vicp-wrap
1066 .vicp-step2
1067 .vicp-crop
1068 .vicp-crop-left
1069 .vicp-img-container
1070 .vicp-img-shade {
1071 -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
1072 box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
1073 position: absolute;
1074 background-color: rgba(241, 242, 243, 0.8);
1075 }
1076 .vue-image-crop-upload
1077 .vicp-wrap
1078 .vicp-step2
1079 .vicp-crop
1080 .vicp-crop-left
1081 .vicp-img-container
1082 .vicp-img-shade.vicp-img-shade-1 {
1083 top: 0;
1084 left: 0;
1085 }
1086 .vue-image-crop-upload
1087 .vicp-wrap
1088 .vicp-step2
1089 .vicp-crop
1090 .vicp-crop-left
1091 .vicp-img-container
1092 .vicp-img-shade.vicp-img-shade-2 {
1093 bottom: 0;
1094 right: 0;
1095 }
1096 .vue-image-crop-upload
1097 .vicp-wrap
1098 .vicp-step2
1099 .vicp-crop
1100 .vicp-crop-left
1101 .vicp-rotate {
1102 position: relative;
1103 width: 240px;
1104 height: 18px;
1105 }
1106 .vue-image-crop-upload
1107 .vicp-wrap
1108 .vicp-step2
1109 .vicp-crop
1110 .vicp-crop-left
1111 .vicp-rotate
1112 i {
1113 display: block;
1114 width: 18px;
1115 height: 18px;
1116 border-radius: 100%;
1117 line-height: 18px;
1118 text-align: center;
1119 font-size: 12px;
1120 font-weight: bold;
1121 background-color: rgba(0, 0, 0, 0.08);
1122 color: #fff;
1123 overflow: hidden;
1124 }
1125 .vue-image-crop-upload
1126 .vicp-wrap
1127 .vicp-step2
1128 .vicp-crop
1129 .vicp-crop-left
1130 .vicp-rotate
1131 i:hover {
1132 -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1133 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1134 cursor: pointer;
1135 background-color: rgba(0, 0, 0, 0.14);
1136 }
1137 .vue-image-crop-upload
1138 .vicp-wrap
1139 .vicp-step2
1140 .vicp-crop
1141 .vicp-crop-left
1142 .vicp-rotate
1143 i:first-child {
1144 float: left;
1145 }
1146 .vue-image-crop-upload
1147 .vicp-wrap
1148 .vicp-step2
1149 .vicp-crop
1150 .vicp-crop-left
1151 .vicp-rotate
1152 i:last-child {
1153 float: right;
1154 }
1155 .vue-image-crop-upload
1156 .vicp-wrap
1157 .vicp-step2
1158 .vicp-crop
1159 .vicp-crop-left
1160 .vicp-range {
1161 position: relative;
1162 margin: 30px 0 10px 0;
1163 width: 240px;
1164 height: 18px;
1165 }
1166 .vue-image-crop-upload
1167 .vicp-wrap
1168 .vicp-step2
1169 .vicp-crop
1170 .vicp-crop-left
1171 .vicp-range
1172 .vicp-icon5,
1173 .vue-image-crop-upload
1174 .vicp-wrap
1175 .vicp-step2
1176 .vicp-crop
1177 .vicp-crop-left
1178 .vicp-range
1179 .vicp-icon6 {
1180 position: absolute;
1181 top: 0;
1182 width: 18px;
1183 height: 18px;
1184 border-radius: 100%;
1185 background-color: rgba(0, 0, 0, 0.08);
1186 }
1187 .vue-image-crop-upload
1188 .vicp-wrap
1189 .vicp-step2
1190 .vicp-crop
1191 .vicp-crop-left
1192 .vicp-range
1193 .vicp-icon5:hover,
1194 .vue-image-crop-upload
1195 .vicp-wrap
1196 .vicp-step2
1197 .vicp-crop
1198 .vicp-crop-left
1199 .vicp-range
1200 .vicp-icon6:hover {
1201 -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1202 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1203 cursor: pointer;
1204 background-color: rgba(0, 0, 0, 0.14);
1205 }
1206 .vue-image-crop-upload
1207 .vicp-wrap
1208 .vicp-step2
1209 .vicp-crop
1210 .vicp-crop-left
1211 .vicp-range
1212 .vicp-icon5 {
1213 left: 0;
1214 }
1215 .vue-image-crop-upload
1216 .vicp-wrap
1217 .vicp-step2
1218 .vicp-crop
1219 .vicp-crop-left
1220 .vicp-range
1221 .vicp-icon5::before {
1222 position: absolute;
1223 content: "";
1224 display: block;
1225 left: 3px;
1226 top: 8px;
1227 width: 12px;
1228 height: 2px;
1229 background-color: #fff;
1230 }
1231 .vue-image-crop-upload
1232 .vicp-wrap
1233 .vicp-step2
1234 .vicp-crop
1235 .vicp-crop-left
1236 .vicp-range
1237 .vicp-icon6 {
1238 right: 0;
1239 }
1240 .vue-image-crop-upload
1241 .vicp-wrap
1242 .vicp-step2
1243 .vicp-crop
1244 .vicp-crop-left
1245 .vicp-range
1246 .vicp-icon6::before {
1247 position: absolute;
1248 content: "";
1249 display: block;
1250 left: 3px;
1251 top: 8px;
1252 width: 12px;
1253 height: 2px;
1254 background-color: #fff;
1255 }
1256 .vue-image-crop-upload
1257 .vicp-wrap
1258 .vicp-step2
1259 .vicp-crop
1260 .vicp-crop-left
1261 .vicp-range
1262 .vicp-icon6::after {
1263 position: absolute;
1264 content: "";
1265 display: block;
1266 top: 3px;
1267 left: 8px;
1268 width: 2px;
1269 height: 12px;
1270 background-color: #fff;
1271 }
1272 .vue-image-crop-upload
1273 .vicp-wrap
1274 .vicp-step2
1275 .vicp-crop
1276 .vicp-crop-left
1277 .vicp-range
1278 input[type="range"] {
1279 display: block;
1280 padding-top: 5px;
1281 margin: 0 auto;
1282 width: 180px;
1283 height: 8px;
1284 vertical-align: top;
1285 background: transparent;
1286 -webkit-appearance: none;
1287 -moz-appearance: none;
1288 appearance: none;
1289 cursor: pointer;
1290 /* 滑块
1291 ---------------------------------------------------------------*/
1292 /* 轨道
1293 ---------------------------------------------------------------*/
1294 }
1295 .vue-image-crop-upload
1296 .vicp-wrap
1297 .vicp-step2
1298 .vicp-crop
1299 .vicp-crop-left
1300 .vicp-range
1301 input[type="range"]:focus {
1302 outline: none;
1303 }
1304 .vue-image-crop-upload
1305 .vicp-wrap
1306 .vicp-step2
1307 .vicp-crop
1308 .vicp-crop-left
1309 .vicp-range
1310 input[type="range"]::-webkit-slider-thumb {
1311 -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
1312 box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
1313 -webkit-appearance: none;
1314 appearance: none;
1315 margin-top: -3px;
1316 width: 12px;
1317 height: 12px;
1318 background-color: #61c091;
1319 border-radius: 100%;
1320 border: none;
1321 -webkit-transition: 0.2s;
1322 transition: 0.2s;
1323 }
1324 .vue-image-crop-upload
1325 .vicp-wrap
1326 .vicp-step2
1327 .vicp-crop
1328 .vicp-crop-left
1329 .vicp-range
1330 input[type="range"]::-moz-range-thumb {
1331 box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
1332 -moz-appearance: none;
1333 appearance: none;
1334 width: 12px;
1335 height: 12px;
1336 background-color: #61c091;
1337 border-radius: 100%;
1338 border: none;
1339 -webkit-transition: 0.2s;
1340 transition: 0.2s;
1341 }
1342 .vue-image-crop-upload
1343 .vicp-wrap
1344 .vicp-step2
1345 .vicp-crop
1346 .vicp-crop-left
1347 .vicp-range
1348 input[type="range"]::-ms-thumb {
1349 box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
1350 appearance: none;
1351 width: 12px;
1352 height: 12px;
1353 background-color: #61c091;
1354 border: none;
1355 border-radius: 100%;
1356 -webkit-transition: 0.2s;
1357 transition: 0.2s;
1358 }
1359 .vue-image-crop-upload
1360 .vicp-wrap
1361 .vicp-step2
1362 .vicp-crop
1363 .vicp-crop-left
1364 .vicp-range
1365 input[type="range"]:active::-moz-range-thumb {
1366 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
1367 width: 14px;
1368 height: 14px;
1369 }
1370 .vue-image-crop-upload
1371 .vicp-wrap
1372 .vicp-step2
1373 .vicp-crop
1374 .vicp-crop-left
1375 .vicp-range
1376 input[type="range"]:active::-ms-thumb {
1377 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
1378 width: 14px;
1379 height: 14px;
1380 }
1381 .vue-image-crop-upload
1382 .vicp-wrap
1383 .vicp-step2
1384 .vicp-crop
1385 .vicp-crop-left
1386 .vicp-range
1387 input[type="range"]:active::-webkit-slider-thumb {
1388 -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
1389 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
1390 margin-top: -4px;
1391 width: 14px;
1392 height: 14px;
1393 }
1394 .vue-image-crop-upload
1395 .vicp-wrap
1396 .vicp-step2
1397 .vicp-crop
1398 .vicp-crop-left
1399 .vicp-range
1400 input[type="range"]::-webkit-slider-runnable-track {
1401 -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1402 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1403 width: 100%;
1404 height: 6px;
1405 cursor: pointer;
1406 border-radius: 2px;
1407 border: none;
1408 background-color: rgba(68, 170, 119, 0.3);
1409 }
1410 .vue-image-crop-upload
1411 .vicp-wrap
1412 .vicp-step2
1413 .vicp-crop
1414 .vicp-crop-left
1415 .vicp-range
1416 input[type="range"]::-moz-range-track {
1417 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1418 width: 100%;
1419 height: 6px;
1420 cursor: pointer;
1421 border-radius: 2px;
1422 border: none;
1423 background-color: rgba(68, 170, 119, 0.3);
1424 }
1425 .vue-image-crop-upload
1426 .vicp-wrap
1427 .vicp-step2
1428 .vicp-crop
1429 .vicp-crop-left
1430 .vicp-range
1431 input[type="range"]::-ms-track {
1432 box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
1433 width: 100%;
1434 cursor: pointer;
1435 background: transparent;
1436 border-color: transparent;
1437 color: transparent;
1438 height: 6px;
1439 border-radius: 2px;
1440 border: none;
1441 }
1442 .vue-image-crop-upload
1443 .vicp-wrap
1444 .vicp-step2
1445 .vicp-crop
1446 .vicp-crop-left
1447 .vicp-range
1448 input[type="range"]::-ms-fill-lower {
1449 background-color: rgba(68, 170, 119, 0.3);
1450 }
1451 .vue-image-crop-upload
1452 .vicp-wrap
1453 .vicp-step2
1454 .vicp-crop
1455 .vicp-crop-left
1456 .vicp-range
1457 input[type="range"]::-ms-fill-upper {
1458 background-color: rgba(68, 170, 119, 0.15);
1459 }
1460 .vue-image-crop-upload
1461 .vicp-wrap
1462 .vicp-step2
1463 .vicp-crop
1464 .vicp-crop-left
1465 .vicp-range
1466 input[type="range"]:focus::-webkit-slider-runnable-track {
1467 background-color: rgba(68, 170, 119, 0.5);
1468 }
1469 .vue-image-crop-upload
1470 .vicp-wrap
1471 .vicp-step2
1472 .vicp-crop
1473 .vicp-crop-left
1474 .vicp-range
1475 input[type="range"]:focus::-moz-range-track {
1476 background-color: rgba(68, 170, 119, 0.5);
1477 }
1478 .vue-image-crop-upload
1479 .vicp-wrap
1480 .vicp-step2
1481 .vicp-crop
1482 .vicp-crop-left
1483 .vicp-range
1484 input[type="range"]:focus::-ms-fill-lower {
1485 background-color: rgba(68, 170, 119, 0.45);
1486 }
1487 .vue-image-crop-upload
1488 .vicp-wrap
1489 .vicp-step2
1490 .vicp-crop
1491 .vicp-crop-left
1492 .vicp-range
1493 input[type="range"]:focus::-ms-fill-upper {
1494 background-color: rgba(68, 170, 119, 0.25);
1495 }
1496 .vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right {
1497 float: right;
1498 }
1499 .vue-image-crop-upload
1500 .vicp-wrap
1501 .vicp-step2
1502 .vicp-crop
1503 .vicp-crop-right
1504 .vicp-preview {
1505 height: 150px;
1506 overflow: hidden;
1507 }
1508 .vue-image-crop-upload
1509 .vicp-wrap
1510 .vicp-step2
1511 .vicp-crop
1512 .vicp-crop-right
1513 .vicp-preview
1514 .vicp-preview-item {
1515 position: relative;
1516 padding: 5px;
1517 width: 100px;
1518 height: 100px;
1519 float: left;
1520 margin-right: 16px;
1521 }
1522 .vue-image-crop-upload
1523 .vicp-wrap
1524 .vicp-step2
1525 .vicp-crop
1526 .vicp-crop-right
1527 .vicp-preview
1528 .vicp-preview-item
1529 span {
1530 position: absolute;
1531 bottom: -30px;
1532 width: 100%;
1533 font-size: 14px;
1534 color: #bbb;
1535 display: block;
1536 text-align: center;
1537 }
1538 .vue-image-crop-upload
1539 .vicp-wrap
1540 .vicp-step2
1541 .vicp-crop
1542 .vicp-crop-right
1543 .vicp-preview
1544 .vicp-preview-item
1545 img {
1546 position: absolute;
1547 display: block;
1548 top: 0;
1549 bottom: 0;
1550 left: 0;
1551 right: 0;
1552 margin: auto;
1553 padding: 3px;
1554 background-color: #fff;
1555 border: 1px solid rgba(0, 0, 0, 0.15);
1556 overflow: hidden;
1557 -webkit-user-select: none;
1558 -moz-user-select: none;
1559 -ms-user-select: none;
1560 user-select: none;
1561 }
1562 .vue-image-crop-upload
1563 .vicp-wrap
1564 .vicp-step2
1565 .vicp-crop
1566 .vicp-crop-right
1567 .vicp-preview
1568 .vicp-preview-item.vicp-preview-item-circle {
1569 margin-right: 0;
1570 }
1571 .vue-image-crop-upload
1572 .vicp-wrap
1573 .vicp-step2
1574 .vicp-crop
1575 .vicp-crop-right
1576 .vicp-preview
1577 .vicp-preview-item.vicp-preview-item-circle
1578 img {
1579 border-radius: 100%;
1580 }
1581 .vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload {
1582 position: relative;
1583 -webkit-box-sizing: border-box;
1584 box-sizing: border-box;
1585 padding: 35px;
1586 height: 170px;
1587 background-color: rgba(0, 0, 0, 0.03);
1588 text-align: center;
1589 border: 1px dashed #ddd;
1590 }
1591 .vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-loading {
1592 display: block;
1593 padding: 15px;
1594 font-size: 16px;
1595 color: #999;
1596 line-height: 30px;
1597 }
1598 .vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap {
1599 margin-top: 12px;
1600 background-color: rgba(0, 0, 0, 0.08);
1601 border-radius: 3px;
1602 }
1603 .vue-image-crop-upload
1604 .vicp-wrap
1605 .vicp-step3
1606 .vicp-upload
1607 .vicp-progress-wrap
1608 .vicp-progress {
1609 position: relative;
1610 display: block;
1611 height: 5px;
1612 border-radius: 3px;
1613 background-color: #4a7;
1614 -webkit-box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);
1615 box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);
1616 -webkit-transition: width 0.15s linear;
1617 transition: width 0.15s linear;
1618 background-image: -webkit-linear-gradient(
1619 135deg,
1620 rgba(255, 255, 255, 0.2) 25%,
1621 transparent 25%,
1622 transparent 50%,
1623 rgba(255, 255, 255, 0.2) 50%,
1624 rgba(255, 255, 255, 0.2) 75%,
1625 transparent 75%,
1626 transparent
1627 );
1628 background-image: linear-gradient(
1629 -45deg,
1630 rgba(255, 255, 255, 0.2) 25%,
1631 transparent 25%,
1632 transparent 50%,
1633 rgba(255, 255, 255, 0.2) 50%,
1634 rgba(255, 255, 255, 0.2) 75%,
1635 transparent 75%,
1636 transparent
1637 );
1638 background-size: 40px 40px;
1639 -webkit-animation: vicp_progress 0.5s linear infinite;
1640 animation: vicp_progress 0.5s linear infinite;
1641 }
1642 .vue-image-crop-upload
1643 .vicp-wrap
1644 .vicp-step3
1645 .vicp-upload
1646 .vicp-progress-wrap
1647 .vicp-progress::after {
1648 content: "";
1649 position: absolute;
1650 display: block;
1651 top: -3px;
1652 right: -3px;
1653 width: 9px;
1654 height: 9px;
1655 border: 1px solid rgba(245, 246, 247, 0.7);
1656 -webkit-box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);
1657 box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);
1658 border-radius: 100%;
1659 background-color: #4a7;
1660 }
1661 .vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-error,
1662 .vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-success {
1663 height: 100px;
1664 line-height: 100px;
1665 }
1666 .vue-image-crop-upload .vicp-wrap .vicp-operate {
1667 position: absolute;
1668 right: 20px;
1669 bottom: 20px;
1670 }
1671 .vue-image-crop-upload .vicp-wrap .vicp-operate a {
1672 position: relative;
1673 float: left;
1674 display: block;
1675 margin-left: 10px;
1676 width: 100px;
1677 height: 36px;
1678 line-height: 36px;
1679 text-align: center;
1680 cursor: pointer;
1681 font-size: 14px;
1682 color: #4a7;
1683 border-radius: 2px;
1684 overflow: hidden;
1685 -webkit-user-select: none;
1686 -moz-user-select: none;
1687 -ms-user-select: none;
1688 user-select: none;
1689 }
1690 .vue-image-crop-upload .vicp-wrap .vicp-operate a:hover {
1691 background-color: rgba(0, 0, 0, 0.03);
1692 }
1693 .vue-image-crop-upload .vicp-wrap .vicp-error,
1694 .vue-image-crop-upload .vicp-wrap .vicp-success {
1695 display: block;
1696 font-size: 14px;
1697 line-height: 24px;
1698 height: 24px;
1699 color: #d10;
1700 text-align: center;
1701 vertical-align: top;
1702 }
1703 .vue-image-crop-upload .vicp-wrap .vicp-success {
1704 color: #4a7;
1705 }
1706 .vue-image-crop-upload .vicp-wrap .vicp-icon3 {
1707 position: relative;
1708 display: inline-block;
1709 width: 20px;
1710 height: 20px;
1711 top: 4px;
1712 }
1713 .vue-image-crop-upload .vicp-wrap .vicp-icon3::after {
1714 position: absolute;
1715 top: 3px;
1716 left: 6px;
1717 width: 6px;
1718 height: 10px;
1719 border-width: 0 2px 2px 0;
1720 border-color: #4a7;
1721 border-style: solid;
1722 -webkit-transform: rotate(45deg);
1723 -ms-transform: rotate(45deg);
1724 transform: rotate(45deg);
1725 content: "";
1726 }
1727 .vue-image-crop-upload .vicp-wrap .vicp-icon2 {
1728 position: relative;
1729 display: inline-block;
1730 width: 20px;
1731 height: 20px;
1732 top: 4px;
1733 }
1734 .vue-image-crop-upload .vicp-wrap .vicp-icon2::after,
1735 .vue-image-crop-upload .vicp-wrap .vicp-icon2::before {
1736 content: "";
1737 position: absolute;
1738 top: 9px;
1739 left: 4px;
1740 width: 13px;
1741 height: 2px;
1742 background-color: #d10;
1743 -webkit-transform: rotate(45deg);
1744 -ms-transform: rotate(45deg);
1745 transform: rotate(45deg);
1746 }
1747 .vue-image-crop-upload .vicp-wrap .vicp-icon2::after {
1748 -webkit-transform: rotate(-45deg);
1749 -ms-transform: rotate(-45deg);
1750 transform: rotate(-45deg);
1751 }
1752 .e-ripple {
1753 position: absolute;
1754 border-radius: 100%;
1755 background-color: rgba(0, 0, 0, 0.15);
1756 background-clip: padding-box;
1757 pointer-events: none;
1758 -webkit-user-select: none;
1759 -moz-user-select: none;
1760 -ms-user-select: none;
1761 user-select: none;
1762 -webkit-transform: scale(0);
1763 -ms-transform: scale(0);
1764 transform: scale(0);
1765 opacity: 1;
1766 }
1767 .e-ripple.z-active {
1768 opacity: 0;
1769 -webkit-transform: scale(2);
1770 -ms-transform: scale(2);
1771 transform: scale(2);
1772 -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
1773 transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
1774 transition: opacity 1.2s ease-out, transform 0.6s ease-out;
1775 transition: opacity 1.2s ease-out, transform 0.6s ease-out,
1776 -webkit-transform 0.6s ease-out;
1777 }
1778 </style>
1779
src/components/ImageCropper/utils/data2blob.js
File was created 1 /**
2 * database64文件格式转换为2进制
3 *
4 * @param {[String]} data dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了
5 * @param {[String]} mime [description]
6 * @return {[blob]} [description]
7 */
8 export default function(data, mime) {
9 data = data.split(',')[1]
10 data = window.atob(data)
11 var ia = new Uint8Array(data.length)
12 for (var i = 0; i < data.length; i++) {
13 ia[i] = data.charCodeAt(i)
14 }
15 // canvas.toDataURL 返回的默认格式就是 image/png
16 return new Blob([ia], {
17 type: mime
18 })
19 }
20
src/components/ImageCropper/utils/effectRipple.js
File was created 1 /**
2 * 点击波纹效果
3 *
4 * @param {[event]} e [description]
5 * @param {[Object]} arg_opts [description]
6 * @return {[bollean]} [description]
7 */
8 export default function(e, arg_opts) {
9 var opts = Object.assign({
10 ele: e.target, // 波纹作用元素
11 type: 'hit', // hit点击位置扩散center中心点扩展
12 bgc: 'rgba(0, 0, 0, 0.15)' // 波纹颜色
13 }, arg_opts)
14 var target = opts.ele
15 if (target) {
16 var rect = target.getBoundingClientRect()
17 var ripple = target.querySelector('.e-ripple')
18 if (!ripple) {
19 ripple = document.createElement('span')
20 ripple.className = 'e-ripple'
21 ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px'
22 target.appendChild(ripple)
23 } else {
24 ripple.className = 'e-ripple'
25 }
26 switch (opts.type) {
27 case 'center':
28 ripple.style.top = (rect.height / 2 - ripple.offsetHeight / 2) + 'px'
29 ripple.style.left = (rect.width / 2 - ripple.offsetWidth / 2) + 'px'
30 break
31 default:
32 ripple.style.top = (e.pageY - rect.top - ripple.offsetHeight / 2 - document.body.scrollTop) + 'px'
33 ripple.style.left = (e.pageX - rect.left - ripple.offsetWidth / 2 - document.body.scrollLeft) + 'px'
34 }
35 ripple.style.backgroundColor = opts.bgc
36 ripple.className = 'e-ripple z-active'
37 return false
38 }
39 }
40
src/components/ImageCropper/utils/language.js
File was created 1 export default {
2 zh: {
3 hint: '点击,或拖动图片至此处',
4 loading: '正在上传……',
5 noSupported: '浏览器不支持该功能,请使用IE10以上或其他现在浏览器!',
6 success: '上传成功',
7 fail: '图片上传失败',
8 preview: '头像预览',
9 btn: {
10 off: '取消',
11 close: '关闭',
12 back: '上一步',
13 save: '保存'
14 },
15 error: {
16 onlyImg: '仅限图片格式',
17 outOfSize: '单文件大小不能超过 ',
18 lowestPx: '图片最低像素为(宽*高):'
19 }
20 },
21 'zh-tw': {
22 hint: '點擊,或拖動圖片至此處',
23 loading: '正在上傳……',
24 noSupported: '瀏覽器不支持該功能,請使用IE10以上或其他現代瀏覽器!',
25 success: '上傳成功',
26 fail: '圖片上傳失敗',
27 preview: '頭像預覽',
28 btn: {
29 off: '取消',
30 close: '關閉',
31 back: '上一步',
32 save: '保存'
33 },
34 error: {
35 onlyImg: '僅限圖片格式',
36 outOfSize: '單文件大小不能超過 ',
37 lowestPx: '圖片最低像素為(寬*高):'
38 }
39 },
40 en: {
41 hint: 'Click or drag the file here to upload',
42 loading: 'Uploading…',
43 noSupported: 'Browser is not supported, please use IE10+ or other browsers',
44 success: 'Upload success',
45 fail: 'Upload failed',
46 preview: 'Preview',
47 btn: {
48 off: 'Cancel',
49 close: 'Close',
50 back: 'Back',
51 save: 'Save'
52 },
53 error: {
54 onlyImg: 'Image only',
55 outOfSize: 'Image exceeds size limit: ',
56 lowestPx: 'Image\'s size is too low. Expected at least: '
57 }
58 },
59 ro: {
60 hint: 'Atinge sau trage fișierul aici',
61 loading: 'Se încarcă',
62 noSupported: 'Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.',
63 success: 'S-a încărcat cu succes',
64 fail: 'A apărut o problemă la încărcare',
65 preview: 'Previzualizează',
66
67 btn: {
68 off: 'Anulează',
69 close: 'Închide',
70 back: 'Înapoi',
71 save: 'Salvează'
72 },
73
74 error: {
75 onlyImg: 'Doar imagini',
76 outOfSize: 'Imaginea depășește limita de: ',
77 loewstPx: 'Imaginea este prea mică; Minim: '
78 }
79 },
80 ru: {
81 hint: 'Нажмите, или перетащите файл в это окно',
82 loading: 'Загружаю……',
83 noSupported: 'Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры',
84 success: 'Загрузка выполнена успешно',
85 fail: 'Ошибка загрузки',
86 preview: 'Предпросмотр',
87 btn: {
88 off: 'Отменить',
89 close: 'Закрыть',
90 back: 'Назад',
91 save: 'Сохранить'
92 },
93 error: {
94 onlyImg: 'Только изображения',
95 outOfSize: 'Изображение превышает предельный размер: ',
96 lowestPx: 'Минимальный размер изображения: '
97 }
98 },
99 'pt-br': {
100 hint: 'Clique ou arraste o arquivo aqui para carregar',
101 loading: 'Carregando…',
102 noSupported: 'Browser não suportado, use o IE10+ ou outro browser',
103 success: 'Sucesso ao carregar imagem',
104 fail: 'Falha ao carregar imagem',
105 preview: 'Pré-visualizar',
106 btn: {
107 off: 'Cancelar',
108 close: 'Fechar',
109 back: 'Voltar',
110 save: 'Salvar'
111 },
112 error: {
113 onlyImg: 'Apenas imagens',
114 outOfSize: 'A imagem excede o limite de tamanho: ',
115 lowestPx: 'O tamanho da imagem é muito pequeno. Tamanho mínimo: '
116 }
117 },
118 fr: {
119 hint: 'Cliquez ou glissez le fichier ici.',
120 loading: 'Téléchargement…',
121 noSupported: 'Votre navigateur n\'est pas supporté. Utilisez IE10 + ou un autre navigateur s\'il vous plaît.',
122 success: 'Téléchargement réussit',
123 fail: 'Téléchargement echoué',
124 preview: 'Aperçu',
125 btn: {
126 off: 'Annuler',
127 close: 'Fermer',
128 back: 'Retour',
129 save: 'Enregistrer'
130 },
131 error: {
132 onlyImg: 'Image uniquement',
133 outOfSize: 'L\'image sélectionnée dépasse la taille maximum: ',
134 lowestPx: 'L\'image sélectionnée est trop petite. Dimensions attendues: '
135 }
136 },
137 nl: {
138 hint: 'Klik hier of sleep een afbeelding in dit vlak',
139 loading: 'Uploaden…',
140 noSupported: 'Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.',
141 success: 'Upload succesvol',
142 fail: 'Upload mislukt',
143 preview: 'Voorbeeld',
144 btn: {
145 off: 'Annuleren',
146 close: 'Sluiten',
147 back: 'Terug',
148 save: 'Opslaan'
149 },
150 error: {
151 onlyImg: 'Alleen afbeeldingen',
152 outOfSize: 'De afbeelding is groter dan: ',
153 lowestPx: 'De afbeelding is te klein! Minimale afmetingen: '
154 }
155 },
156 tr: {
157 hint: 'Tıkla veya yüklemek istediğini buraya sürükle',
158 loading: 'Yükleniyor…',
159 noSupported: 'Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın',
160 success: 'Yükleme başarılı',
161 fail: 'Yüklemede hata oluştu',
162 preview: 'Önizle',
163 btn: {
164 off: 'İptal',
165 close: 'Kapat',
166 back: 'Geri',
167 save: 'Kaydet'
168 },
169 error: {
170 onlyImg: 'Sadece resim',
171 outOfSize: 'Resim yükleme limitini aşıyor: ',
172 lowestPx: 'Resmin boyutu çok küçük. En az olması gereken: '
173 }
174 },
175 'es-MX': {
176 hint: 'Selecciona o arrastra una imagen',
177 loading: 'Subiendo...',
178 noSupported: 'Tu navegador no es soportado, porfavor usa IE10+ u otros navegadores mas recientes',
179 success: 'Subido exitosamente',
180 fail: 'Sucedió un error',
181 preview: 'Vista previa',
182 btn: {
183 off: 'Cancelar',
184 close: 'Cerrar',
185 back: 'Atras',
186 save: 'Guardar'
187 },
188 error: {
189 onlyImg: 'Unicamente imagenes',
190 outOfSize: 'La imagen excede el tamaño maximo:',
191 lowestPx: 'La imagen es demasiado pequeño. Se espera por lo menos:'
192 }
193 },
194 de: {
195 hint: 'Klick hier oder zieh eine Datei hier rein zum Hochladen',
196 loading: 'Hochladen…',
197 noSupported: 'Browser wird nicht unterstützt, bitte verwende IE10+ oder andere Browser',
198 success: 'Upload erfolgreich',
199 fail: 'Upload fehlgeschlagen',
200 preview: 'Vorschau',
201 btn: {
202 off: 'Abbrechen',
203 close: 'Schließen',
204 back: 'Zurück',
205 save: 'Speichern'
206 },
207 error: {
208 onlyImg: 'Nur Bilder',
209 outOfSize: 'Das Bild ist zu groß: ',
210 lowestPx: 'Das Bild ist zu klein. Mindestens: '
211 }
212 },
213 ja: {
214 hint: 'クリック・ドラッグしてファイルをアップロード',
215 loading: 'アップロード中...',
216 noSupported: 'このブラウザは対応されていません。IE10+かその他の主要ブラウザをお使いください。',
217 success: 'アップロード成功',
218 fail: 'アップロード失敗',
219 preview: 'プレビュー',
220 btn: {
221 off: 'キャンセル',
222 close: '閉じる',
223 back: '戻る',
224 save: '保存'
225 },
226 error: {
227 onlyImg: '画像のみ',
228 outOfSize: '画像サイズが上限を超えています。上限: ',
229 lowestPx: '画像が小さすぎます。最小サイズ: '
230 }
231 }
232 }
233
src/components/ImageCropper/utils/mimes.js
File was created 1 export default {
2 'jpg': 'image/jpeg',
3 'png': 'image/png',
4 'gif': 'image/gif',
5 'svg': 'image/svg+xml',
6 'psd': 'image/photoshop'
7 }
8
src/components/JsonEditor/index.vue
File was created 1 <template>
2 <div class="json-editor">
3 <textarea ref="textarea" />
4 </div>
5 </template>
6
7 <script>
8 import CodeMirror from 'codemirror'
9 import 'codemirror/addon/lint/lint.css'
10 import 'codemirror/lib/codemirror.css'
11 import 'codemirror/theme/rubyblue.css'
12 require('script-loader!jsonlint')
13 import 'codemirror/mode/javascript/javascript'
14 import 'codemirror/addon/lint/lint'
15 import 'codemirror/addon/lint/json-lint'
16
17 export default {
18 name: 'JsonEditor',
19 /* eslint-disable vue/require-prop-types */
20 props: ['value'],
21 data() {
22 return {
23 jsonEditor: false
24 }
25 },
26 watch: {
27 value(value) {
28 const editorValue = this.jsonEditor.getValue()
29 if (value !== editorValue) {
30 this.jsonEditor.setValue(JSON.stringify(this.value, null, 2))
31 }
32 }
33 },
34 mounted() {
35 this.jsonEditor = CodeMirror.fromTextArea(this.$refs.textarea, {
36 lineNumbers: true,
37 mode: 'application/json',
38 gutters: ['CodeMirror-lint-markers'],
39 theme: 'rubyblue',
40 lint: true
41 })
42
43 this.jsonEditor.setValue(JSON.stringify(this.value, null, 2))
44 this.jsonEditor.on('change', cm => {
45 this.$emit('changed', cm.getValue())
46 this.$emit('input', cm.getValue())
47 })
48 },
49 methods: {
50 getValue() {
51 return this.jsonEditor.getValue()
52 }
53 }
54 }
55 </script>
56
57 <style scoped>
58 .json-editor{
59 height: 100%;
60 position: relative;
61 }
62 .json-editor >>> .CodeMirror {
63 height: auto;
64 min-height: 300px;
65 }
66 .json-editor >>> .CodeMirror-scroll{
67 min-height: 300px;
68 }
69 .json-editor >>> .cm-s-rubyblue span.cm-string {
70 color: #F08047;
71 }
72 </style>
73
src/components/Kanban/index.vue
File was created 1 <template>
2 <div class="board-column">
3 <div class="board-column-header">
4 {{ headerText }}
5 </div>
6 <draggable
7 :list="list"
8 v-bind="$attrs"
9 class="board-column-content"
10 :set-data="setData"
11 >
12 <div v-for="element in list" :key="element.id" class="board-item">
13 {{ element.name }} {{ element.id }}
14 </div>
15 </draggable>
16 </div>
17 </template>
18
19 <script>
20 import draggable from 'vuedraggable'
21
22 export default {
23 name: 'DragKanbanDemo',
24 components: {
25 draggable
26 },
27 props: {
28 headerText: {
29 type: String,
30 default: 'Header'
31 },
32 options: {
33 type: Object,
34 default() {
35 return {}
36 }
37 },
38 list: {
39 type: Array,
40 default() {
41 return []
42 }
43 }
44 },
45 methods: {
46 setData(dataTransfer) {
47 // to avoid Firefox bug
48 // Detail see : https://github.com/RubaXa/Sortable/issues/1012
49 dataTransfer.setData('Text', '')
50 }
51 }
52 }
53 </script>
54 <style lang="scss" scoped>
55 .board-column {
56 min-width: 300px;
57 min-height: 100px;
58 height: auto;
59 overflow: hidden;
60 background: #f0f0f0;
61 border-radius: 3px;
62
63 .board-column-header {
64 height: 50px;
65 line-height: 50px;
66 overflow: hidden;
67 padding: 0 20px;
68 text-align: center;
69 background: #333;
70 color: #fff;
71 border-radius: 3px 3px 0 0;
72 }
73
74 .board-column-content {
75 height: auto;
76 overflow: hidden;
77 border: 10px solid transparent;
78 min-height: 60px;
79 display: flex;
80 justify-content: flex-start;
81 flex-direction: column;
82 align-items: center;
83
84 .board-item {
85 cursor: pointer;
86 width: 100%;
87 height: 64px;
88 margin: 5px 0;
89 background-color: #fff;
90 text-align: left;
91 line-height: 54px;
92 padding: 5px 10px;
93 box-sizing: border-box;
94 box-shadow: 0px 1px 3px 0 rgba(0, 0, 0, 0.2);
95 }
96 }
97 }
98 </style>
99
100
src/components/LangSelect/index.vue
File was created 1 <template>
2 <el-dropdown trigger="click" class="international" @command="handleSetLanguage">
3 <div>
4 <svg-icon class-name="international-icon" icon-class="language" />
5 </div>
6 <el-dropdown-menu slot="dropdown">
7 <el-dropdown-item :disabled="language==='zh'" command="zh">
8 中文
9 </el-dropdown-item>
10 <el-dropdown-item :disabled="language==='en'" command="en">
11 English
12 </el-dropdown-item>
13 <el-dropdown-item :disabled="language==='es'" command="es">
14 Español
15 </el-dropdown-item>
16 <el-dropdown-item :disabled="language==='ja'" command="ja">
17 日本語
18 </el-dropdown-item>
19 </el-dropdown-menu>
20 </el-dropdown>
21 </template>
22
23 <script>
24 export default {
25 computed: {
26 language() {
27 return this.$store.getters.language
28 }
29 },
30 methods: {
31 handleSetLanguage(lang) {
32 this.$i18n.locale = lang
33 this.$store.dispatch('app/setLanguage', lang)
34 this.$message({
35 message: 'Switch Language Success',
36 type: 'success'
37 })
38 }
39 }
40 }
41 </script>
42
src/components/MDinput/index.vue
File was created 1 <template>
2 <div :class="computedClasses" class="material-input__component">
3 <div :class="{iconClass:icon}">
4 <i v-if="icon" :class="['el-icon-' + icon]" class="el-input__icon material-input__icon" />
5 <input
6 v-if="type === 'email'"
7 v-model="currentValue"
8 :name="name"
9 :placeholder="fillPlaceHolder"
10 :readonly="readonly"
11 :disabled="disabled"
12 :autocomplete="autoComplete"
13 :required="required"
14 type="email"
15 class="material-input"
16 @focus="handleMdFocus"
17 @blur="handleMdBlur"
18 @input="handleModelInput"
19 >
20 <input
21 v-if="type === 'url'"
22 v-model="currentValue"
23 :name="name"
24 :placeholder="fillPlaceHolder"
25 :readonly="readonly"
26 :disabled="disabled"
27 :autocomplete="autoComplete"
28 :required="required"
29 type="url"
30 class="material-input"
31 @focus="handleMdFocus"
32 @blur="handleMdBlur"
33 @input="handleModelInput"
34 >
35 <input
36 v-if="type === 'number'"
37 v-model="currentValue"
38 :name="name"
39 :placeholder="fillPlaceHolder"
40 :step="step"
41 :readonly="readonly"
42 :disabled="disabled"
43 :autocomplete="autoComplete"
44 :max="max"
45 :min="min"
46 :minlength="minlength"
47 :maxlength="maxlength"
48 :required="required"
49 type="number"
50 class="material-input"
51 @focus="handleMdFocus"
52 @blur="handleMdBlur"
53 @input="handleModelInput"
54 >
55 <input
56 v-if="type === 'password'"
57 v-model="currentValue"
58 :name="name"
59 :placeholder="fillPlaceHolder"
60 :readonly="readonly"
61 :disabled="disabled"
62 :autocomplete="autoComplete"
63 :max="max"
64 :min="min"
65 :required="required"
66 type="password"
67 class="material-input"
68 @focus="handleMdFocus"
69 @blur="handleMdBlur"
70 @input="handleModelInput"
71 >
72 <input
73 v-if="type === 'tel'"
74 v-model="currentValue"
75 :name="name"
76 :placeholder="fillPlaceHolder"
77 :readonly="readonly"
78 :disabled="disabled"
79 :autocomplete="autoComplete"
80 :required="required"
81 type="tel"
82 class="material-input"
83 @focus="handleMdFocus"
84 @blur="handleMdBlur"
85 @input="handleModelInput"
86 >
87 <input
88 v-if="type === 'text'"
89 v-model="currentValue"
90 :name="name"
91 :placeholder="fillPlaceHolder"
92 :readonly="readonly"
93 :disabled="disabled"
94 :autocomplete="autoComplete"
95 :minlength="minlength"
96 :maxlength="maxlength"
97 :required="required"
98 type="text"
99 class="material-input"
100 @focus="handleMdFocus"
101 @blur="handleMdBlur"
102 @input="handleModelInput"
103 >
104 <span class="material-input-bar" />
105 <label class="material-label">
106 <slot />
107 </label>
108 </div>
109 </div>
110 </template>
111
112 <script>
113 // source:https://github.com/wemake-services/vue-material-input/blob/master/src/components/MaterialInput.vue
114
115 export default {
116 name: 'MdInput',
117 props: {
118 /* eslint-disable */
119 icon: String,
120 name: String,
121 type: {
122 type: String,
123 default: 'text'
124 },
125 value: [String, Number],
126 placeholder: String,
127 readonly: Boolean,
128 disabled: Boolean,
129 min: String,
130 max: String,
131 step: String,
132 minlength: Number,
133 maxlength: Number,
134 required: {
135 type: Boolean,
136 default: true
137 },
138 autoComplete: {
139 type: String,
140 default: 'off'
141 },
142 validateEvent: {
143 type: Boolean,
144 default: true
145 }
146 },
147 data() {
148 return {
149 currentValue: this.value,
150 focus: false,
151 fillPlaceHolder: null
152 }
153 },
154 computed: {
155 computedClasses() {
156 return {
157 'material--active': this.focus,
158 'material--disabled': this.disabled,
159 'material--raised': Boolean(this.focus || this.currentValue) // has value
160 }
161 }
162 },
163 watch: {
164 value(newValue) {
165 this.currentValue = newValue
166 }
167 },
168 methods: {
169 handleModelInput(event) {
170 const value = event.target.value
171 this.$emit('input', value)
172 if (this.$parent.$options.componentName === 'ElFormItem') {
173 if (this.validateEvent) {
174 this.$parent.$emit('el.form.change', [value])
175 }
176 }
177 this.$emit('change', value)
178 },
179 handleMdFocus(event) {
180 this.focus = true
181 this.$emit('focus', event)
182 if (this.placeholder && this.placeholder !== '') {
183 this.fillPlaceHolder = this.placeholder
184 }
185 },
186 handleMdBlur(event) {
187 this.focus = false
188 this.$emit('blur', event)
189 this.fillPlaceHolder = null
190 if (this.$parent.$options.componentName === 'ElFormItem') {
191 if (this.validateEvent) {
192 this.$parent.$emit('el.form.blur', [this.currentValue])
193 }
194 }
195 }
196 }
197 }
198 </script>
199
200 <style lang="scss" scoped>
201 // Fonts:
202 $font-size-base: 16px;
203 $font-size-small: 18px;
204 $font-size-smallest: 12px;
205 $font-weight-normal: normal;
206 $font-weight-bold: bold;
207 $apixel: 1px;
208 // Utils
209 $spacer: 12px;
210 $transition: 0.2s ease all;
211 $index: 0px;
212 $index-has-icon: 30px;
213 // Theme:
214 $color-white: white;
215 $color-grey: #9E9E9E;
216 $color-grey-light: #E0E0E0;
217 $color-blue: #2196F3;
218 $color-red: #F44336;
219 $color-black: black;
220 // Base clases:
221 %base-bar-pseudo {
222 content: '';
223 height: 1px;
224 width: 0;
225 bottom: 0;
226 position: absolute;
227 transition: $transition;
228 }
229
230 // Mixins:
231 @mixin slided-top() {
232 top: - ($font-size-base + $spacer);
233 left: 0;
234 font-size: $font-size-base;
235 font-weight: $font-weight-bold;
236 }
237
238 // Component:
239 .material-input__component {
240 margin-top: 36px;
241 position: relative;
242 * {
243 box-sizing: border-box;
244 }
245 .iconClass {
246 .material-input__icon {
247 position: absolute;
248 left: 0;
249 line-height: $font-size-base;
250 color: $color-blue;
251 top: $spacer;
252 width: $index-has-icon;
253 height: $font-size-base;
254 font-size: $font-size-base;
255 font-weight: $font-weight-normal;
256 pointer-events: none;
257 }
258 .material-label {
259 left: $index-has-icon;
260 }
261 .material-input {
262 text-indent: $index-has-icon;
263 }
264 }
265 .material-input {
266 font-size: $font-size-base;
267 padding: $spacer $spacer $spacer - $apixel * 10 $spacer / 2;
268 display: block;
269 width: 100%;
270 border: none;
271 line-height: 1;
272 border-radius: 0;
273 &:focus {
274 outline: none;
275 border: none;
276 border-bottom: 1px solid transparent; // fixes the height issue
277 }
278 }
279 .material-label {
280 font-weight: $font-weight-normal;
281 position: absolute;
282 pointer-events: none;
283 left: $index;
284 top: 0;
285 transition: $transition;
286 font-size: $font-size-small;
287 }
288 .material-input-bar {
289 position: relative;
290 display: block;
291 width: 100%;
292 &:before {
293 @extend %base-bar-pseudo;
294 left: 50%;
295 }
296 &:after {
297 @extend %base-bar-pseudo;
298 right: 50%;
299 }
300 }
301 // Disabled state:
302 &.material--disabled {
303 .material-input {
304 border-bottom-style: dashed;
305 }
306 }
307 // Raised state:
308 &.material--raised {
309 .material-label {
310 @include slided-top();
311 }
312 }
313 // Active state:
314 &.material--active {
315 .material-input-bar {
316 &:before,
317 &:after {
318 width: 50%;
319 }
320 }
321 }
322 }
323
324 .material-input__component {
325 background: $color-white;
326 .material-input {
327 background: none;
328 color: $color-black;
329 text-indent: $index;
330 border-bottom: 1px solid $color-grey-light;
331 }
332 .material-label {
333 color: $color-grey;
334 }
335 .material-input-bar {
336 &:before,
337 &:after {
338 background: $color-blue;
339 }
340 }
341 // Active state:
342 &.material--active {
343 .material-label {
344 color: $color-blue;
345 }
346 }
347 // Errors:
348 &.material--has-errors {
349 &.material--active .material-label {
350 color: $color-red;
351 }
352 .material-input-bar {
353 &:before,
354 &:after {
355 background: transparent;
356 }
357 }
358 }
359 }
360 </style>
361
src/components/MarkdownEditor/default-options.js
File was created 1 // doc: https://nhnent.github.io/tui.editor/api/latest/ToastUIEditor.html#ToastUIEditor
2 export default {
3 minHeight: '200px',
4 previewStyle: 'vertical',
5 useCommandShortcut: true,
6 useDefaultHTMLSanitizer: true,
7 usageStatistics: false,
8 hideModeSwitch: false,
9 toolbarItems: [
10 'heading',
11 'bold',
12 'italic',
13 'strike',
14 'divider',
15 'hr',
16 'quote',
17 'divider',
18 'ul',
19 'ol',
20 'task',
21 'indent',
22 'outdent',
23 'divider',
24 'table',
25 'image',
26 'link',
27 'divider',
28 'code',
29 'codeblock'
30 ]
31 }
32
src/components/MarkdownEditor/index.vue
File was created 1 <template>
2 <div :id="id" />
3 </template>
4
5 <script>
6 // deps for editor
7 import 'codemirror/lib/codemirror.css' // codemirror
8 import 'tui-editor/dist/tui-editor.css' // editor ui
9 import 'tui-editor/dist/tui-editor-contents.css' // editor content
10
11 import Editor from 'tui-editor'
12 import defaultOptions from './default-options'
13
14 export default {
15 name: 'MarkdownEditor',
16 props: {
17 value: {
18 type: String,
19 default: ''
20 },
21 id: {
22 type: String,
23 required: false,
24 default() {
25 return 'markdown-editor-' + +new Date() + ((Math.random() * 1000).toFixed(0) + '')
26 }
27 },
28 options: {
29 type: Object,
30 default() {
31 return defaultOptions
32 }
33 },
34 mode: {
35 type: String,
36 default: 'markdown'
37 },
38 height: {
39 type: String,
40 required: false,
41 default: '300px'
42 },
43 language: {
44 type: String,
45 required: false,
46 default: 'en_US' // https://github.com/nhnent/tui.editor/tree/master/src/js/langs
47 }
48 },
49 data() {
50 return {
51 editor: null
52 }
53 },
54 computed: {
55 editorOptions() {
56 const options = Object.assign({}, defaultOptions, this.options)
57 options.initialEditType = this.mode
58 options.height = this.height
59 options.language = this.language
60 return options
61 }
62 },
63 watch: {
64 value(newValue, preValue) {
65 if (newValue !== preValue && newValue !== this.editor.getValue()) {
66 this.editor.setValue(newValue)
67 }
68 },
69 language(val) {
70 this.destroyEditor()
71 this.initEditor()
72 },
73 height(newValue) {
74 this.editor.height(newValue)
75 },
76 mode(newValue) {
77 this.editor.changeMode(newValue)
78 }
79 },
80 mounted() {
81 this.initEditor()
82 },
83 destroyed() {
84 this.destroyEditor()
85 },
86 methods: {
87 initEditor() {
88 this.editor = new Editor({
89 el: document.getElementById(this.id),
90 ...this.editorOptions
91 })
92 if (this.value) {
93 this.editor.setValue(this.value)
94 }
95 this.editor.on('change', () => {
96 this.$emit('input', this.editor.getValue())
97 })
98 },
99 destroyEditor() {
100 if (!this.editor) return
101 this.editor.off('change')
102 this.editor.remove()
103 },
104 setValue(value) {
105 this.editor.setValue(value)
106 },
107 getValue() {
108 return this.editor.getValue()
109 },
110 setHtml(value) {
111 this.editor.setHtml(value)
112 },
113 getHtml() {
114 return this.editor.getHtml()
115 }
116 }
117 }
118 </script>
119
src/components/Pagination/index.vue
File was created 1 <template>
2 <div :class="{'hidden':hidden}" class="pagination-container">
3 <el-pagination
4 :background="background"
5 :current-page.sync="currentPage"
6 :page-size.sync="pageSize"
7 :layout="layout"
8 :page-sizes="pageSizes"
9 :total="total"
10 v-bind="$attrs"
11 @size-change="handleSizeChange"
12 @current-change="handleCurrentChange"
13 />
14 </div>
15 </template>
16
17 <script>
18 import { scrollTo } from '@/utils/scroll-to'
19
20 export default {
21 name: 'Pagination',
22 props: {
23 total: {
24 required: true,
25 type: Number
26 },
27 page: {
28 type: Number,
29 default: 1
30 },
31 limit: {
32 type: Number,
33 default: 20
34 },
35 pageSizes: {
36 type: Array,
37 default() {
38 return [10, 20, 30, 50]
39 }
40 },
41 layout: {
42 type: String,
43 default: 'total, sizes, prev, pager, next, jumper'
44 },
45 background: {
46 type: Boolean,
47 default: true
48 },
49 autoScroll: {
50 type: Boolean,
51 default: true
52 },
53 hidden: {
54 type: Boolean,
55 default: false
56 }
57 },
58 computed: {
59 currentPage: {
60 get() {
61 return this.page
62 },
63 set(val) {
64 this.$emit('update:page', val)
65 }
66 },
67 pageSize: {
68 get() {
69 return this.limit
70 },
71 set(val) {
72 this.$emit('update:limit', val)
73 }
74 }
75 },
76 methods: {
77 handleSizeChange(val) {
78 this.$emit('pagination', { page: this.currentPage, limit: val })
79 if (this.autoScroll) {
80 scrollTo(0, 800)
81 }
82 },
83 handleCurrentChange(val) {
84 this.$emit('pagination', { page: val, limit: this.pageSize })
85 if (this.autoScroll) {
86 scrollTo(0, 800)
87 }
88 }
89 }
90 }
91 </script>
92
93 <style scoped>
94 .pagination-container {
95 background: #fff;
96 padding: 32px 16px;
97 }
98 .pagination-container.hidden {
99 display: none;
100 }
101 </style>
102
src/components/PanThumb/index.vue
File was created 1 <template>
2 <div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item">
3 <div class="pan-info">
4 <div class="pan-info-roles-container">
5 <slot />
6 </div>
7 </div>
8 <!-- eslint-disable-next-line -->
9 <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
10 </div>
11 </template>
12
13 <script>
14 export default {
15 name: 'PanThumb',
16 props: {
17 image: {
18 type: String,
19 required: true
20 },
21 zIndex: {
22 type: Number,
23 default: 1
24 },
25 width: {
26 type: String,
27 default: '150px'
28 },
29 height: {
30 type: String,
31 default: '150px'
32 }
33 }
34 }
35 </script>
36
37 <style scoped>
38 .pan-item {
39 width: 200px;
40 height: 200px;
41 border-radius: 50%;
42 display: inline-block;
43 position: relative;
44 cursor: default;
45 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
46 }
47
48 .pan-info-roles-container {
49 padding: 20px;
50 text-align: center;
51 }
52
53 .pan-thumb {
54 width: 100%;
55 height: 100%;
56 background-position: center center;
57 background-size: cover;
58 border-radius: 50%;
59 overflow: hidden;
60 position: absolute;
61 transform-origin: 95% 40%;
62 transition: all 0.3s ease-in-out;
63 }
64
65 /* .pan-thumb:after {
66 content: '';
67 width: 8px;
68 height: 8px;
69 position: absolute;
70 border-radius: 50%;
71 top: 40%;
72 left: 95%;
73 margin: -4px 0 0 -4px;
74 background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
75 box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
76 } */
77
78 .pan-info {
79 position: absolute;
80 width: inherit;
81 height: inherit;
82 border-radius: 50%;
83 overflow: hidden;
84 box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05);
85 }
86
87 .pan-info h3 {
88 color: #fff;
89 text-transform: uppercase;
90 position: relative;
91 letter-spacing: 2px;
92 font-size: 18px;
93 margin: 0 60px;
94 padding: 22px 0 0 0;
95 height: 85px;
96 font-family: 'Open Sans', Arial, sans-serif;
97 text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3);
98 }
99
100 .pan-info p {
101 color: #fff;
102 padding: 10px 5px;
103 font-style: italic;
104 margin: 0 30px;
105 font-size: 12px;
106 border-top: 1px solid rgba(255, 255, 255, 0.5);
107 }
108
109 .pan-info p a {
110 display: block;
111 color: #333;
112 width: 80px;
113 height: 80px;
114 background: rgba(255, 255, 255, 0.3);
115 border-radius: 50%;
116 color: #fff;
117 font-style: normal;
118 font-weight: 700;
119 text-transform: uppercase;
120 font-size: 9px;
121 letter-spacing: 1px;
122 padding-top: 24px;
123 margin: 7px auto 0;
124 font-family: 'Open Sans', Arial, sans-serif;
125 opacity: 0;
126 transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s, background 0.2s linear 0s;
127 transform: translateX(60px) rotate(90deg);
128 }
129
130 .pan-info p a:hover {
131 background: rgba(255, 255, 255, 0.5);
132 }
133
134 .pan-item:hover .pan-thumb {
135 transform: rotate(-110deg);
136 }
137
138 .pan-item:hover .pan-info p a {
139 opacity: 1;
140 transform: translateX(0px) rotate(0deg);
141 }
142 </style>
143
src/components/RightPanel/index.vue
File was created 1 <template>
2 <div ref="rightPanel" :class="{show:show}" class="rightPanel-container">
3 <div class="rightPanel-background" />
4 <div class="rightPanel">
5 <div class="handle-button" :style="{'top':buttonTop+'px','background-color':theme}" @click="show=!show">
6 <i :class="show?'el-icon-close':'el-icon-setting'" />
7 </div>
8 <div class="rightPanel-items">
9 <slot />
10 </div>
11 </div>
12 </div>
13 </template>
14
15 <script>
16 import { addClass, removeClass } from '@/utils'
17
18 export default {
19 name: 'RightPanel',
20 props: {
21 clickNotClose: {
22 default: false,
23 type: Boolean
24 },
25 buttonTop: {
26 default: 250,
27 type: Number
28 }
29 },
30 data() {
31 return {
32 show: false
33 }
34 },
35 computed: {
36 theme() {
37 return this.$store.state.settings.theme
38 }
39 },
40 watch: {
41 show(value) {
42 if (value && !this.clickNotClose) {
43 this.addEventClick()
44 }
45 if (value) {
46 addClass(document.body, 'showRightPanel')
47 } else {
48 removeClass(document.body, 'showRightPanel')
49 }
50 }
51 },
52 mounted() {
53 this.insertToBody()
54 },
55 beforeDestroy() {
56 const elx = this.$refs.rightPanel
57 elx.remove()
58 },
59 methods: {
60 addEventClick() {
61 window.addEventListener('click', this.closeSidebar)
62 },
63 closeSidebar(evt) {
64 const parent = evt.target.closest('.rightPanel')
65 if (!parent) {
66 this.show = false
67 window.removeEventListener('click', this.closeSidebar)
68 }
69 },
70 insertToBody() {
71 const elx = this.$refs.rightPanel
72 const body = document.querySelector('body')
73 body.insertBefore(elx, body.firstChild)
74 }
75 }
76 }
77 </script>
78
79 <style>
80 .showRightPanel {
81 overflow: hidden;
82 position: relative;
83 width: calc(100% - 15px);
84 }
85 </style>
86
87 <style lang="scss" scoped>
88 .rightPanel-background {
89 position: fixed;
90 top: 0;
91 left: 0;
92 opacity: 0;
93 transition: opacity .3s cubic-bezier(.7, .3, .1, 1);
94 background: rgba(0, 0, 0, .2);
95 z-index: -1;
96 }
97
98 .rightPanel {
99 width: 100%;
100 max-width: 260px;
101 height: 100vh;
102 position: fixed;
103 top: 0;
104 right: 0;
105 box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, .05);
106 transition: all .25s cubic-bezier(.7, .3, .1, 1);
107 transform: translate(100%);
108 background: #fff;
109 z-index: 40000;
110 }
111
112 .show {
113 transition: all .3s cubic-bezier(.7, .3, .1, 1);
114
115 .rightPanel-background {
116 z-index: 20000;
117 opacity: 1;
118 width: 100%;
119 height: 100%;
120 }
121
122 .rightPanel {
123 transform: translate(0);
124 }
125 }
126
127 .handle-button {
128 width: 48px;
129 height: 48px;
130 position: absolute;
131 left: -48px;
132 text-align: center;
133 font-size: 24px;
134 border-radius: 6px 0 0 6px !important;
135 z-index: 0;
136 pointer-events: auto;
137 cursor: pointer;
138 color: #fff;
139 line-height: 48px;
140 i {
141 font-size: 24px;
142 line-height: 48px;
143 }
144 }
145 </style>
146
src/components/Screenfull/index.vue
File was created 1 <template>
2 <div>
3 <svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" @click="click" />
4 </div>
5 </template>
6
7 <script>
8 import screenfull from 'screenfull'
9
10 export default {
11 name: 'Screenfull',
12 data() {
13 return {
14 isFullscreen: false
15 }
16 },
17 mounted() {
18 this.init()
19 },
20 beforeDestroy() {
21 this.destroy()
22 },
23 methods: {
24 click() {
25 if (!screenfull.enabled) {
26 this.$message({
27 message: 'you browser can not work',
28 type: 'warning'
29 })
30 return false
31 }
32 screenfull.toggle()
33 },
34 change() {
35 this.isFullscreen = screenfull.isFullscreen
36 },
37 init() {
38 if (screenfull.enabled) {
39 screenfull.on('change', this.change)
40 }
41 },
42 destroy() {
43 if (screenfull.enabled) {
44 screenfull.off('change', this.change)
45 }
46 }
47 }
48 }
49 </script>
50
51 <style scoped>
52 .screenfull-svg {
53 display: inline-block;
54 cursor: pointer;
55 fill: #5a5e66;;
56 width: 20px;
57 height: 20px;
58 vertical-align: 10px;
59 }
60 </style>
61
src/components/Share/DropdownMenu.vue
File was created 1 <template>
2 <div :class="{active:isActive}" class="share-dropdown-menu">
3 <div class="share-dropdown-menu-wrapper">
4 <span class="share-dropdown-menu-title" @click.self="clickTitle">{{ title }}</span>
5 <div v-for="(item,index) of items" :key="index" class="share-dropdown-menu-item">
6 <a v-if="item.href" :href="item.href" target="_blank">{{ item.title }}</a>
7 <span v-else>{{ item.title }}</span>
8 </div>
9 </div>
10 </div>
11 </template>
12
13 <script>
14 export default {
15 props: {
16 items: {
17 type: Array,
18 default: function() {
19 return []
20 }
21 },
22 title: {
23 type: String,
24 default: 'vue'
25 }
26 },
27 data() {
28 return {
29 isActive: false
30 }
31 },
32 methods: {
33 clickTitle() {
34 this.isActive = !this.isActive
35 }
36 }
37 }
38 </script>
39
40 <style lang="scss" >
41 $n: 9; //和items.length 相同
42 $t: .1s;
43 .share-dropdown-menu {
44 width: 250px;
45 position: relative;
46 z-index: 1;
47 height: auto!important;
48 &-title {
49 width: 100%;
50 display: block;
51 cursor: pointer;
52 background: black;
53 color: white;
54 height: 60px;
55 line-height: 60px;
56 font-size: 20px;
57 text-align: center;
58 z-index: 2;
59 transform: translate3d(0,0,0);
60 }
61 &-wrapper {
62 position: relative;
63 }
64 &-item {
65 text-align: center;
66 position: absolute;
67 width: 100%;
68 background: #e0e0e0;
69 color: #000;
70 line-height: 60px;
71 height: 60px;
72 cursor: pointer;
73 font-size: 18px;
74 overflow: hidden;
75 opacity: 1;
76 transition: transform 0.28s ease;
77 &:hover {
78 background: black;
79 color: white;
80 }
81 @for $i from 1 through $n {
82 &:nth-of-type(#{$i}) {
83 z-index: -1;
84 transition-delay: $i*$t;
85 transform: translate3d(0, -60px, 0);
86 }
87 }
88 }
89 &.active {
90 .share-dropdown-menu-wrapper {
91 z-index: 1;
92 }
93 .share-dropdown-menu-item {
94 @for $i from 1 through $n {
95 &:nth-of-type(#{$i}) {
96 transition-delay: ($n - $i)*$t;
97 transform: translate3d(0, ($i - 1)*60px, 0);
98 }
99 }
100 }
101 }
102 }
103 </style>
104
src/components/SizeSelect/index.vue
File was created 1 <template>
2 <el-dropdown trigger="click" @command="handleSetSize">
3 <div>
4 <svg-icon class-name="size-icon" icon-class="size" />
5 </div>
6 <el-dropdown-menu slot="dropdown">
7 <el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size===item.value" :command="item.value">
8 {{
9 item.label }}
10 </el-dropdown-item>
11 </el-dropdown-menu>
12 </el-dropdown>
13 </template>
14
15 <script>
16 export default {
17 data() {
18 return {
19 sizeOptions: [
20 { label: 'Default', value: 'default' },
21 { label: 'Medium', value: 'medium' },
22 { label: 'Small', value: 'small' },
23 { label: 'Mini', value: 'mini' }
24 ]
25 }
26 },
27 computed: {
28 size() {
29 return this.$store.getters.size
30 }
31 },
32 methods: {
33 handleSetSize(size) {
34 this.$ELEMENT.size = size
35 this.$store.dispatch('app/setSize', size)
36 this.refreshView()
37 this.$message({
38 message: 'Switch Size Success',
39 type: 'success'
40 })
41 },
42 refreshView() {
43 // In order to make the cached page re-rendered
44 this.$store.dispatch('tagsView/delAllCachedViews', this.$route)
45
46 const { fullPath } = this.$route
47
48 this.$nextTick(() => {
49 this.$router.replace({
50 path: '/redirect' + fullPath
51 })
52 })
53 }
54 }
55
56 }
57 </script>
58
src/components/Sticky/index.vue
File was created 1 <template>
2 <div :style="{height:height+'px',zIndex:zIndex}">
3 <div
4 :class="className"
5 :style="{top:(isSticky ? stickyTop +'px' : ''),zIndex:zIndex,position:position,width:width,height:height+'px'}"
6 >
7 <slot>
8 <div>sticky</div>
9 </slot>
10 </div>
11 </div>
12 </template>
13
14 <script>
15 export default {
16 name: 'Sticky',
17 props: {
18 stickyTop: {
19 type: Number,
20 default: 0
21 },
22 zIndex: {
23 type: Number,
24 default: 1
25 },
26 className: {
27 type: String,
28 default: ''
29 }
30 },
31 data() {
32 return {
33 active: false,
34 position: '',
35 width: undefined,
36 height: undefined,
37 isSticky: false
38 }
39 },
40 mounted() {
41 this.height = this.$el.getBoundingClientRect().height
42 window.addEventListener('scroll', this.handleScroll)
43 window.addEventListener('resize', this.handleResize)
44 },
45 activated() {
46 this.handleScroll()
47 },
48 destroyed() {
49 window.removeEventListener('scroll', this.handleScroll)
50 window.removeEventListener('resize', this.handleResize)
51 },
52 methods: {
53 sticky() {
54 if (this.active) {
55 return
56 }
57 this.position = 'fixed'
58 this.active = true
59 this.width = this.width + 'px'
60 this.isSticky = true
61 },
62 handleReset() {
63 if (!this.active) {
64 return
65 }
66 this.reset()
67 },
68 reset() {
69 this.position = ''
70 this.width = 'auto'
71 this.active = false
72 this.isSticky = false
73 },
74 handleScroll() {
75 const width = this.$el.getBoundingClientRect().width
76 this.width = width || 'auto'
77 const offsetTop = this.$el.getBoundingClientRect().top
78 if (offsetTop < this.stickyTop) {
79 this.sticky()
80 return
81 }
82 this.handleReset()
83 },
84 handleResize() {
85 if (this.isSticky) {
86 this.width = this.$el.getBoundingClientRect().width + 'px'
87 }
88 }
89 }
90 }
91 </script>
92
src/components/SvgIcon/index.vue 100644 → 100755
1 <template> 1 <template>
2 <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" /> 2 <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
3 <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners"> 3 <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
4 <use :href="iconName" /> 4 <use :href="iconName" />
5 </svg> 5 </svg>
6 </template> 6 </template>
7 7
8 <script> 8 <script>
9 // doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage 9 // doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
10 import { isExternal } from '@/utils/validate' 10 import { isExternal } from '@/utils/validate'
11 11
12 export default { 12 export default {
13 name: 'SvgIcon', 13 name: 'SvgIcon',
14 props: { 14 props: {
15 iconClass: { 15 iconClass: {
16 type: String, 16 type: String,
17 required: true 17 required: true
18 }, 18 },
19 className: { 19 className: {
20 type: String, 20 type: String,
21 default: '' 21 default: ''
22 } 22 }
23 }, 23 },
24 computed: { 24 computed: {
25 isExternal() { 25 isExternal() {
26 return isExternal(this.iconClass) 26 return isExternal(this.iconClass)
27 }, 27 },
28 iconName() { 28 iconName() {
29 return `#icon-${this.iconClass}` 29 return `#icon-${this.iconClass}`
30 }, 30 },
31 svgClass() { 31 svgClass() {
32 if (this.className) { 32 if (this.className) {
33 return 'svg-icon ' + this.className 33 return 'svg-icon ' + this.className
34 } else { 34 } else {
35 return 'svg-icon' 35 return 'svg-icon'
36 } 36 }
37 }, 37 },
38 styleExternalIcon() { 38 styleExternalIcon() {
39 return { 39 return {
40 mask: `url(${this.iconClass}) no-repeat 50% 50%`, 40 mask: `url(${this.iconClass}) no-repeat 50% 50%`,
41 '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%` 41 '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
42 } 42 }
43 } 43 }
44 } 44 }
45 } 45 }
46 </script> 46 </script>
47 47
48 <style scoped> 48 <style scoped>
49 .svg-icon { 49 .svg-icon {
50 width: 1em; 50 width: 1em;
51 height: 1em; 51 height: 1em;
52 vertical-align: -0.15em; 52 vertical-align: -0.15em;
53 fill: currentColor; 53 fill: currentColor;
54 overflow: hidden; 54 overflow: hidden;
55 } 55 }
56 56
57 .svg-external-icon { 57 .svg-external-icon {
58 background-color: currentColor; 58 background-color: currentColor;
59 mask-size: cover!important; 59 mask-size: cover!important;
60 display: inline-block; 60 display: inline-block;
61 } 61 }
62 </style> 62 </style>
63 63
src/components/TextHoverEffect/Mallki.vue
File was created 1 <template>
2 <a :class="className" class="link--mallki" href="#">
3 {{ text }}
4 <span :data-letters="text" />
5 <span :data-letters="text" />
6 </a>
7 </template>
8
9 <script>
10 export default {
11 props: {
12 className: {
13 type: String,
14 default: ''
15 },
16 text: {
17 type: String,
18 default: 'vue-element-admin'
19 }
20 }
21 }
22 </script>
23
24 <style>
25 /* Mallki */
26
27 .link--mallki {
28 font-weight: 800;
29 color: #4dd9d5;
30 font-family: 'Dosis', sans-serif;
31 -webkit-transition: color 0.5s 0.25s;
32 transition: color 0.5s 0.25s;
33 overflow: hidden;
34 position: relative;
35 display: inline-block;
36 line-height: 1;
37 outline: none;
38 text-decoration: none;
39 }
40
41 .link--mallki:hover {
42 -webkit-transition: none;
43 transition: none;
44 color: transparent;
45 }
46
47 .link--mallki::before {
48 content: '';
49 width: 100%;
50 height: 6px;
51 margin: -3px 0 0 0;
52 background: #3888fa;
53 position: absolute;
54 left: 0;
55 top: 50%;
56 -webkit-transform: translate3d(-100%, 0, 0);
57 transform: translate3d(-100%, 0, 0);
58 -webkit-transition: -webkit-transform 0.4s;
59 transition: transform 0.4s;
60 -webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
61 transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
62 }
63
64 .link--mallki:hover::before {
65 -webkit-transform: translate3d(100%, 0, 0);
66 transform: translate3d(100%, 0, 0);
67 }
68
69 .link--mallki span {
70 position: absolute;
71 height: 50%;
72 width: 100%;
73 left: 0;
74 top: 0;
75 overflow: hidden;
76 }
77
78 .link--mallki span::before {
79 content: attr(data-letters);
80 color: red;
81 position: absolute;
82 left: 0;
83 width: 100%;
84 color: #3888fa;
85 -webkit-transition: -webkit-transform 0.5s;
86 transition: transform 0.5s;
87 }
88
89 .link--mallki span:nth-child(2) {
90 top: 50%;
91 }
92
93 .link--mallki span:first-child::before {
94 top: 0;
95 -webkit-transform: translate3d(0, 100%, 0);
96 transform: translate3d(0, 100%, 0);
97 }
98
99 .link--mallki span:nth-child(2)::before {
100 bottom: 0;
101 -webkit-transform: translate3d(0, -100%, 0);
102 transform: translate3d(0, -100%, 0);
103 }
104
105 .link--mallki:hover span::before {
106 -webkit-transition-delay: 0.3s;
107 transition-delay: 0.3s;
108 -webkit-transform: translate3d(0, 0, 0);
109 transform: translate3d(0, 0, 0);
110 -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
111 transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
112 }
113 </style>
114
src/components/ThemePicker/index.vue
File was created 1 <template>
2 <el-color-picker
3 v-model="theme"
4 :predefine="['#409EFF', '#1890ff', '#304156','#212121','#11a983', '#13c2c2', '#6959CD', '#f5222d', ]"
5 class="theme-picker"
6 popper-class="theme-picker-dropdown"
7 />
8 </template>
9
10 <script>
11 const version = require('element-ui/package.json').version // element-ui version from node_modules
12 const ORIGINAL_THEME = '#409EFF' // default color
13
14 export default {
15 data() {
16 return {
17 chalk: '', // content of theme-chalk css
18 theme: ''
19 }
20 },
21 computed: {
22 defaultTheme() {
23 return this.$store.state.settings.theme
24 }
25 },
26 watch: {
27 defaultTheme: {
28 handler: function(val, oldVal) {
29 this.theme = val
30 },
31 immediate: true
32 },
33 async theme(val) {
34 const oldVal = this.chalk ? this.theme : ORIGINAL_THEME
35 if (typeof val !== 'string') return
36 const themeCluster = this.getThemeCluster(val.replace('#', ''))
37 const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
38 console.log(themeCluster, originalCluster)
39
40 const $message = this.$message({
41 message: ' Compiling the theme',
42 customClass: 'theme-message',
43 type: 'success',
44 duration: 0,
45 iconClass: 'el-icon-loading'
46 })
47
48 const getHandler = (variable, id) => {
49 return () => {
50 const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
51 const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
52
53 let styleTag = document.getElementById(id)
54 if (!styleTag) {
55 styleTag = document.createElement('style')
56 styleTag.setAttribute('id', id)
57 document.head.appendChild(styleTag)
58 }
59 styleTag.innerText = newStyle
60 }
61 }
62
63 if (!this.chalk) {
64 const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`
65 await this.getCSSString(url, 'chalk')
66 }
67
68 const chalkHandler = getHandler('chalk', 'chalk-style')
69
70 chalkHandler()
71
72 const styles = [].slice.call(document.querySelectorAll('style'))
73 .filter(style => {
74 const text = style.innerText
75 return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)
76 })
77 styles.forEach(style => {
78 const { innerText } = style
79 if (typeof innerText !== 'string') return
80 style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
81 })
82
83 this.$emit('change', val)
84
85 $message.close()
86 }
87 },
88
89 methods: {
90 updateStyle(style, oldCluster, newCluster) {
91 let newStyle = style
92 oldCluster.forEach((color, index) => {
93 newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
94 })
95 return newStyle
96 },
97
98 getCSSString(url, variable) {
99 return new Promise(resolve => {
100 const xhr = new XMLHttpRequest()
101 xhr.onreadystatechange = () => {
102 if (xhr.readyState === 4 && xhr.status === 200) {
103 this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
104 resolve()
105 }
106 }
107 xhr.open('GET', url)
108 xhr.send()
109 })
110 },
111
112 getThemeCluster(theme) {
113 const tintColor = (color, tint) => {
114 let red = parseInt(color.slice(0, 2), 16)
115 let green = parseInt(color.slice(2, 4), 16)
116 let blue = parseInt(color.slice(4, 6), 16)
117
118 if (tint === 0) { // when primary color is in its rgb space
119 return [red, green, blue].join(',')
120 } else {
121 red += Math.round(tint * (255 - red))
122 green += Math.round(tint * (255 - green))
123 blue += Math.round(tint * (255 - blue))
124
125 red = red.toString(16)
126 green = green.toString(16)
127 blue = blue.toString(16)
128
129 return `#${red}${green}${blue}`
130 }
131 }
132
133 const shadeColor = (color, shade) => {
134 let red = parseInt(color.slice(0, 2), 16)
135 let green = parseInt(color.slice(2, 4), 16)
136 let blue = parseInt(color.slice(4, 6), 16)
137
138 red = Math.round((1 - shade) * red)
139 green = Math.round((1 - shade) * green)
140 blue = Math.round((1 - shade) * blue)
141
142 red = red.toString(16)
143 green = green.toString(16)
144 blue = blue.toString(16)
145
146 return `#${red}${green}${blue}`
147 }
148
149 const clusters = [theme]
150 for (let i = 0; i <= 9; i++) {
151 clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
152 }
153 clusters.push(shadeColor(theme, 0.1))
154 return clusters
155 }
156 }
157 }
158 </script>
159
160 <style>
161 .theme-message,
162 .theme-picker-dropdown {
163 z-index: 99999 !important;
164 }
165
166 .theme-picker .el-color-picker__trigger {
167 height: 26px !important;
168 width: 26px !important;
169 padding: 2px;
170 }
171
172 .theme-picker-dropdown .el-color-dropdown__link-btn {
173 display: none;
174 }
175 </style>
176
src/components/Tinymce/components/EditorImage.vue
File was created 1 <template>
2 <div class="upload-container">
3 <el-button :style="{background:color,borderColor:color}" icon="el-icon-upload" size="mini" type="primary" @click=" dialogVisible=true">
4 upload
5 </el-button>
6 <el-dialog :visible.sync="dialogVisible">
7 <el-upload
8 :multiple="true"
9 :file-list="fileList"
10 :show-file-list="true"
11 :on-remove="handleRemove"
12 :on-success="handleSuccess"
13 :before-upload="beforeUpload"
14 class="editor-slide-upload"
15 action="https://httpbin.org/post"
16 list-type="picture-card"
17 >
18 <el-button size="small" type="primary">
19 Click upload
20 </el-button>
21 </el-upload>
22 <el-button @click="dialogVisible = false">
23 Cancel
24 </el-button>
25 <el-button type="primary" @click="handleSubmit">
26 Confirm
27 </el-button>
28 </el-dialog>
29 </div>
30 </template>
31
32 <script>
33 // import { getToken } from 'api/qiniu'
34
35 export default {
36 name: 'EditorSlideUpload',
37 props: {
38 color: {
39 type: String,
40 default: '#1890ff'
41 }
42 },
43 data() {
44 return {
45 dialogVisible: false,
46 listObj: {},
47 fileList: []
48 }
49 },
50 methods: {
51 checkAllSuccess() {
52 return Object.keys(this.listObj).every(item => this.listObj[item].hasSuccess)
53 },
54 handleSubmit() {
55 const arr = Object.keys(this.listObj).map(v => this.listObj[v])
56 if (!this.checkAllSuccess()) {
57 this.$message('Please wait for all images to be uploaded successfully. If there is a network problem, please refresh the page and upload again!')
58 return
59 }
60 this.$emit('successCBK', arr)
61 this.listObj = {}
62 this.fileList = []
63 this.dialogVisible = false
64 },
65 handleSuccess(response, file) {
66 const uid = file.uid
67 const objKeyArr = Object.keys(this.listObj)
68 for (let i = 0, len = objKeyArr.length; i < len; i++) {
69 if (this.listObj[objKeyArr[i]].uid === uid) {
70 this.listObj[objKeyArr[i]].url = response.files.file
71 this.listObj[objKeyArr[i]].hasSuccess = true
72 return
73 }
74 }
75 },
76 handleRemove(file) {
77 const uid = file.uid
78 const objKeyArr = Object.keys(this.listObj)
79 for (let i = 0, len = objKeyArr.length; i < len; i++) {
80 if (this.listObj[objKeyArr[i]].uid === uid) {
81 delete this.listObj[objKeyArr[i]]
82 return
83 }
84 }
85 },
86 beforeUpload(file) {
87 const _self = this
88 const _URL = window.URL || window.webkitURL
89 const fileName = file.uid
90 this.listObj[fileName] = {}
91 return new Promise((resolve, reject) => {
92 const img = new Image()
93 img.src = _URL.createObjectURL(file)
94 img.onload = function() {
95 _self.listObj[fileName] = { hasSuccess: false, uid: file.uid, width: this.width, height: this.height }
96 }
97 resolve(true)
98 })
99 }
100 }
101 }
102 </script>
103
104 <style lang="scss" scoped>
105 .editor-slide-upload {
106 margin-bottom: 20px;
107 /deep/ .el-upload--picture-card {
108 width: 100%;
109 }
110 }
111 </style>
112
src/components/Tinymce/dynamicLoadScript.js
File was created 1 let callbacks = []
2
3 function loadedTinymce() {
4 // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144
5 // check is successfully downloaded script
6 return window.tinymce
7 }
8
9 const dynamicLoadScript = (src, callback) => {
10 const existingScript = document.getElementById(src)
11 const cb = callback || function() {}
12
13 if (!existingScript) {
14 const script = document.createElement('script')
15 script.src = src // src url for the third-party library being loaded.
16 script.id = src
17 document.body.appendChild(script)
18 callbacks.push(cb)
19 const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd
20 onEnd(script)
21 }
22
23 if (existingScript && cb) {
24 if (loadedTinymce()) {
25 cb(null, existingScript)
26 } else {
27 callbacks.push(cb)
28 }
29 }
30
31 function stdOnEnd(script) {
32 script.onload = function() {
33 // this.onload = null here is necessary
34 // because even IE9 works not like others
35 this.onerror = this.onload = null
36 for (const cb of callbacks) {
37 cb(null, script)
38 }
39 callbacks = null
40 }
41 script.onerror = function() {
42 this.onerror = this.onload = null
43 cb(new Error('Failed to load ' + src), script)
44 }
45 }
46
47 function ieOnEnd(script) {
48 script.onreadystatechange = function() {
49 if (this.readyState !== 'complete' && this.readyState !== 'loaded') return
50 this.onreadystatechange = null
51 for (const cb of callbacks) {
52 cb(null, script) // there is no way to catch loading errors in IE8
53 }
54 callbacks = null
55 }
56 }
57 }
58
59 export default dynamicLoadScript
60
src/components/Tinymce/index.vue
File was created 1 <template>
2 <div :class="{fullscreen:fullscreen}" class="tinymce-container" :style="{width:containerWidth}">
3 <textarea :id="tinymceId" class="tinymce-textarea" />
4 <div class="editor-custom-btn-container">
5 <editorImage color="#1890ff" class="editor-upload-btn" @successCBK="imageSuccessCBK" />
6 </div>
7 </div>
8 </template>
9
10 <script>
11 /**
12 * docs:
13 * https://panjiachen.github.io/vue-element-admin-site/feature/component/rich-editor.html#tinymce
14 */
15 import editorImage from './components/EditorImage'
16 import plugins from './plugins'
17 import toolbar from './toolbar'
18 import load from './dynamicLoadScript'
19
20 // why use this cdn, detail see https://github.com/PanJiaChen/tinymce-all-in-one
21 const tinymceCDN = 'https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.js'
22
23 export default {
24 name: 'Tinymce',
25 components: { editorImage },
26 props: {
27 id: {
28 type: String,
29 default: function() {
30 return 'vue-tinymce-' + +new Date() + ((Math.random() * 1000).toFixed(0) + '')
31 }
32 },
33 value: {
34 type: String,
35 default: ''
36 },
37 toolbar: {
38 type: Array,
39 required: false,
40 default() {
41 return []
42 }
43 },
44 menubar: {
45 type: String,
46 default: 'file edit insert view format table'
47 },
48 height: {
49 type: [Number, String],
50 required: false,
51 default: 360
52 },
53 width: {
54 type: [Number, String],
55 required: false,
56 default: 'auto'
57 }
58 },
59 data() {
60 return {
61 hasChange: false,
62 hasInit: false,
63 tinymceId: this.id,
64 fullscreen: false,
65 languageTypeList: {
66 'en': 'en',
67 'zh': 'zh_CN',
68 'es': 'es_MX',
69 'ja': 'ja'
70 }
71 }
72 },
73 computed: {
74 language() {
75 return this.languageTypeList[this.$store.getters.language]
76 },
77 containerWidth() {
78 const width = this.width
79 if (/^[\d]+(\.[\d]+)?$/.test(width)) { // matches `100`, `'100'`
80 return `${width}px`
81 }
82 return width
83 }
84 },
85 watch: {
86 value(val) {
87 if (!this.hasChange && this.hasInit) {
88 this.$nextTick(() =>
89 window.tinymce.get(this.tinymceId).setContent(val || ''))
90 }
91 },
92 language() {
93 this.destroyTinymce()
94 this.$nextTick(() => this.initTinymce())
95 }
96 },
97 mounted() {
98 this.init()
99 },
100 activated() {
101 if (window.tinymce) {
102 this.initTinymce()
103 }
104 },
105 deactivated() {
106 this.destroyTinymce()
107 },
108 destroyed() {
109 this.destroyTinymce()
110 },
111 methods: {
112 init() {
113 // dynamic load tinymce from cdn
114 load(tinymceCDN, (err) => {
115 if (err) {
116 this.$message.error(err.message)
117 return
118 }
119 this.initTinymce()
120 })
121 },
122 initTinymce() {
123 const _this = this
124 window.tinymce.init({
125 language: this.language,
126 selector: `#${this.tinymceId}`,
127 height: this.height,
128 body_class: 'panel-body ',
129 object_resizing: false,
130 toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
131 menubar: this.menubar,
132 plugins: plugins,
133 end_container_on_empty_block: true,
134 powerpaste_word_import: 'clean',
135 code_dialog_height: 450,
136 code_dialog_width: 1000,
137 advlist_bullet_styles: 'square',
138 advlist_number_styles: 'default',
139 imagetools_cors_hosts: ['www.tinymce.com', 'codepen.io'],
140 default_link_target: '_blank',
141 link_title: false,
142 nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin
143 init_instance_callback: editor => {
144 if (_this.value) {
145 editor.setContent(_this.value)
146 }
147 _this.hasInit = true
148 editor.on('NodeChange Change KeyUp SetContent', () => {
149 this.hasChange = true
150 this.$emit('input', editor.getContent())
151 })
152 },
153 setup(editor) {
154 editor.on('FullscreenStateChanged', (e) => {
155 _this.fullscreen = e.state
156 })
157 }
158 // 整合七牛上传
159 // images_dataimg_filter(img) {
160 // setTimeout(() => {
161 // const $image = $(img);
162 // $image.removeAttr('width');
163 // $image.removeAttr('height');
164 // if ($image[0].height && $image[0].width) {
165 // $image.attr('data-wscntype', 'image');
166 // $image.attr('data-wscnh', $image[0].height);
167 // $image.attr('data-wscnw', $image[0].width);
168 // $image.addClass('wscnph');
169 // }
170 // }, 0);
171 // return img
172 // },
173 // images_upload_handler(blobInfo, success, failure, progress) {
174 // progress(0);
175 // const token = _this.$store.getters.token;
176 // getToken(token).then(response => {
177 // const url = response.data.qiniu_url;
178 // const formData = new FormData();
179 // formData.append('token', response.data.qiniu_token);
180 // formData.append('key', response.data.qiniu_key);
181 // formData.append('file', blobInfo.blob(), url);
182 // upload(formData).then(() => {
183 // success(url);
184 // progress(100);
185 // })
186 // }).catch(err => {
187 // failure('出现未知问题,刷新页面,或者联系程序员')
188 // console.log(err);
189 // });
190 // },
191 })
192 },
193 destroyTinymce() {
194 const tinymce = window.tinymce.get(this.tinymceId)
195 if (this.fullscreen) {
196 tinymce.execCommand('mceFullScreen')
197 }
198
199 if (tinymce) {
200 tinymce.destroy()
201 }
202 },
203 setContent(value) {
204 window.tinymce.get(this.tinymceId).setContent(value)
205 },
206 getContent() {
207 window.tinymce.get(this.tinymceId).getContent()
208 },
209 imageSuccessCBK(arr) {
210 const _this = this
211 arr.forEach(v => {
212 window.tinymce.get(_this.tinymceId).insertContent(`<img class="wscnph" src="${v.url}" >`)
213 })
214 }
215 }
216 }
217 </script>
218
219 <style scoped>
220 .tinymce-container {
221 position: relative;
222 line-height: normal;
223 }
224 .tinymce-container>>>.mce-fullscreen {
225 z-index: 10000;
226 }
227 .tinymce-textarea {
228 visibility: hidden;
229 z-index: -1;
230 }
231 .editor-custom-btn-container {
232 position: absolute;
233 right: 4px;
234 top: 4px;
235 /*z-index: 2005;*/
236 }
237 .fullscreen .editor-custom-btn-container {
238 z-index: 10000;
239 position: fixed;
240 }
241 .editor-upload-btn {
242 display: inline-block;
243 }
244 </style>
245
src/components/Tinymce/plugins.js
File was created 1 // Any plugins you want to use has to be imported
2 // Detail plugins list see https://www.tinymce.com/docs/plugins/
3 // Custom builds see https://www.tinymce.com/download/custom-builds/
4
5 const plugins = ['advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount']
6
7 export default plugins
8
src/components/Tinymce/toolbar.js
File was created 1 // Here is a list of the toolbar
2 // Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols
3
4 const toolbar = ['searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', 'hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen']
5
6 export default toolbar
7
src/components/Upload/SingleImage.vue
File was created 1 <template>
2 <div class="upload-container">
3 <el-upload
4 :data="dataObj"
5 :multiple="false"
6 :show-file-list="false"
7 :on-success="handleImageSuccess"
8 class="image-uploader"
9 drag
10 action="https://httpbin.org/post"
11 >
12 <i class="el-icon-upload" />
13 <div class="el-upload__text">
14 将文件拖到此处,或<em>点击上传</em>
15 </div>
16 </el-upload>
17 <div class="image-preview">
18 <div v-show="imageUrl.length>1" class="image-preview-wrapper">
19 <img :src="imageUrl+'?imageView2/1/w/200/h/200'">
20 <div class="image-preview-action">
21 <i class="el-icon-delete" @click="rmImage" />
22 </div>
23 </div>
24 </div>
25 </div>
26 </template>
27
28 <script>
29 import { getToken } from '@/api/qiniu'
30
31 export default {
32 name: 'SingleImageUpload',
33 props: {
34 value: {
35 type: String,
36 default: ''
37 }
38 },
39 data() {
40 return {
41 tempUrl: '',
42 dataObj: { token: '', key: '' }
43 }
44 },
45 computed: {
46 imageUrl() {
47 return this.value
48 }
49 },
50 methods: {
51 rmImage() {
52 this.emitInput('')
53 },
54 emitInput(val) {
55 this.$emit('input', val)
56 },
57 handleImageSuccess() {
58 this.emitInput(this.tempUrl)
59 },
60 beforeUpload() {
61 const _self = this
62 return new Promise((resolve, reject) => {
63 getToken().then(response => {
64 const key = response.data.qiniu_key
65 const token = response.data.qiniu_token
66 _self._data.dataObj.token = token
67 _self._data.dataObj.key = key
68 this.tempUrl = response.data.qiniu_url
69 resolve(true)
70 }).catch(err => {
71 console.log(err)
72 reject(false)
73 })
74 })
75 }
76 }
77 }
78 </script>
79
80 <style lang="scss" scoped>
81 @import "~@/styles/mixin.scss";
82 .upload-container {
83 width: 100%;
84 position: relative;
85 @include clearfix;
86 .image-uploader {
87 width: 60%;
88 float: left;
89 }
90 .image-preview {
91 width: 200px;
92 height: 200px;
93 position: relative;
94 border: 1px dashed #d9d9d9;
95 float: left;
96 margin-left: 50px;
97 .image-preview-wrapper {
98 position: relative;
99 width: 100%;
100 height: 100%;
101 img {
102 width: 100%;
103 height: 100%;
104 }
105 }
106 .image-preview-action {
107 position: absolute;
108 width: 100%;
109 height: 100%;
110 left: 0;
111 top: 0;
112 cursor: default;
113 text-align: center;
114 color: #fff;
115 opacity: 0;
116 font-size: 20px;
117 background-color: rgba(0, 0, 0, .5);
118 transition: opacity .3s;
119 cursor: pointer;
120 text-align: center;
121 line-height: 200px;
122 .el-icon-delete {
123 font-size: 36px;
124 }
125 }
126 &:hover {
127 .image-preview-action {
128 opacity: 1;
129 }
130 }
131 }
132 }
133
134 </style>
135
src/components/Upload/SingleImage2.vue
File was created 1 <template>
2 <div class="singleImageUpload2 upload-container">
3 <el-upload
4 :data="dataObj"
5 :multiple="false"
6 :show-file-list="false"
7 :on-success="handleImageSuccess"
8 class="image-uploader"
9 drag
10 action="https://httpbin.org/post"
11 >
12 <i class="el-icon-upload" />
13 <div class="el-upload__text">
14 Drag或<em>点击上传</em>
15 </div>
16 </el-upload>
17 <div v-show="imageUrl.length>0" class="image-preview">
18 <div v-show="imageUrl.length>1" class="image-preview-wrapper">
19 <img :src="imageUrl">
20 <div class="image-preview-action">
21 <i class="el-icon-delete" @click="rmImage" />
22 </div>
23 </div>
24 </div>
25 </div>
26 </template>
27
28 <script>
29 import { getToken } from '@/api/qiniu'
30
31 export default {
32 name: 'SingleImageUpload2',
33 props: {
34 value: {
35 type: String,
36 default: ''
37 }
38 },
39 data() {
40 return {
41 tempUrl: '',
42 dataObj: { token: '', key: '' }
43 }
44 },
45 computed: {
46 imageUrl() {
47 return this.value
48 }
49 },
50 methods: {
51 rmImage() {
52 this.emitInput('')
53 },
54 emitInput(val) {
55 this.$emit('input', val)
56 },
57 handleImageSuccess() {
58 this.emitInput(this.tempUrl)
59 },
60 beforeUpload() {
61 const _self = this
62 return new Promise((resolve, reject) => {
63 getToken().then(response => {
64 const key = response.data.qiniu_key
65 const token = response.data.qiniu_token
66 _self._data.dataObj.token = token
67 _self._data.dataObj.key = key
68 this.tempUrl = response.data.qiniu_url
69 resolve(true)
70 }).catch(() => {
71 reject(false)
72 })
73 })
74 }
75 }
76 }
77 </script>
78
79 <style lang="scss" scoped>
80 .upload-container {
81 width: 100%;
82 height: 100%;
83 position: relative;
84 .image-uploader {
85 height: 100%;
86 }
87 .image-preview {
88 width: 100%;
89 height: 100%;
90 position: absolute;
91 left: 0px;
92 top: 0px;
93 border: 1px dashed #d9d9d9;
94 .image-preview-wrapper {
95 position: relative;
96 width: 100%;
97 height: 100%;
98 img {
99 width: 100%;
100 height: 100%;
101 }
102 }
103 .image-preview-action {
104 position: absolute;
105 width: 100%;
106 height: 100%;
107 left: 0;
108 top: 0;
109 cursor: default;
110 text-align: center;
111 color: #fff;
112 opacity: 0;
113 font-size: 20px;
114 background-color: rgba(0, 0, 0, .5);
115 transition: opacity .3s;
116 cursor: pointer;
117 text-align: center;
118 line-height: 200px;
119 .el-icon-delete {
120 font-size: 36px;
121 }
122 }
123 &:hover {
124 .image-preview-action {
125 opacity: 1;
126 }
127 }
128 }
129 }
130 </style>
131
src/components/Upload/SingleImage3.vue
File was created 1 <template>
2 <div class="upload-container">
3 <el-upload
4 :data="dataObj"
5 :multiple="false"
6 :show-file-list="false"
7 :on-success="handleImageSuccess"
8 class="image-uploader"
9 drag
10 action="https://httpbin.org/post"
11 >
12 <i class="el-icon-upload" />
13 <div class="el-upload__text">
14 将文件拖到此处,或<em>点击上传</em>
15 </div>
16 </el-upload>
17 <div class="image-preview image-app-preview">
18 <div v-show="imageUrl.length>1" class="image-preview-wrapper">
19 <img :src="imageUrl">
20 <div class="image-preview-action">
21 <i class="el-icon-delete" @click="rmImage" />
22 </div>
23 </div>
24 </div>
25 <div class="image-preview">
26 <div v-show="imageUrl.length>1" class="image-preview-wrapper">
27 <img :src="imageUrl">
28 <div class="image-preview-action">
29 <i class="el-icon-delete" @click="rmImage" />
30 </div>
31 </div>
32 </div>
33 </div>
34 </template>
35
36 <script>
37 import { getToken } from '@/api/qiniu'
38
39 export default {
40 name: 'SingleImageUpload3',
41 props: {
42 value: {
43 type: String,
44 default: ''
45 }
46 },
47 data() {
48 return {
49 tempUrl: '',
50 dataObj: { token: '', key: '' }
51 }
52 },
53 computed: {
54 imageUrl() {
55 return this.value
56 }
57 },
58 methods: {
59 rmImage() {
60 this.emitInput('')
61 },
62 emitInput(val) {
63 this.$emit('input', val)
64 },
65 handleImageSuccess(file) {
66 this.emitInput(file.files.file)
67 },
68 beforeUpload() {
69 const _self = this
70 return new Promise((resolve, reject) => {
71 getToken().then(response => {
72 const key = response.data.qiniu_key
73 const token = response.data.qiniu_token
74 _self._data.dataObj.token = token
75 _self._data.dataObj.key = key
76 this.tempUrl = response.data.qiniu_url
77 resolve(true)
78 }).catch(err => {
79 console.log(err)
80 reject(false)
81 })
82 })
83 }
84 }
85 }
86 </script>
87
88 <style lang="scss" scoped>
89 @import "~@/styles/mixin.scss";
90 .upload-container {
91 width: 100%;
92 position: relative;
93 @include clearfix;
94 .image-uploader {
95 width: 35%;
96 float: left;
97 }
98 .image-preview {
99 width: 200px;
100 height: 200px;
101 position: relative;
102 border: 1px dashed #d9d9d9;
103 float: left;
104 margin-left: 50px;
105 .image-preview-wrapper {
106 position: relative;
107 width: 100%;
108 height: 100%;
109 img {
110 width: 100%;
111 height: 100%;
112 }
113 }
114 .image-preview-action {
115 position: absolute;
116 width: 100%;
117 height: 100%;
118 left: 0;
119 top: 0;
120 cursor: default;
121 text-align: center;
122 color: #fff;
123 opacity: 0;
124 font-size: 20px;
125 background-color: rgba(0, 0, 0, .5);
126 transition: opacity .3s;
127 cursor: pointer;
128 text-align: center;
129 line-height: 200px;
130 .el-icon-delete {
131 font-size: 36px;
132 }
133 }
134 &:hover {
135 .image-preview-action {
136 opacity: 1;
137 }
138 }
139 }
140 .image-app-preview {
141 width: 320px;
142 height: 180px;
143 position: relative;
144 border: 1px dashed #d9d9d9;
145 float: left;
146 margin-left: 50px;
147 .app-fake-conver {
148 height: 44px;
149 position: absolute;
150 width: 100%; // background: rgba(0, 0, 0, .1);
151 text-align: center;
152 line-height: 64px;
153 color: #fff;
154 }
155 }
156 }
157 </style>
158
src/components/UploadExcel/index.vue
File was created 1 <template>
2 <div>
3 <input ref="excel-upload-input" class="excel-upload-input" type="file" accept=".xlsx, .xls" @change="handleClick">
4 <div class="drop" @drop="handleDrop" @dragover="handleDragover" @dragenter="handleDragover">
5 Drop excel file here or
6 <el-button :loading="loading" style="margin-left:16px;" size="mini" type="primary" @click="handleUpload">
7 Browse
8 </el-button>
9 </div>
10 </div>
11 </template>
12
13 <script>
14 import XLSX from 'xlsx'
15
16 export default {
17 props: {
18 beforeUpload: Function, // eslint-disable-line
19 onSuccess: Function// eslint-disable-line
20 },
21 data() {
22 return {
23 loading: false,
24 excelData: {
25 header: null,
26 results: null
27 }
28 }
29 },
30 methods: {
31 generateData({ header, results }) {
32 this.excelData.header = header
33 this.excelData.results = results
34 this.onSuccess && this.onSuccess(this.excelData)
35 },
36 handleDrop(e) {
37 e.stopPropagation()
38 e.preventDefault()
39 if (this.loading) return
40 const files = e.dataTransfer.files
41 if (files.length !== 1) {
42 this.$message.error('Only support uploading one file!')
43 return
44 }
45 const rawFile = files[0] // only use files[0]
46
47 if (!this.isExcel(rawFile)) {
48 this.$message.error('Only supports upload .xlsx, .xls, .csv suffix files')
49 return false
50 }
51 this.upload(rawFile)
52 e.stopPropagation()
53 e.preventDefault()
54 },
55 handleDragover(e) {
56 e.stopPropagation()
57 e.preventDefault()
58 e.dataTransfer.dropEffect = 'copy'
59 },
60 handleUpload() {
61 this.$refs['excel-upload-input'].click()
62 },
63 handleClick(e) {
64 const files = e.target.files
65 const rawFile = files[0] // only use files[0]
66 if (!rawFile) return
67 this.upload(rawFile)
68 },
69 upload(rawFile) {
70 this.$refs['excel-upload-input'].value = null // fix can't select the same excel
71
72 if (!this.beforeUpload) {
73 this.readerData(rawFile)
74 return
75 }
76 const before = this.beforeUpload(rawFile)
77 if (before) {
78 this.readerData(rawFile)
79 }
80 },
81 readerData(rawFile) {
82 this.loading = true
83 return new Promise((resolve, reject) => {
84 const reader = new FileReader()
85 reader.onload = e => {
86 const data = e.target.result
87 const workbook = XLSX.read(data, { type: 'array' })
88 const firstSheetName = workbook.SheetNames[0]
89 const worksheet = workbook.Sheets[firstSheetName]
90 const header = this.getHeaderRow(worksheet)
91 const results = XLSX.utils.sheet_to_json(worksheet)
92 this.generateData({ header, results })
93 this.loading = false
94 resolve()
95 }
96 reader.readAsArrayBuffer(rawFile)
97 })
98 },
99 getHeaderRow(sheet) {
100 const headers = []
101 const range = XLSX.utils.decode_range(sheet['!ref'])
102 let C
103 const R = range.s.r
104 /* start in the first row */
105 for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
106 const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
107 /* find the cell in the first row */
108 let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
109 if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
110 headers.push(hdr)
111 }
112 return headers
113 },
114 isExcel(file) {
115 return /\.(xlsx|xls|csv)$/.test(file.name)
116 }
117 }
118 }
119 </script>
120
121 <style scoped>
122 .excel-upload-input{
123 display: none;
124 z-index: -9999;
125 }
126 .drop{
127 border: 2px dashed #bbb;
128 width: 600px;
129 height: 160px;
130 line-height: 160px;
131 margin: 0 auto;
132 font-size: 24px;
133 border-radius: 5px;
134 text-align: center;
135 color: #bbb;
136 position: relative;
137 }
138 </style>
139
src/directive/clipboard/clipboard.js
File was created 1 // Inspired by https://github.com/Inndy/vue-clipboard2
2 const Clipboard = require('clipboard')
3 if (!Clipboard) {
4 throw new Error('you should npm install `clipboard` --save at first ')
5 }
6
7 export default {
8 bind(el, binding) {
9 if (binding.arg === 'success') {
10 el._v_clipboard_success = binding.value
11 } else if (binding.arg === 'error') {
12 el._v_clipboard_error = binding.value
13 } else {
14 const clipboard = new Clipboard(el, {
15 text() { return binding.value },
16 action() { return binding.arg === 'cut' ? 'cut' : 'copy' }
17 })
18 clipboard.on('success', e => {
19 const callback = el._v_clipboard_success
20 callback && callback(e) // eslint-disable-line
21 })
22 clipboard.on('error', e => {
23 const callback = el._v_clipboard_error
24 callback && callback(e) // eslint-disable-line
25 })
26 el._v_clipboard = clipboard
27 }
28 },
29 update(el, binding) {
30 if (binding.arg === 'success') {
31 el._v_clipboard_success = binding.value
32 } else if (binding.arg === 'error') {
33 el._v_clipboard_error = binding.value
34 } else {
35 el._v_clipboard.text = function() { return binding.value }
36 el._v_clipboard.action = function() { return binding.arg === 'cut' ? 'cut' : 'copy' }
37 }
38 },
39 unbind(el, binding) {
40 if (binding.arg === 'success') {
41 delete el._v_clipboard_success
42 } else if (binding.arg === 'error') {
43 delete el._v_clipboard_error
44 } else {
45 el._v_clipboard.destroy()
46 delete el._v_clipboard
47 }
48 }
49 }
50
src/directive/clipboard/index.js
File was created 1 import Clipboard from './clipboard'
2
3 const install = function(Vue) {
4 Vue.directive('Clipboard', Clipboard)
5 }
6
7 if (window.Vue) {
8 window.clipboard = Clipboard
9 Vue.use(install); // eslint-disable-line
10 }
11
12 Clipboard.install = install
13 export default Clipboard
14
src/directive/el-drag-dialog/drag.js
File was created 1 export default {
2 bind(el, binding, vnode) {
3 const dialogHeaderEl = el.querySelector('.el-dialog__header')
4 const dragDom = el.querySelector('.el-dialog')
5 dialogHeaderEl.style.cssText += ';cursor:move;'
6 dragDom.style.cssText += ';top:0px;'
7
8 // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
9 const getStyle = (function() {
10 if (window.document.currentStyle) {
11 return (dom, attr) => dom.currentStyle[attr]
12 } else {
13 return (dom, attr) => getComputedStyle(dom, false)[attr]
14 }
15 })()
16
17 dialogHeaderEl.onmousedown = (e) => {
18 // 鼠标按下,计算当前元素距离可视区的距离
19 const disX = e.clientX - dialogHeaderEl.offsetLeft
20 const disY = e.clientY - dialogHeaderEl.offsetTop
21
22 const dragDomWidth = dragDom.offsetWidth
23 const dragDomHeight = dragDom.offsetHeight
24
25 const screenWidth = document.body.clientWidth
26 const screenHeight = document.body.clientHeight
27
28 const minDragDomLeft = dragDom.offsetLeft
29 const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth
30
31 const minDragDomTop = dragDom.offsetTop
32 const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight
33
34 // 获取到的值带px 正则匹配替换
35 let styL = getStyle(dragDom, 'left')
36 let styT = getStyle(dragDom, 'top')
37
38 if (styL.includes('%')) {
39 styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)
40 styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)
41 } else {
42 styL = +styL.replace(/\px/g, '')
43 styT = +styT.replace(/\px/g, '')
44 }
45
46 document.onmousemove = function(e) {
47 // 通过事件委托,计算移动的距离
48 let left = e.clientX - disX
49 let top = e.clientY - disY
50
51 // 边界处理
52 if (-(left) > minDragDomLeft) {
53 left = -minDragDomLeft
54 } else if (left > maxDragDomLeft) {
55 left = maxDragDomLeft
56 }
57
58 if (-(top) > minDragDomTop) {
59 top = -minDragDomTop
60 } else if (top > maxDragDomTop) {
61 top = maxDragDomTop
62 }
63
64 // 移动当前元素
65 dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
66
67 // emit onDrag event
68 vnode.child.$emit('dragDialog')
69 }
70
71 document.onmouseup = function(e) {
72 document.onmousemove = null
73 document.onmouseup = null
74 }
75 }
76 }
77 }
78
src/directive/el-drag-dialog/index.js
File was created 1 import drag from './drag'
2
3 const install = function(Vue) {
4 Vue.directive('el-drag-dialog', drag)
5 }
6
7 if (window.Vue) {
8 window['el-drag-dialog'] = drag
9 Vue.use(install); // eslint-disable-line
10 }
11
12 drag.install = install
13 export default drag
14
src/directive/el-table/adaptive.js
File was created 1 import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
2
3 /**
4 * How to use
5 * <el-table height="100px" v-el-height-adaptive-table="{bottomOffset: 30}">...</el-table>
6 * el-table height is must be set
7 * bottomOffset: 30(default) // The height of the table from the bottom of the page.
8 */
9
10 const doResize = (el, binding, vnode) => {
11 const { componentInstance: $table } = vnode
12
13 const { value } = binding
14
15 if (!$table.height) {
16 throw new Error(`el-$table must set the height. Such as height='100px'`)
17 }
18 const bottomOffset = (value && value.bottomOffset) || 30
19
20 if (!$table) return
21
22 const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
23 $table.layout.setHeight(height)
24 $table.doLayout()
25 }
26
27 export default {
28 bind(el, binding, vnode) {
29 el.resizeListener = () => {
30 doResize(el, binding, vnode)
31 }
32 // parameter 1 is must be "Element" type
33 addResizeListener(window.document.body, el.resizeListener)
34 },
35 inserted(el, binding, vnode) {
36 doResize(el, binding, vnode)
37 },
38 unbind(el) {
39 removeResizeListener(window.document.body, el.resizeListener)
40 }
41 }
42
src/directive/el-table/index.js
File was created 1 import adaptive from './adaptive'
2
3 const install = function(Vue) {
4 Vue.directive('el-height-adaptive-table', adaptive)
5 }
6
7 if (window.Vue) {
8 window['el-height-adaptive-table'] = adaptive
9 Vue.use(install); // eslint-disable-line
10 }
11
12 adaptive.install = install
13 export default adaptive
14
src/directive/permission/index.js
File was created 1 import permission from './permission'
2
3 const install = function(Vue) {
4 Vue.directive('permission', permission)
5 }
6
7 if (window.Vue) {
8 window['permission'] = permission
9 Vue.use(install); // eslint-disable-line
10 }
11
12 permission.install = install
13 export default permission
14
src/directive/permission/permission.js
File was created 1 import store from '@/store'
2
3 export default {
4 inserted(el, binding, vnode) {
5 const { value } = binding
6 const roles = store.getters && store.getters.roles
7
8 if (value && value instanceof Array && value.length > 0) {
9 const permissionRoles = value
10
11 const hasPermission = roles.some(role => {
12 return permissionRoles.includes(role)
13 })
14
15 if (!hasPermission) {
16 el.parentNode && el.parentNode.removeChild(el)
17 }
18 } else {
19 throw new Error(`need roles! Like v-permission="['admin','editor']"`)
20 }
21 }
22 }
23
src/directive/sticky.js
File was created 1 const vueSticky = {}
2 let listenAction
3 vueSticky.install = Vue => {
4 Vue.directive('sticky', {
5 inserted(el, binding) {
6 const params = binding.value || {}
7 const stickyTop = params.stickyTop || 0
8 const zIndex = params.zIndex || 1000
9 const elStyle = el.style
10
11 elStyle.position = '-webkit-sticky'
12 elStyle.position = 'sticky'
13 // if the browser support css sticky(Currently Safari, Firefox and Chrome Canary)
14 // if (~elStyle.position.indexOf('sticky')) {
15 // elStyle.top = `${stickyTop}px`;
16 // elStyle.zIndex = zIndex;
17 // return
18 // }
19 const elHeight = el.getBoundingClientRect().height
20 const elWidth = el.getBoundingClientRect().width
21 elStyle.cssText = `top: ${stickyTop}px; z-index: ${zIndex}`
22
23 const parentElm = el.parentNode || document.documentElement
24 const placeholder = document.createElement('div')
25 placeholder.style.display = 'none'
26 placeholder.style.width = `${elWidth}px`
27 placeholder.style.height = `${elHeight}px`
28 parentElm.insertBefore(placeholder, el)
29
30 let active = false
31
32 const getScroll = (target, top) => {
33 const prop = top ? 'pageYOffset' : 'pageXOffset'
34 const method = top ? 'scrollTop' : 'scrollLeft'
35 let ret = target[prop]
36 if (typeof ret !== 'number') {
37 ret = window.document.documentElement[method]
38 }
39 return ret
40 }
41
42 const sticky = () => {
43 if (active) {
44 return
45 }
46 if (!elStyle.height) {
47 elStyle.height = `${el.offsetHeight}px`
48 }
49
50 elStyle.position = 'fixed'
51 elStyle.width = `${elWidth}px`
52 placeholder.style.display = 'inline-block'
53 active = true
54 }
55
56 const reset = () => {
57 if (!active) {
58 return
59 }
60
61 elStyle.position = ''
62 placeholder.style.display = 'none'
63 active = false
64 }
65
66 const check = () => {
67 const scrollTop = getScroll(window, true)
68 const offsetTop = el.getBoundingClientRect().top
69 if (offsetTop < stickyTop) {
70 sticky()
71 } else {
72 if (scrollTop < elHeight + stickyTop) {
73 reset()
74 }
75 }
76 }
77 listenAction = () => {
78 check()
79 }
80
81 window.addEventListener('scroll', listenAction)
82 },
83
84 unbind() {
85 window.removeEventListener('scroll', listenAction)
86 }
87 })
88 }
89
90 export default vueSticky
91
92
src/directive/waves/index.js
File was created 1 import waves from './waves'
2
3 const install = function(Vue) {
4 Vue.directive('waves', waves)
5 }
6
7 if (window.Vue) {
8 window.waves = waves
9 Vue.use(install); // eslint-disable-line
10 }
11
12 waves.install = install
13 export default waves
14